Skip to content

Commit

Permalink
Updates for Ruxcon version 1.0 - Add GSM/LTE Geolocation Search, save…
Browse files Browse the repository at this point in the history
…/load for Apple WiFi search
  • Loading branch information
hubert3 committed Oct 27, 2013
1 parent 68c1abf commit 6648a24
Show file tree
Hide file tree
Showing 10 changed files with 432 additions and 21 deletions.
7 changes: 7 additions & 0 deletions iSniff_GPS/models.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
from django.db import models
from picklefield.fields import PickledObjectField
from datetime import datetime

class Client(models.Model):
mac = models.CharField(max_length=len('ff:ff:ff:ff:ff:ff'), unique=True)
Expand Down Expand Up @@ -28,6 +30,11 @@ def __unicode__(self):
if self.BSSID:
return u'<font color="red">ARP:%s</font>' % self.BSSID

class PointDB(models.Model):
name = models.CharField(max_length=200, unique=True)
date_saved = models.DateTimeField('date saved', default=datetime.now)
pointdict = PickledObjectField()

class Location(models.Model):
ap = models.ForeignKey(AP)
lon = models.FloatField()
Expand Down
22 changes: 22 additions & 0 deletions iSniff_GPS/templates/apple-mobile-ajax.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{% load dict_lookup %}
{% load dot_colour %}

{% for b in bssids %}
var myLatLng = new google.maps.LatLng{{ apdict|key:b }};
apData.push(myLatLng);
var marker = new google.maps.Marker({position: myLatLng, map: map, title: '{{manufdict|key:b}}', icon: {% if b == bssid %}bigRedDot{%else%}{{manufdict|key:b|dot_colour}}{%endif%}});
google.maps.event.addListener(marker, "click", function() {loadAjax("{{b}}")});
markersArray.push(marker);
{% endfor %}

pointArray = new google.maps.MVCArray(apData);

if (heatmap.getMap())
{
heatmap.setMap(null);
heatmap = new google.maps.visualization.HeatmapLayer({data: pointArray});
heatmap.setMap(map);
}

document.getElementById('bssid').innerHTML='Cell {{bssid}}';
document.getElementById('results').innerHTML=markersArray.length+' cells ('+{{hits}}+' added)';
214 changes: 214 additions & 0 deletions iSniff_GPS/templates/apple-mobile.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,214 @@
{% extends "base.html" %}
{% load dict_lookup %}
{% load dot_colour %}
{% load cellid_print %}

{% block head %}
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<style>
html, body, #map-canvas {
height: 100%;
margin: 0px;
padding: 0px
}
</style>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=visualization,drawing"></script>
<script src="/static/jquery-2.0.0.min.js"></script>
<script>
var map, heatmap, pointArray, clickedMarker;
var markersArray = [];
var apData = [];
var flag = '/static/flag.png';
var image = '/static/wifi.png';
var blank = '/static/blank.png';

var bigRedDot = {path: google.maps.SymbolPath.CIRCLE,
fillOpacity: 1.0,
fillColor: 'ff0000',
strokeOpacity: 1.0,
strokeColor: '000000',
strokeWeight: 1.0,
scale: 7};

var redCell = {path: google.maps.SymbolPath.CIRCLE,
fillOpacity: 1.0,
fillColor: 'ff0000',
strokeOpacity: 1.0,
strokeColor: '000000',
strokeWeight: 1.0,
scale: 4};

var redLAC = {path: google.maps.SymbolPath.CIRCLE,
fillOpacity: 0.1,
fillColor: 'ff0000',
strokeOpacity: 1.0,
strokeColor: '000000',
strokeWeight: 1.0,
scale: 20};

var blueCell = {path: google.maps.SymbolPath.CIRCLE,
fillOpacity: 1.0,
fillColor: '0000ff',
strokeOpacity: 1.0,
strokeColor: '000000',
strokeWeight: 1.0,
scale: 4};

var blueLAC = {path: google.maps.SymbolPath.CIRCLE,
fillOpacity: 0.1,
fillColor: '0000ff',
strokeOpacity: 1.0,
strokeColor: '000000',
strokeWeight: 1.0,
scale: 20};

var yellowCell = {path: google.maps.SymbolPath.CIRCLE,
fillOpacity: 1.0,
fillColor: 'ffff00',
strokeOpacity: 1.0,
strokeColor: '000000',
strokeWeight: 1.0,
scale: 4};

var yellowLAC = {path: google.maps.SymbolPath.CIRCLE,
fillOpacity: 0.1,
fillColor: 'ffff00',
strokeOpacity: 1.0,
strokeColor: '000000',
strokeWeight: 1.0,
scale: 20};

var blackDot = {path: google.maps.SymbolPath.CIRCLE,
fillOpacity: 1.0,
fillColor: '000000',
strokeOpacity: 1.0,
strokeColor: '000000',
strokeWeight: 1.0,
scale: 4};

function loadAjax(bssid) {
document.getElementById('results').innerHTML = '<img src="/static/ajax-loader.gif">'
$.ajax({
type: "GET",
url: "{% if LTE %}{% url "apple-mobile-lte" cellid="" %}{%else%}{% url "apple-mobile" cellid="" %}{%endif%}"+bssid+"?ajax=1",
success: function (js) {eval(js);}}); // insecure, vulnerable to json hijacking etc.
}
function initialize() {
var mapOptions = {
zoom: 13,
center: new google.maps.LatLng{{center}},
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map-canvas"),mapOptions);
var drawingManager = new google.maps.drawing.DrawingManager({
//drawingMode: google.maps.drawing.OverlayType.MARKER,
drawingControl: true,
drawingControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER,
drawingModes: [
//google.maps.drawing.OverlayType.MARKER,
google.maps.drawing.OverlayType.CIRCLE,
google.maps.drawing.OverlayType.POLYGON,
google.maps.drawing.OverlayType.POLYLINE,
google.maps.drawing.OverlayType.RECTANGLE
]
}
});
drawingManager.setMap(map);
{% for b in bssids %}
var myLatLng = new google.maps.LatLng{{ apdict|key:b }};
apData.push(myLatLng);
var marker = new google.maps.Marker({position: myLatLng, map: map, title: '{{manufdict|key:b}}', icon: {% if b == bssid %}bigRedDot{%else%}{{manufdict|key:b|dot_colour}}{%endif%}});
google.maps.event.addListener(marker, "click", function() {loadAjax("{{b}}")});
markersArray.push(marker);

{% endfor %}
var pointArray = new google.maps.MVCArray(apData);
heatmap = new google.maps.visualization.HeatmapLayer({data: pointArray});
//heatmap.setMap(map);
}

function toggleHeatmap() {
heatmap.setMap(heatmap.getMap() ? null : map);
}

function changeGradient() {
var gradient = [
'rgba(0, 255, 255, 0)',
'rgba(0, 255, 255, 1)',
'rgba(0, 191, 255, 1)',
'rgba(0, 127, 255, 1)',
'rgba(0, 63, 255, 1)',
'rgba(0, 0, 255, 1)',
'rgba(0, 0, 223, 1)',
'rgba(0, 0, 191, 1)',
'rgba(0, 0, 159, 1)',
'rgba(0, 0, 127, 1)',
'rgba(63, 0, 91, 1)',
'rgba(127, 0, 63, 1)',
'rgba(191, 0, 31, 1)',
'rgba(255, 0, 0, 1)'
]
heatmap.setOptions({
gradient: heatmap.get('gradient') ? null : gradient
});
}

function changeRadius() {
heatmap.setOptions({radius: heatmap.get('radius') ? null : 20});
}

function changeOpacity() {
heatmap.setOptions({opacity: heatmap.get('opacity') ? null : 0.2});
}

function toggleMarkers() {
for (var i = 0; i < markersArray.length; i++ ) {
marker = markersArray[i];
if (marker.icon != flag) {marker.setVisible(!marker.visible);}
}
}

function applyFilter() {
var count = 0;
var filter = prompt('Enter operator to show:')

for (var i = 0; i < markersArray.length; i++ ) {
marker = markersArray[i];
if (marker.title.toUpperCase().indexOf(filter.toUpperCase()) == -1) {marker.setVisible(false);} else {count += 1;}
}
document.getElementById('results').innerHTML=count+' cells matching '+filter; // domxss
}

function showAll() {
for (var i = 0; i < markersArray.length; i++ ) {
marker = markersArray[i];
marker.setVisible(true);
}
document.getElementById('results').innerHTML=markersArray.length+' cells shown.';
}

</script>
{% endblock %}

{% block content %}
<h2><div id='bssid'>Cell {{bssid}}</div></h2>
<!--<input id="BSSID" value="{{ bssid }}">
<input type="submit" value="Go" onclick='window.location="{% url "applewloc-base" %}/"+document.getElementById("BSSID").value'>
--><h3><div id='results'>{% if hits %}{{hits}} cells shown.{%endif%}</div></h3>
<div id="panel">
<button onclick="toggleMarkers()">Toggle markers</button>
<button onclick="applyFilter()">Filter</button>
<button onclick="showAll()">Show all</button>
<button onclick="toggleHeatmap()">Toggle heatmap</button>
<button onclick="changeGradient()">Change gradient</button>
<button onclick="changeRadius()">Change radius</button>
<button onclick="changeOpacity()">Change opacity</button>
</div>
<div id="map-canvas"></div>
{% endblock %}
19 changes: 16 additions & 3 deletions iSniff_GPS/templates/apple-wloc.html
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,6 @@
heatmap.setOptions({opacity: heatmap.get('opacity') ? null : 0.2});
}



function toggleMarkers() {
for (var i = 0; i < markersArray.length; i++ ) {
marker = markersArray[i];
Expand All @@ -132,7 +130,7 @@

for (var i = 0; i < markersArray.length; i++ ) {
marker = markersArray[i];
if (marker.title.toUpperCase().indexOf(filter.toUpperCase()) == -1) {marker.setVisible(false);} else {count += 1;}
if (marker.title.toUpperCase().indexOf(filter.toUpperCase()) == -1) {marker.setVisible(false);} else {marker.setIcon('http://maps.google.com/mapfiles/ms/icons/red-dot.png'); count += 1;}
}
document.getElementById('results').innerHTML=count+' APs matching '+filter; // domxss
}
Expand All @@ -145,6 +143,19 @@
document.getElementById('results').innerHTML=markersArray.length+' APs shown.';
}

function load() {
var loadName = prompt('Load saved view:')
window.location = "{% url "loaddb" ""%}"+loadName;
}
function save() {
var saveName = prompt('Save current view as:')
$.ajax({
type: "GET",
url: "{% url "savedb" ""%}"+saveName,
success: function (js) {alert(js);}});
}

</script>
{% endblock %}
Expand All @@ -162,6 +173,8 @@ <h2><div id='bssid'>BSSID {{bssid}}</div></h2>
<button onclick="changeGradient()">Change gradient</button>
<button onclick="changeRadius()">Change radius</button>
<button onclick="changeOpacity()">Change opacity</button>
<button onclick="load()">Load</button>
<button onclick="save()">Save</button>
</div>
<div id="map-canvas"></div>
{% endblock %}
4 changes: 2 additions & 2 deletions iSniff_GPS/templates/base.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>{% block title %}iSniff GPS v0.2 SyScan Edition{% endblock %}</title>
<title>{% block title %}iSniff GPS v1.0 Ruxcon Edition{% endblock %}</title>
<style>

body {
Expand Down Expand Up @@ -171,7 +171,7 @@

<body onload="initialize()">
<div id="sidebar">
<a href="{%url "clientlist" %}">Clients</a> | <a href="{%url "networks"%}">Networks</a> | <a href="{%url "applewloc" 'a4:b1:e9:85:76:67'%}">Apple WiFi Geolocation</a> | <a href="{%url "locatessid" 'blackhat'%}">SSID Search</a> | <a href="{%url "stats"%}">Stats</a>
<a href="{%url "clientlist" %}">Clients</a> | <a href="{%url "networks"%}">Networks</a> | <a href="{%url "applewloc" '00:20:b0:12:3c:40'%}">Apple WiFi Geolocation</a> | <a href="{%url "apple-mobile-lte" cellid='505:1:12288:135943937' %}">Apple LTE Geolocation</a> | <a href="{%url "apple-mobile" cellid='505:3:338:87276701' %}">Apple GSM/3G Geolocation</a> | <a href="{%url "locatessid" 'blackhat'%}">Wigle SSID Search</a> | <a href="{%url "stats"%}">Stats</a>
</div>
{% block content %}{% endblock %}
</body>
Expand Down
19 changes: 19 additions & 0 deletions iSniff_GPS/templatetags/dot_colour.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from django import template

register = template.Library()

@register.filter
def dot_colour(operator):
d = 'blue'
if 'Optus' in operator:
d = 'yellow'
if 'Vodafone' in operator:
d = 'red'
if 'Three' in operator:
d = 'red'

if 'CID:-1' in operator:
return d+'LAC'

return d+'Cell'

6 changes: 4 additions & 2 deletions iSniff_GPS/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,14 @@
url(r'^network/(?P<ssid_or_bssid>.+)$', APDetail.as_view(), name="network"),
url(r'^networks/?$', APList.as_view(), name="networks"),
url(r'^apple-wloc/?$', AppleWloc, name="applewloc-base"),
url(r'^savedb/(?P<name>[:\w]*)$', SaveDB, name="savedb"),
url(r'^loaddb/(?P<name>[:\w]*)$', LoadDB, name="loaddb"),
url(r'^apple-wloc/(?P<bssid>[:\w]+)$', AppleWloc, name="applewloc"),
url(r'^apple-mobile/(?P<cellid>[:\w-]*)$', AppleMobile, name="apple-mobile"),
url(r'^apple-mobile-lte/(?P<cellid>[:\w-]*)$', AppleMobile, {'LTE':True}, name="apple-mobile-lte"),
url(r'^updateSSID$', updateSSID, name="updatessid"),
url(r'^locateSSID/?$', locateSSID, name="locatessid-base"),
url(r'^locateSSID/(?P<ssid>[\w\W]+)$', locateSSID, name="locatessid"),
url(r'^stats/?$', stats.as_view(), name="stats"),

url(r'^admin/', include(admin.site.urls)),)


Loading

0 comments on commit 6648a24

Please sign in to comment.