Added Random-SSID Mode

also fixed the attack stati
This commit is contained in:
Stefan Kremser
2017-05-20 10:30:39 +02:00
parent 64cb0a6f2a
commit e33758cc16
9 changed files with 140 additions and 52 deletions

View File

@@ -123,6 +123,18 @@ bool Attack::send() {
return true; return true;
} }
void Attack::changeRandom(int num){
randomMode = !randomMode;
randomInterval = num;
if(debug) Serial.println("changing randomMode: " + (String)randomMode);
if(randomMode){
if(debug) Serial.println(" generate random SSIDs");
ssidList.clear();
ssidList._random();
randomCounter = 0;
}
}
void Attack::sendDeauths(Mac from, Mac to){ void Attack::sendDeauths(Mac from, Mac to){
for(int i=0;i<settings.attackPacketRate;i++){ for(int i=0;i<settings.attackPacketRate;i++){
buildDeauth(from, to, 0xc0, settings.deauthReason ); buildDeauth(from, to, 0xc0, settings.deauthReason );
@@ -240,9 +252,6 @@ void Attack::run() {
macListChangeCounter++; macListChangeCounter++;
if(settings.macInterval > 0){ if(settings.macInterval > 0){
if (macListChangeCounter >= settings.macInterval) generate(); if (macListChangeCounter >= settings.macInterval) generate();
/*ssidList.clear();
ssidList._random();
macListChangeCounter = 0;*/
} }
if (debug) Serial.println("done"); if (debug) Serial.println("done");
@@ -252,6 +261,18 @@ void Attack::run() {
} }
} }
//Random-Mode Interval
if((isRunning[1] || isRunning[2]) && randomMode && currentMillis - randomTime >= 1000){
randomTime = millis();
if(randomCounter >= randomInterval){
if(debug) Serial.println(" generate random SSIDs");
ssidList.clear();
ssidList._random();
randomCounter = 0;
}
else randomCounter++;
}
} }
void Attack::start(int num) { void Attack::start(int num) {
@@ -281,7 +302,6 @@ void Attack::stop(int num) {
prevTime[num] = millis(); prevTime[num] = millis();
refreshLed(); refreshLed();
} }
stati[num] = "ready"; stati[num] = "ready";
} }
@@ -309,6 +329,8 @@ void Attack::_log(int num){
} }
size_t Attack::getSize(){ size_t Attack::getSize(){
if(apScan.selectedSum == 0) stati[0] = "no AP";
size_t jsonSize = 0; size_t jsonSize = 0;
String json = "{\"aps\":["; String json = "{\"aps\":[";
@@ -358,7 +380,8 @@ size_t Attack::getSize(){
jsonSize += json.length(); jsonSize += json.length();
} }
json = "]}"; json = "],";
json += "\"randomMode\":" + (String)randomMode + "}";
jsonSize += json.length(); jsonSize += json.length();
return jsonSize; return jsonSize;
@@ -413,7 +436,8 @@ void Attack::sendResults(){
if (i != ssidList.len - 1) json += ","; if (i != ssidList.len - 1) json += ",";
sendToBuffer(json); sendToBuffer(json);
} }
json = "]}"; json = "],";
json += "\"randomMode\":" + (String)randomMode + "}";
sendToBuffer(json); sendToBuffer(json);
sendBuffer(); sendBuffer();

View File

@@ -45,6 +45,7 @@ class Attack
void sendResults(); void sendResults();
size_t getSize(); size_t getSize();
void refreshLed(); void refreshLed();
void changeRandom(int num);
private: private:
void buildDeauth(Mac _ap, Mac _client, uint8_t type, uint8_t reason); void buildDeauth(Mac _ap, Mac _client, uint8_t type, uint8_t reason);
@@ -137,13 +138,18 @@ class Attack
0x82, //1Mbit/s 0x82, //1Mbit/s
0x84, //2Mbit/s 0x84, //2Mbit/s
0x8b, //5.5Mbit/s 0x8b, //5.5Mbit/s
0x96 //11Mbit/s 0x96 //11Mbit/s
}; };
int macListChangeCounter = 0; int macListChangeCounter = 0;
int attackTimeoutCounter[attacksNum]; int attackTimeoutCounter[attacksNum];
int channels[macListLen]; int channels[macListLen];
bool buildInLedStatus = false; bool buildInLedStatus = false;
bool randomMode = false;
int randomInterval = 5;
int randomCounter = 0;
long randomTime = 0;
}; };
#endif #endif

View File

@@ -32,11 +32,11 @@ void SSIDList::add(String name) {
} }
} }
void SSIDList::addClone(String name) { void SSIDList::addClone(String name, int num) {
int _restSSIDLen = SSIDLength - name.length(); int _restSSIDLen = SSIDLength - name.length();
String _apName; String _apName;
for (int c = 0; c < SSIDListLength; c++) { for (int c = 0; c < SSIDListLength && c < num; c++) {
_apName = name; _apName = name;
if (c < _restSSIDLen) for (int d = 0; d < _restSSIDLen - c; d++) _apName += " "; //e.g. "SAMPLEAP " if (c < _restSSIDLen) for (int d = 0; d < _restSSIDLen - c; d++) _apName += " "; //e.g. "SAMPLEAP "

View File

@@ -20,7 +20,7 @@ class SSIDList
void load(); void load();
void clear(); void clear();
void add(String name); void add(String name);
void addClone(String name); void addClone(String name, int num);
void edit(int num, String name); void edit(int num, String name);
String get(int num); String get(int num);
void remove(int num); void remove(int num);

File diff suppressed because one or more lines are too long

View File

@@ -294,13 +294,15 @@ void startAttack() {
} }
void addSSID() { void addSSID() {
ssidList.add(server.arg("name")); if(server.hasArg("ssid") && server.hasArg("num")){
server.send( 200, "text/json", "true"); int num = server.arg("num").toInt();
} if(num > 0){
ssidList.addClone(server.arg("ssid"),num);
void cloneSSID() { }else{
ssidList.addClone(server.arg("name")); ssidList.add(server.arg("ssid"));
server.send( 200, "text/json", "true"); }
server.send( 200, "text/json", "true");
}else server.send( 200, "text/json", "false");
} }
void deleteSSID() { void deleteSSID() {
@@ -333,6 +335,11 @@ void restartESP() {
ESP.reset(); ESP.reset();
} }
void enableRandom(){
attack.changeRandom(server.arg("interval").toInt());
server.send( 200, "text/json", "true");
}
//==========Settings========== //==========Settings==========
void getSettings() { void getSettings() {
settings.send(); settings.send();
@@ -501,7 +508,6 @@ void setup() {
server.on("/clearNameList.json", clearNameList); server.on("/clearNameList.json", clearNameList);
server.on("/editNameList.json", editClientName); server.on("/editNameList.json", editClientName);
server.on("/addSSID.json", addSSID); server.on("/addSSID.json", addSSID);
server.on("/cloneSSID.json", cloneSSID);
server.on("/deleteSSID.json", deleteSSID); server.on("/deleteSSID.json", deleteSSID);
server.on("/randomSSID.json", randomSSID); server.on("/randomSSID.json", randomSSID);
server.on("/clearSSID.json", clearSSID); server.on("/clearSSID.json", clearSSID);
@@ -509,6 +515,7 @@ void setup() {
server.on("/saveSSID.json", saveSSID); server.on("/saveSSID.json", saveSSID);
server.on("/restartESP.json", restartESP); server.on("/restartESP.json", restartESP);
server.on("/addClient.json",addClient); server.on("/addClient.json",addClient);
server.on("/enableRandom.json",enableRandom);
server.begin(); server.begin();
} }

View File

@@ -42,6 +42,9 @@
<table></table> <table></table>
<p class="small"> <p class="small">
<span class="warn">INFO: </span><span class="bold">You may have to reload the site to see the results.</span>
<br />
<br />
WPA* = WPA/WPA2 auto mode WPA* = WPA/WPA2 auto mode
</p> </p>

View File

@@ -38,10 +38,61 @@
<table> <table>
</table> </table>
<p> <br />
<label class="left"><input type="number" id="randomIntrvl" value="5" min="1" max="65000"/>s</label>
<button class="right" id="randomBtn" onclick="random()">Enable Random</button>
<p class="clear">
<br />
<span class="warn">INFO: </span><span class="bold">You may loose connection when starting the attack.</span><br /> <span class="warn">INFO: </span><span class="bold">You may loose connection when starting the attack.</span><br />
Change the channel in the settings to the same of the selected AP to prevent this. Change the channel in the settings to the same of the selected AP to prevent this.
<br /> </p>
<hr />
</div>
</div>
<div class="row">
<div class="col-6">
<label for="ssid">SSID</label>
</div>
<div class="col-6">
<input type="text" id="ssid" minlength="1" maxlength="32" placeholder="SSID">
</div>
</div>
<div class="row">
<div class="col-6">
<label for="num">Number of Clones</label>
</div>
<div class="col-6">
<input type="number" id="num" min="0" max="48" value="0">
</div>
</div>
<div class="row">
<div class="col-12">
<button class="button-primary col-4" onclick="addSSID()">add</button>
<br class="clear" />
<hr />
<p class="left">SSIDs: <span id="ssidCounter">0/48</span>
<div class="right">
<button class="button-warn" onclick="clearSSID()">clear</button>
<button onclick="randomSSID()">random</button>
</div>
</p>
<br />
<table></table>
<br />
<button class="marginNull button-warn" onclick="resetSSID()">reset</button>
<button class="marginNull button-primary right" onclick="saveSSID()">save</button>
<p class="small" id="saved">saved</p>
<p>
<br /> <br />
<span class="bold">Deauth [deauthentication attack]:</span><br /> <span class="bold">Deauth [deauthentication attack]:</span><br />
Sends deauthentication and dissociation frames to the selected station(s) and access point(s).<br /> Sends deauthentication and dissociation frames to the selected station(s) and access point(s).<br />
@@ -52,21 +103,6 @@
<span class="bold">Probe-Request [probe request flood]:</span><br /> <span class="bold">Probe-Request [probe request flood]:</span><br />
Sends probe request frames with the SSIDs in the list below. Sends probe request frames with the SSIDs in the list below.
</p> </p>
<br />
<p class="left">SSIDs: <span id="ssidCounter">0/48</span>
<div class="right">
<button class="button-warn" onclick="clearSSID()">clear</button>
<button onclick="randomSSID()">random</button>
<button onclick="cloneSSID(prompt('new SSID:'))">clone</button>
<button class="button-primary" onclick="addSSID()">add</button></p>
</div>
<br />
<table></table>
<br />
<button class="marginNull button-warn" onclick="resetSSID()">reset</button>
<button class="marginNull button-primary right" onclick="saveSSID()">save</button>
<p class="small" id="saved">saved</p>
<div id="copyright"> <div id="copyright">
version 1.4<br /> version 1.4<br />
Copyright (c) 2017 Stefan Kremser<br /> Copyright (c) 2017 Stefan Kremser<br />

View File

@@ -4,9 +4,12 @@ var table = document.getElementsByTagName("table")[0];
var ssidList = document.getElementsByTagName("table")[1]; var ssidList = document.getElementsByTagName("table")[1];
var saved = getE("saved"); var saved = getE("saved");
var ssidCounter = getE("ssidCounter"); var ssidCounter = getE("ssidCounter");
var ssid = getE("ssid");
var num = getE("num");
var randomIntrvl = getE("randomIntrvl");
var randomBtn = getE("randomBtn");
var resultInterval; var resultInterval;
var res; var res;
function getResults() { function getResults() {
getResponse("attackInfo.json", function(responseText) { getResponse("attackInfo.json", function(responseText) {
res = JSON.parse(responseText); res = JSON.parse(responseText);
@@ -19,13 +22,16 @@ function getResults() {
selectedAPs.innerHTML = aps; selectedAPs.innerHTML = aps;
selectedClients.innerHTML = clients; selectedClients.innerHTML = clients;
if(res.randomMode == 1) randomBtn.innerHTML = "Disable Random";
else randomBtn.innerHTML = "Enable Random";
for (var i = 0; i < res.attacks.length; i++) { for (var i = 0; i < res.attacks.length; i++) {
if (res.attacks[i].running) tr += "<tr class='selected'>"; if (res.attacks[i].running) tr += "<tr class='selected'>";
else tr += "<tr>"; else tr += "<tr>";
tr += "<td>" + res.attacks[i].name + "</td>"; tr += "<td>" + res.attacks[i].name + "</td>";
if (res.attacks[i].status == "ready") tr += "<td class='green'>" + res.attacks[i].status + "</td>"; if (res.attacks[i].status == "ready") tr += "<td class='green' id='status"+i+"'>" + res.attacks[i].status + "</td>";
else tr += "<td class='red'>" + res.attacks[i].status + "</td>"; else tr += "<td class='red' id='status"+i+"'>" + res.attacks[i].status + "</td>";
if (res.attacks[i].running) tr += "<td><button class='marginNull selectedBtn' onclick='startStop(" + i + ")'>stop</button></td>"; if (res.attacks[i].running) tr += "<td><button class='marginNull selectedBtn' onclick='startStop(" + i + ")'>stop</button></td>";
else tr += "<td><button class='marginNull' onclick='startStop(" + i + ")'>start</button></td>"; else tr += "<td><button class='marginNull' onclick='startStop(" + i + ")'>start</button></td>";
@@ -52,24 +58,27 @@ function getResults() {
function startStop(num) { function startStop(num) {
getResponse("attackStart.json?num=" + num, function(responseText) { getResponse("attackStart.json?num=" + num, function(responseText) {
getE("status"+num).innerHTML = "loading";
if (responseText == "true") getResults(); if (responseText == "true") getResults();
else showMessage("response error attackStart.json"); else showMessage("response error attackStart.json");
}); });
} }
function addSSID() { function addSSID() {
saved.innerHTML = "";
if (res.ssid.length >= 64) showMessage("SSID list full :(", 2500); var _ssidName = ssid.value;
else { if(_ssidName.length > 0){
var _ssidName = prompt("new SSID:"); if(res.ssid.length >= 64) showMessage("SSID list full :(", 2500);
if (_ssidName != null) getResponse("addSSID.json?name=" + _ssidName, getResults); else{
} saved.innerHTML = "";
getResponse("addSSID.json?ssid=" + _ssidName + "&num="+num.value, getResults);
}
}
} }
function cloneSSID(_ssidName) { function cloneSSID(_ssidName) {
saved.innerHTML = ""; ssid.value = _ssidName;
if (res.ssid.length >= 64) showMessage("SSID list full :(", 2500); num.value = 48 - res.ssid.length;
else if(_ssidName != null) getResponse("cloneSSID.json?name=" + _ssidName, getResults);
} }
function deleteSSID(num) { function deleteSSID(num) {
@@ -93,6 +102,9 @@ function resetSSID() {
saved.innerHTML = "saved"; saved.innerHTML = "saved";
getResponse("resetSSID.json", getResults); getResponse("resetSSID.json", getResults);
} }
function random(){
getResponse("enableRandom.json?interval="+randomIntrvl.value, getResults);
}
getResults(); getResults();
resultInterval = setInterval(getResults, 1000); resultInterval = setInterval(getResults, 2000);