Enabled Multiple attacks + Improved Probe Request

This commit is contained in:
Stefan Kremser
2017-05-16 17:06:14 +02:00
parent 3128dbe83f
commit ff745f6870
8 changed files with 52 additions and 11 deletions

View File

@@ -96,6 +96,8 @@ void Attack::buildProbe(String _ssid, Mac _mac) {
for (int i = 0; i < len; i++) packet[packetSize + i] = _ssid[i]; for (int i = 0; i < len; i++) packet[packetSize + i] = _ssid[i];
packetSize += len; packetSize += len;
for (int i = 0; i < sizeof(probePacket_RateTag); i++) packet[packetSize + i] = probePacket_RateTag[i];
packetSize += sizeof(probePacket_RateTag);
} }
bool Attack::send() { bool Attack::send() {
@@ -219,14 +221,17 @@ void Attack::run() {
for (int a = 0; a < ssidList.len; a++) { for (int a = 0; a < ssidList.len; a++) {
buildProbe(ssidList.get(a), beaconAdrs._get(a)); buildProbe(ssidList.get(a), beaconAdrs._get(a));
if(send()) packetsCounter[2]++; if(send()) packetsCounter[2]++;
if(send()) packetsCounter[2]++;
} }
stati[2] = (String)(packetsCounter[2] * 10) + "pkts/s"; stati[2] = (String)(packetsCounter[2]) + "pkts/s";
packetsCounter[2] = 0; packetsCounter[2] = 0;
macListChangeCounter++; macListChangeCounter++;
if (macListChangeCounter >= macChangeInterval && macChangeInterval > 0) { if (macListChangeCounter >= macChangeInterval && macChangeInterval > 0) {
generate(); generate();
macListChangeCounter = 0; /*ssidList.clear();
ssidList._random();
macListChangeCounter = 0;*/
} }
if (debug) Serial.println("done"); if (debug) Serial.println("done");
if (settings.attackTimeout > 0) { if (settings.attackTimeout > 0) {
@@ -248,9 +253,11 @@ void Attack::start(int num) {
refreshLed(); refreshLed();
if (debug) Serial.println("starting " + (String)attackNames[num] + " attack..."); if (debug) Serial.println("starting " + (String)attackNames[num] + " attack...");
if (num == 0) attackMode = "STOP"; if (num == 0) attackMode = "STOP";
if(!settings.multiAttacks){
for (int i = 0; i < attacksNum; i++){ for (int i = 0; i < attacksNum; i++){
if(i != num) stop(i); if(i != num) stop(i);
} }
}
}else stop(num); }else stop(num);
} }

View File

@@ -18,7 +18,7 @@ extern "C" {
#define attacksNum 3 #define attacksNum 3
#define macListLen 64 #define macListLen 64
#define macChangeInterval 4 #define macChangeInterval 6
extern void PrintHex8(uint8_t *data, uint8_t length); extern void PrintHex8(uint8_t *data, uint8_t length);
extern void getRandomVendorMac(uint8_t *buf); extern void getRandomVendorMac(uint8_t *buf);
@@ -131,6 +131,16 @@ class Attack
*/ */
}; };
uint8_t probePacket_RateTag[6] = {
0x01, //Tag Number: Supported Rates (1)
0x04, //Tag length: 4
//Supported Rates:
0x82, //1Mbit/s
0x84, //2Mbit/s
0x8b, //5.5Mbit/s
0x96 //11Mbit/s
};
int macListChangeCounter = 0; int macListChangeCounter = 0;
int attackTimeoutCounter[attacksNum]; int attackTimeoutCounter[attacksNum];
int channels[macListLen]; int channels[macListLen];

View File

@@ -42,6 +42,7 @@ void Settings::load() {
useLed = (bool)EEPROM.read(useLedAdr); useLed = (bool)EEPROM.read(useLedAdr);
channelHop = (bool)EEPROM.read(channelHopAdr); channelHop = (bool)EEPROM.read(channelHopAdr);
multiAPs = (bool)EEPROM.read(multiAPsAdr); multiAPs = (bool)EEPROM.read(multiAPsAdr);
multiAttacks = (bool)EEPROM.read(multiAttacksAdr);
} }
void Settings::reset() { void Settings::reset() {
@@ -65,6 +66,7 @@ void Settings::reset() {
useLed = true; useLed = true;
channelHop = false; channelHop = false;
multiAPs = false; multiAPs = false;
multiAttacks = false;
if (debug) Serial.println("done"); if (debug) Serial.println("done");
@@ -95,6 +97,7 @@ void Settings::save() {
EEPROM.write(useLedAdr, useLed); EEPROM.write(useLedAdr, useLed);
EEPROM.write(channelHopAdr, channelHop); EEPROM.write(channelHopAdr, channelHop);
EEPROM.write(multiAPsAdr, multiAPs); EEPROM.write(multiAPsAdr, multiAPs);
EEPROM.write(multiAttacksAdr, multiAttacks);
EEPROM.write(checkNumAdr, checkNum); EEPROM.write(checkNumAdr, checkNum);
EEPROM.commit(); EEPROM.commit();
@@ -121,6 +124,7 @@ void Settings::info() {
Serial.println("use built-in LED: " + (String)useLed); Serial.println("use built-in LED: " + (String)useLed);
Serial.println("channel hopping: " + (String)channelHop); Serial.println("channel hopping: " + (String)channelHop);
Serial.println("multiple APs: " + (String)multiAPs); Serial.println("multiple APs: " + (String)multiAPs);
Serial.println("multiple Attacks: " + (String)multiAttacks);
} }
size_t Settings::getSize(){ size_t Settings::getSize(){
@@ -139,7 +143,8 @@ size_t Settings::getSize(){
json += "\"attackEncrypted\":" + (String)attackEncrypted + ","; json += "\"attackEncrypted\":" + (String)attackEncrypted + ",";
json += "\"useLed\":" + (String)useLed + ","; json += "\"useLed\":" + (String)useLed + ",";
json += "\"channelHop\":" + (String)channelHop + ","; json += "\"channelHop\":" + (String)channelHop + ",";
json += "\"multiAPs\":" + (String)multiAPs + "}"; json += "\"multiAPs\":" + (String)multiAPs + ",";
json += "\"multiAttacks\":" + (String)multiAttacks + "}";
jsonSize += json.length(); jsonSize += json.length();
return jsonSize; return jsonSize;
@@ -162,7 +167,8 @@ void Settings::send() {
json += "\"attackEncrypted\":" + (String)attackEncrypted + ","; json += "\"attackEncrypted\":" + (String)attackEncrypted + ",";
json += "\"useLed\":" + (String)useLed + ","; json += "\"useLed\":" + (String)useLed + ",";
json += "\"channelHop\":" + (String)channelHop + ","; json += "\"channelHop\":" + (String)channelHop + ",";
json += "\"multiAPs\":" + (String)multiAPs + "}"; json += "\"multiAPs\":" + (String)multiAPs + ",";
json += "\"multiAttacks\":" + (String)multiAttacks + "}";
sendToBuffer(json); sendToBuffer(json);
sendBuffer(); sendBuffer();

View File

@@ -33,6 +33,7 @@ extern NameList nameList;
#define useLedAdr 1099 #define useLedAdr 1099
#define channelHopAdr 1100 #define channelHopAdr 1100
#define multiAPsAdr 1101 #define multiAPsAdr 1101
#define multiAttacksAdr 1102
#define checkNumAdr 1102 #define checkNumAdr 1102
#define checkNum 14 #define checkNum 14
@@ -62,6 +63,7 @@ class Settings
bool useLed; bool useLed;
bool channelHop; bool channelHop;
bool multiAPs; bool multiAPs;
bool multiAttacks;
private: private:
size_t getSize(); size_t getSize();

File diff suppressed because one or more lines are too long

View File

@@ -375,6 +375,10 @@ void saveSettings() {
if (server.arg("multiAPs") == "false") settings.multiAPs = false; if (server.arg("multiAPs") == "false") settings.multiAPs = false;
else settings.multiAPs = true; else settings.multiAPs = true;
} }
if (server.hasArg("multiAttacks")) {
if (server.arg("multiAttacks") == "false") settings.multiAttacks = false;
else settings.multiAttacks = true;
}
settings.save(); settings.save();
server.send( 200, "text/json", "true" ); server.send( 200, "text/json", "true" );

View File

@@ -13,6 +13,7 @@ var ssidEnc = getE('ssidEnc');
var useLed = getE('useLed'); var useLed = getE('useLed');
/*var channelHop = getE('channelHop');*/ /*var channelHop = getE('channelHop');*/
var multiAPs = getE('multiAPs'); var multiAPs = getE('multiAPs');
var multiAttacks = getE('multiAttacks');
var cMac = getE('cMac'); var cMac = getE('cMac');
var cName = getE('cName'); var cName = getE('cName');
var res; var res;
@@ -38,6 +39,7 @@ function getData() {
useLed.checked = res.useLed; useLed.checked = res.useLed;
/*channelHop.checked = res.channelHop;*/ /*channelHop.checked = res.channelHop;*/
multiAPs.checked = res.multiAPs; multiAPs.checked = res.multiAPs;
multiAttacks.checked = res.multiAttacks;
}); });
} }
@@ -57,6 +59,7 @@ function saveSettings() {
url += "&useLed=" + useLed.checked; url += "&useLed=" + useLed.checked;
/*url += "&channelHop=" + channelHop.checked;*/ /*url += "&channelHop=" + channelHop.checked;*/
url += "&multiAPs="+multiAPs.checked; url += "&multiAPs="+multiAPs.checked;
url += "&multiAttacks="+multiAttacks.checked;
getResponse(url, function(responseText) { getResponse(url, function(responseText) {
if (responseText == "true") { if (responseText == "true") {

View File

@@ -143,6 +143,15 @@
<input type="number" id="packetRate" min="1" max="50"> pkts/s <input type="number" id="packetRate" min="1" max="50"> pkts/s
</div> </div>
</div> </div>
<div class="row">
<div class="col-6">
<label for="multiAttacks">Multiple Attacks</label>
</div>
<div class="col-6">
<input type="checkbox" name="multiAttacks" id="multiAttacks" value="false">
</div>
</div>
<!-- <!--
<div class="row"> <div class="row">
<div class="col-6"> <div class="col-6">