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;
}
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){
for(int i=0;i<settings.attackPacketRate;i++){
buildDeauth(from, to, 0xc0, settings.deauthReason );
@@ -240,9 +252,6 @@ void Attack::run() {
macListChangeCounter++;
if(settings.macInterval > 0){
if (macListChangeCounter >= settings.macInterval) generate();
/*ssidList.clear();
ssidList._random();
macListChangeCounter = 0;*/
}
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) {
@@ -281,7 +302,6 @@ void Attack::stop(int num) {
prevTime[num] = millis();
refreshLed();
}
stati[num] = "ready";
}
@@ -309,6 +329,8 @@ void Attack::_log(int num){
}
size_t Attack::getSize(){
if(apScan.selectedSum == 0) stati[0] = "no AP";
size_t jsonSize = 0;
String json = "{\"aps\":[";
@@ -358,7 +380,8 @@ size_t Attack::getSize(){
jsonSize += json.length();
}
json = "]}";
json = "],";
json += "\"randomMode\":" + (String)randomMode + "}";
jsonSize += json.length();
return jsonSize;
@@ -413,7 +436,8 @@ void Attack::sendResults(){
if (i != ssidList.len - 1) json += ",";
sendToBuffer(json);
}
json = "]}";
json = "],";
json += "\"randomMode\":" + (String)randomMode + "}";
sendToBuffer(json);
sendBuffer();

View File

@@ -45,6 +45,7 @@ class Attack
void sendResults();
size_t getSize();
void refreshLed();
void changeRandom(int num);
private:
void buildDeauth(Mac _ap, Mac _client, uint8_t type, uint8_t reason);
@@ -144,6 +145,11 @@ class Attack
int attackTimeoutCounter[attacksNum];
int channels[macListLen];
bool buildInLedStatus = false;
bool randomMode = false;
int randomInterval = 5;
int randomCounter = 0;
long randomTime = 0;
};
#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();
String _apName;
for (int c = 0; c < SSIDListLength; c++) {
for (int c = 0; c < SSIDListLength && c < num; c++) {
_apName = name;
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 clear();
void add(String name);
void addClone(String name);
void addClone(String name, int num);
void edit(int num, String name);
String get(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() {
ssidList.add(server.arg("name"));
server.send( 200, "text/json", "true");
}
void cloneSSID() {
ssidList.addClone(server.arg("name"));
if(server.hasArg("ssid") && server.hasArg("num")){
int num = server.arg("num").toInt();
if(num > 0){
ssidList.addClone(server.arg("ssid"),num);
}else{
ssidList.add(server.arg("ssid"));
}
server.send( 200, "text/json", "true");
}else server.send( 200, "text/json", "false");
}
void deleteSSID() {
@@ -333,6 +335,11 @@ void restartESP() {
ESP.reset();
}
void enableRandom(){
attack.changeRandom(server.arg("interval").toInt());
server.send( 200, "text/json", "true");
}
//==========Settings==========
void getSettings() {
settings.send();
@@ -501,7 +508,6 @@ void setup() {
server.on("/clearNameList.json", clearNameList);
server.on("/editNameList.json", editClientName);
server.on("/addSSID.json", addSSID);
server.on("/cloneSSID.json", cloneSSID);
server.on("/deleteSSID.json", deleteSSID);
server.on("/randomSSID.json", randomSSID);
server.on("/clearSSID.json", clearSSID);
@@ -509,6 +515,7 @@ void setup() {
server.on("/saveSSID.json", saveSSID);
server.on("/restartESP.json", restartESP);
server.on("/addClient.json",addClient);
server.on("/enableRandom.json",enableRandom);
server.begin();
}

View File

@@ -42,6 +42,9 @@
<table></table>
<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
</p>

View File

@@ -38,10 +38,61 @@
<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 />
Change the channel in the settings to the same of the selected AP to prevent this.
</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 />
<span class="bold">Deauth [deauthentication attack]:</span><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 />
Sends probe request frames with the SSIDs in the list below.
</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">
version 1.4<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 saved = getE("saved");
var ssidCounter = getE("ssidCounter");
var ssid = getE("ssid");
var num = getE("num");
var randomIntrvl = getE("randomIntrvl");
var randomBtn = getE("randomBtn");
var resultInterval;
var res;
function getResults() {
getResponse("attackInfo.json", function(responseText) {
res = JSON.parse(responseText);
@@ -19,13 +22,16 @@ function getResults() {
selectedAPs.innerHTML = aps;
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++) {
if (res.attacks[i].running) tr += "<tr class='selected'>";
else tr += "<tr>";
tr += "<td>" + res.attacks[i].name + "</td>";
if (res.attacks[i].status == "ready") tr += "<td class='green'>" + res.attacks[i].status + "</td>";
else tr += "<td class='red'>" + 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' 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>";
else tr += "<td><button class='marginNull' onclick='startStop(" + i + ")'>start</button></td>";
@@ -52,24 +58,27 @@ function getResults() {
function startStop(num) {
getResponse("attackStart.json?num=" + num, function(responseText) {
getE("status"+num).innerHTML = "loading";
if (responseText == "true") getResults();
else showMessage("response error attackStart.json");
});
}
function addSSID() {
var _ssidName = ssid.value;
if(_ssidName.length > 0){
if(res.ssid.length >= 64) showMessage("SSID list full :(", 2500);
else{
saved.innerHTML = "";
if (res.ssid.length >= 64) showMessage("SSID list full :(", 2500);
else {
var _ssidName = prompt("new SSID:");
if (_ssidName != null) getResponse("addSSID.json?name=" + _ssidName, getResults);
getResponse("addSSID.json?ssid=" + _ssidName + "&num="+num.value, getResults);
}
}
}
function cloneSSID(_ssidName) {
saved.innerHTML = "";
if (res.ssid.length >= 64) showMessage("SSID list full :(", 2500);
else if(_ssidName != null) getResponse("cloneSSID.json?name=" + _ssidName, getResults);
ssid.value = _ssidName;
num.value = 48 - res.ssid.length;
}
function deleteSSID(num) {
@@ -93,6 +102,9 @@ function resetSSID() {
saved.innerHTML = "saved";
getResponse("resetSSID.json", getResults);
}
function random(){
getResponse("enableRandom.json?interval="+randomIntrvl.value, getResults);
}
getResults();
resultInterval = setInterval(getResults, 1000);
resultInterval = setInterval(getResults, 2000);