فهرست منبع

Added support for sniff pmkid stage in automation script

tcpassos 2 سال پیش
والد
کامیت
5c7b3ca9e9

+ 32 - 0
applications/external/wifi_marauder_companion/script/wifi_marauder_script.c

@@ -3,6 +3,7 @@
 
 
 #define WIFI_MARAUDER_DEFAULT_TIMEOUT_SCAN 15
 #define WIFI_MARAUDER_DEFAULT_TIMEOUT_SCAN 15
 #define WIFI_MARAUDER_DEFAULT_TIMEOUT_DEAUTH 30
 #define WIFI_MARAUDER_DEFAULT_TIMEOUT_DEAUTH 30
+#define WIFI_MARAUDER_DEFAULT_TIMEOUT_SNIFF_PMKID 60
 #define WIFI_MARAUDER_DEFAULT_TIMEOUT_BEACON 60
 #define WIFI_MARAUDER_DEFAULT_TIMEOUT_BEACON 60
 
 
 WifiMarauderScript *wifi_marauder_script_alloc() {
 WifiMarauderScript *wifi_marauder_script_alloc() {
@@ -114,6 +115,27 @@ WifiMarauderScriptStageDeauth* _wifi_marauder_script_get_stage_deauth(cJSON *sta
     return deauth_stage;
     return deauth_stage;
 }
 }
 
 
+WifiMarauderScriptStageSniffPmkid* _wifi_marauder_script_get_stage_sniff_pmkid(cJSON *stages) {
+    cJSON* sniffpmkid_stage_json = cJSON_GetObjectItem(stages, "sniffpmkid");
+    if (sniffpmkid_stage_json == NULL) {
+        return NULL;
+    }
+
+    cJSON* channel_json = cJSON_GetObjectItem(sniffpmkid_stage_json, "channel");
+    int channel = channel_json != NULL ? (int)cJSON_GetNumberValue(channel_json) : 0;
+    cJSON* timeout_json = cJSON_GetObjectItem(sniffpmkid_stage_json, "timeout");
+    int timeout = timeout_json != NULL ? (int)cJSON_GetNumberValue(timeout_json) : WIFI_MARAUDER_DEFAULT_TIMEOUT_SNIFF_PMKID;
+    cJSON* force_deauth_json = cJSON_GetObjectItemCaseSensitive(sniffpmkid_stage_json, "forceDeauth");
+    bool force_deauth = cJSON_IsBool(force_deauth_json) ? force_deauth_json->valueint : true;
+
+    WifiMarauderScriptStageSniffPmkid *sniff_pmkid_stage = (WifiMarauderScriptStageSniffPmkid*) malloc(sizeof(WifiMarauderScriptStageSniffPmkid));
+    sniff_pmkid_stage->channel = channel;
+    sniff_pmkid_stage->timeout = timeout;
+    sniff_pmkid_stage->force_deauth = force_deauth;
+
+    return sniff_pmkid_stage;
+}
+
 WifiMarauderScriptStageBeaconList* _wifi_marauder_script_get_stage_beacon_list(cJSON *stages) {
 WifiMarauderScriptStageBeaconList* _wifi_marauder_script_get_stage_beacon_list(cJSON *stages) {
     cJSON* stage_beaconlist = cJSON_GetObjectItem(stages, "beaconlist");
     cJSON* stage_beaconlist = cJSON_GetObjectItem(stages, "beaconlist");
     if (stage_beaconlist == NULL) {
     if (stage_beaconlist == NULL) {
@@ -207,6 +229,16 @@ void _wifi_marauder_script_load_stages(WifiMarauderScript *script, cJSON *stages
         );
         );
     }
     }
 
 
+    // Sniff PMKID stage
+    WifiMarauderScriptStageSniffPmkid *sniff_pmkid = _wifi_marauder_script_get_stage_sniff_pmkid(stages);
+    if (sniff_pmkid != NULL) {
+        _wifi_marauder_script_add_stage(
+            script,
+            _wifi_marauder_script_create_stage(WifiMarauderScriptStageTypeSniffPmkid, sniff_pmkid),
+            &prev_stage
+        );
+    }
+
     // Beacon List stage
     // Beacon List stage
     WifiMarauderScriptStageBeaconList *stage_beacon_list = _wifi_marauder_script_get_stage_beacon_list(stages);
     WifiMarauderScriptStageBeaconList *stage_beacon_list = _wifi_marauder_script_get_stage_beacon_list(stages);
     if (stage_beacon_list != NULL) {
     if (stage_beacon_list != NULL) {

+ 7 - 1
applications/external/wifi_marauder_companion/script/wifi_marauder_script.h

@@ -20,6 +20,7 @@
  * - Scan
  * - Scan
  * - Select
  * - Select
  * - Deauth
  * - Deauth
+ * - Sniff PMKID
  * - Beacon List
  * - Beacon List
  * ----------------------------------------------------------------------------------------------------
  * ----------------------------------------------------------------------------------------------------
  * SCRIPT SYNTAX:
  * SCRIPT SYNTAX:
@@ -41,6 +42,11 @@
  *         "deauth": {
  *         "deauth": {
  *             "timeout": seconds
  *             "timeout": seconds
  *         },
  *         },
+ *         "sniffPmkid": {
+ *             "forceDeauth": true | false,
+ *             "channel": 1-11,
+ *             "timeout": seconds
+ *         },
  *         "beaconlist": {
  *         "beaconlist": {
  *             "ssids": [
  *             "ssids": [
  *                 "SSID 1",
  *                 "SSID 1",
@@ -104,6 +110,7 @@ typedef struct WifiMarauderScriptStageDeauth {
 
 
 typedef struct WifiMarauderScriptStageSniffPmkid {
 typedef struct WifiMarauderScriptStageSniffPmkid {
     bool force_deauth;
     bool force_deauth;
+    int channel;
     int timeout;
     int timeout;
 } WifiMarauderScriptStageSniffPmkid;
 } WifiMarauderScriptStageSniffPmkid;
 
 
@@ -123,5 +130,4 @@ typedef struct WifiMarauderScript {
 WifiMarauderScript *wifi_marauder_script_alloc();
 WifiMarauderScript *wifi_marauder_script_alloc();
 WifiMarauderScript *wifi_marauder_script_parse_raw(const char* script_raw);
 WifiMarauderScript *wifi_marauder_script_parse_raw(const char* script_raw);
 WifiMarauderScript *wifi_marauder_script_parse_file(const char* file_path, Storage* storage);
 WifiMarauderScript *wifi_marauder_script_parse_file(const char* file_path, Storage* storage);
-//void* wifi_marauder_script_get_stage(WifiMarauderScript *script, WifiMarauderScriptStageType stage);
 void wifi_marauder_script_free(WifiMarauderScript *script);
 void wifi_marauder_script_free(WifiMarauderScript *script);

+ 26 - 0
applications/external/wifi_marauder_companion/script/wifi_marauder_script_executor.c

@@ -73,9 +73,32 @@ void _wifi_marauder_script_execute_deauth(WifiMarauderScriptStageDeauth* stage,
     _send_stop();
     _send_stop();
 }
 }
 
 
+void _wifi_marauder_script_execute_sniff_pmkid(WifiMarauderScriptStageSniffPmkid* stage, WifiMarauderScriptWorker* worker) {
+    char attack_command[50] = "sniffpmkid";
+    int len = strlen(attack_command);
+    
+    if (stage->channel > 0) {
+        len += snprintf(attack_command + len, sizeof(attack_command) - len, " -c %d", stage->channel);
+    }
+
+    if (stage->force_deauth) {
+        len += snprintf(attack_command + len, sizeof(attack_command) - len, " -d");
+    }
+
+    len += snprintf(attack_command + len, sizeof(attack_command) - len, "\n");
+
+    wifi_marauder_uart_tx((uint8_t*)attack_command, len);
+    _wifi_marauder_script_delay(worker, stage->timeout);
+    _send_stop();
+}
+
 void _wifi_marauder_script_execute_beacon_list(WifiMarauderScriptStageBeaconList* stage, WifiMarauderScriptWorker* worker) {
 void _wifi_marauder_script_execute_beacon_list(WifiMarauderScriptStageBeaconList* stage, WifiMarauderScriptWorker* worker) {
+    const char clearlist_command[] = "clearlist -s\n";
+    wifi_marauder_uart_tx((uint8_t*)(clearlist_command), strlen(clearlist_command));
+
     char command[100];
     char command[100];
     char *ssid;
     char *ssid;
+
     for (int i = 0; i < stage->ssid_count; i++) {
     for (int i = 0; i < stage->ssid_count; i++) {
         ssid = stage->ssids[i];
         ssid = stage->ssids[i];
         snprintf(command, sizeof(command), "ssid -a -n \"%s\"", ssid);
         snprintf(command, sizeof(command), "ssid -a -n \"%s\"", ssid);
@@ -103,6 +126,9 @@ void wifi_marauder_script_execute_stage(WifiMarauderScriptStage* stage, void *co
         case WifiMarauderScriptStageTypeDeauth:
         case WifiMarauderScriptStageTypeDeauth:
             _wifi_marauder_script_execute_deauth((WifiMarauderScriptStageDeauth*)stage_data, worker);
             _wifi_marauder_script_execute_deauth((WifiMarauderScriptStageDeauth*)stage_data, worker);
             break;
             break;
+        case WifiMarauderScriptStageTypeSniffPmkid:
+            _wifi_marauder_script_execute_sniff_pmkid((WifiMarauderScriptStageSniffPmkid*)stage_data, worker);
+            break;
         case WifiMarauderScriptStageTypeBeaconList:
         case WifiMarauderScriptStageTypeBeaconList:
             _wifi_marauder_script_execute_beacon_list((WifiMarauderScriptStageBeaconList*)stage_data, worker);
             _wifi_marauder_script_execute_beacon_list((WifiMarauderScriptStageBeaconList*)stage_data, worker);
             break;
             break;