Explorar o código

Added support for sniff (raw|deauth|esp|pwn) stages in automation script

tcpassos %!s(int64=2) %!d(string=hai) anos
pai
achega
09f97d63e1

+ 7 - 2
applications/external/wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c

@@ -14,9 +14,14 @@ bool _wifi_marauder_is_save_pcaps_enabled(WifiMarauderApp* app) {
     }
     // If it is a script that contains a sniff function
     if (app->script != NULL) {
-        WifiMarauderScriptStage* sniff_pmkid_stage = wifi_marauder_script_get_stage(app->script, WifiMarauderScriptStageTypeSniffPmkid);
+        WifiMarauderScriptStage* sniff_raw_stage = wifi_marauder_script_get_stage(app->script, WifiMarauderScriptStageTypeSniffRaw);
         WifiMarauderScriptStage* sniff_beacon_stage = wifi_marauder_script_get_stage(app->script, WifiMarauderScriptStageTypeSniffBeacon);
-        if (sniff_pmkid_stage != NULL || sniff_beacon_stage != NULL) {
+        WifiMarauderScriptStage* sniff_deauth_stage = wifi_marauder_script_get_stage(app->script, WifiMarauderScriptStageTypeSniffDeauth);
+        WifiMarauderScriptStage* sniff_esp_stage = wifi_marauder_script_get_stage(app->script, WifiMarauderScriptStageTypeSniffEsp);
+        WifiMarauderScriptStage* sniff_pmkid_stage = wifi_marauder_script_get_stage(app->script, WifiMarauderScriptStageTypeSniffPmkid);
+        WifiMarauderScriptStage* sniff_pwn_stage = wifi_marauder_script_get_stage(app->script, WifiMarauderScriptStageTypeSniffPwn);
+        if (sniff_raw_stage != NULL || sniff_beacon_stage != NULL || sniff_deauth_stage != NULL ||
+            sniff_esp_stage != NULL || sniff_pmkid_stage != NULL || sniff_pwn_stage != NULL) {
             return true;
         }
     }

+ 116 - 5
applications/external/wifi_marauder_companion/script/wifi_marauder_script.c

@@ -4,8 +4,7 @@
 #define WIFI_MARAUDER_DEFAULT_TIMEOUT_SCAN 15
 #define WIFI_MARAUDER_DEFAULT_TIMEOUT_DEAUTH 30
 #define WIFI_MARAUDER_DEFAULT_TIMEOUT_PROBE 60
-#define WIFI_MARAUDER_DEFAULT_TIMEOUT_SNIFF_PMKID 60
-#define WIFI_MARAUDER_DEFAULT_TIMEOUT_SNIFF_BEACON 60
+#define WIFI_MARAUDER_DEFAULT_TIMEOUT_SNIFF 60
 #define WIFI_MARAUDER_DEFAULT_TIMEOUT_BEACON 60
 #define WIFI_MARAUDER_DEFAULT_ENABLE_LED true
 #define WIFI_MARAUDER_DEFAULT_SAVE_PCAP true
@@ -147,6 +146,21 @@ WifiMarauderScriptStageProbe* _wifi_marauder_script_get_stage_probe(cJSON *stage
     return probe_stage;
 }
 
+WifiMarauderScriptStageSniffRaw* _wifi_marauder_script_get_stage_sniff_raw(cJSON *stages) {
+    cJSON* sniffraw_stage_json = cJSON_GetObjectItem(stages, "sniffraw");
+    if (sniffraw_stage_json == NULL) {
+        return NULL;
+    }
+
+    cJSON* timeout_json = cJSON_GetObjectItem(sniffraw_stage_json, "timeout");
+    int timeout = timeout_json != NULL ? (int)cJSON_GetNumberValue(timeout_json) : WIFI_MARAUDER_DEFAULT_TIMEOUT_SNIFF;
+
+    WifiMarauderScriptStageSniffRaw *sniff_raw_stage = (WifiMarauderScriptStageSniffRaw*) malloc(sizeof(WifiMarauderScriptStageSniffRaw));
+    sniff_raw_stage->timeout = timeout;
+
+    return sniff_raw_stage;
+}
+
 WifiMarauderScriptStageSniffBeacon* _wifi_marauder_script_get_stage_sniff_beacon(cJSON *stages) {
     cJSON* sniffbeacon_stage_json = cJSON_GetObjectItem(stages, "sniffbeacon");
     if (sniffbeacon_stage_json == NULL) {
@@ -154,7 +168,7 @@ WifiMarauderScriptStageSniffBeacon* _wifi_marauder_script_get_stage_sniff_beacon
     }
 
     cJSON* timeout_json = cJSON_GetObjectItem(sniffbeacon_stage_json, "timeout");
-    int timeout = timeout_json != NULL ? (int)cJSON_GetNumberValue(timeout_json) : WIFI_MARAUDER_DEFAULT_TIMEOUT_SNIFF_BEACON;
+    int timeout = timeout_json != NULL ? (int)cJSON_GetNumberValue(timeout_json) : WIFI_MARAUDER_DEFAULT_TIMEOUT_SNIFF;
 
     WifiMarauderScriptStageSniffBeacon *sniff_beacon_stage = (WifiMarauderScriptStageSniffBeacon*) malloc(sizeof(WifiMarauderScriptStageSniffBeacon));
     sniff_beacon_stage->timeout = timeout;
@@ -162,6 +176,36 @@ WifiMarauderScriptStageSniffBeacon* _wifi_marauder_script_get_stage_sniff_beacon
     return sniff_beacon_stage;
 }
 
+WifiMarauderScriptStageSniffDeauth* _wifi_marauder_script_get_stage_sniff_deauth(cJSON *stages) {
+    cJSON* sniffdeauth_stage_json = cJSON_GetObjectItem(stages, "sniffdeauth");
+    if (sniffdeauth_stage_json == NULL) {
+        return NULL;
+    }
+
+    cJSON* timeout_json = cJSON_GetObjectItem(sniffdeauth_stage_json, "timeout");
+    int timeout = timeout_json != NULL ? (int)cJSON_GetNumberValue(timeout_json) : WIFI_MARAUDER_DEFAULT_TIMEOUT_SNIFF;
+
+    WifiMarauderScriptStageSniffDeauth *sniff_deauth_stage = (WifiMarauderScriptStageSniffDeauth*) malloc(sizeof(WifiMarauderScriptStageSniffDeauth));
+    sniff_deauth_stage->timeout = timeout;
+
+    return sniff_deauth_stage;
+}
+
+WifiMarauderScriptStageSniffEsp* _wifi_marauder_script_get_stage_sniff_esp(cJSON *stages) {
+    cJSON* sniffesp_stage_json = cJSON_GetObjectItem(stages, "sniffesp");
+    if (sniffesp_stage_json == NULL) {
+        return NULL;
+    }
+
+    cJSON* timeout_json = cJSON_GetObjectItem(sniffesp_stage_json, "timeout");
+    int timeout = timeout_json != NULL ? (int)cJSON_GetNumberValue(timeout_json) : WIFI_MARAUDER_DEFAULT_TIMEOUT_SNIFF;
+
+    WifiMarauderScriptStageSniffEsp *sniff_esp_stage = (WifiMarauderScriptStageSniffEsp*) malloc(sizeof(WifiMarauderScriptStageSniffEsp));
+    sniff_esp_stage->timeout = timeout;
+
+    return sniff_esp_stage;
+}
+
 WifiMarauderScriptStageSniffPmkid* _wifi_marauder_script_get_stage_sniff_pmkid(cJSON *stages) {
     cJSON* sniffpmkid_stage_json = cJSON_GetObjectItem(stages, "sniffpmkid");
     if (sniffpmkid_stage_json == NULL) {
@@ -171,7 +215,7 @@ WifiMarauderScriptStageSniffPmkid* _wifi_marauder_script_get_stage_sniff_pmkid(c
     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;
+    int timeout = timeout_json != NULL ? (int)cJSON_GetNumberValue(timeout_json) : WIFI_MARAUDER_DEFAULT_TIMEOUT_SNIFF;
     cJSON* force_deauth_json = cJSON_GetObjectItemCaseSensitive(sniffpmkid_stage_json, "forceDeauth");
     bool force_deauth = cJSON_IsBool(force_deauth_json) ? force_deauth_json->valueint : true;
 
@@ -183,6 +227,21 @@ WifiMarauderScriptStageSniffPmkid* _wifi_marauder_script_get_stage_sniff_pmkid(c
     return sniff_pmkid_stage;
 }
 
+WifiMarauderScriptStageSniffPwn* _wifi_marauder_script_get_stage_sniff_pwn(cJSON *stages) {
+    cJSON* sniffpwn_stage_json = cJSON_GetObjectItem(stages, "sniffpwn");
+    if (sniffpwn_stage_json == NULL) {
+        return NULL;
+    }
+
+    cJSON* timeout_json = cJSON_GetObjectItem(sniffpwn_stage_json, "timeout");
+    int timeout = timeout_json != NULL ? (int)cJSON_GetNumberValue(timeout_json) : WIFI_MARAUDER_DEFAULT_TIMEOUT_SNIFF;
+
+    WifiMarauderScriptStageSniffPwn *sniff_pwn_stage = (WifiMarauderScriptStageSniffPwn*) malloc(sizeof(WifiMarauderScriptStageSniffPwn));
+    sniff_pwn_stage->timeout = timeout;
+
+    return sniff_pwn_stage;
+}
+
 WifiMarauderScriptStageBeaconList* _wifi_marauder_script_get_stage_beacon_list(cJSON *stages) {
     cJSON* stage_beaconlist = cJSON_GetObjectItem(stages, "beaconlist");
     if (stage_beaconlist == NULL) {
@@ -286,6 +345,16 @@ void _wifi_marauder_script_load_stages(WifiMarauderScript *script, cJSON *stages
         );
     }
 
+    // Sniff raw stage
+    WifiMarauderScriptStageSniffRaw *sniff_raw = _wifi_marauder_script_get_stage_sniff_raw(stages);
+    if (sniff_raw != NULL) {
+        _wifi_marauder_script_add_stage(
+            script,
+            _wifi_marauder_script_create_stage(WifiMarauderScriptStageTypeSniffRaw, sniff_raw),
+            &prev_stage
+        );
+    }
+
     // Sniff beacon stage
     WifiMarauderScriptStageSniffBeacon *sniff_beacon = _wifi_marauder_script_get_stage_sniff_beacon(stages);
     if (sniff_beacon != NULL) {
@@ -296,6 +365,26 @@ void _wifi_marauder_script_load_stages(WifiMarauderScript *script, cJSON *stages
         );
     }
 
+    // Sniff deauth stage
+    WifiMarauderScriptStageSniffDeauth *sniff_deauth = _wifi_marauder_script_get_stage_sniff_deauth(stages);
+    if (sniff_deauth != NULL) {
+        _wifi_marauder_script_add_stage(
+            script,
+            _wifi_marauder_script_create_stage(WifiMarauderScriptStageTypeSniffDeauth, sniff_deauth),
+            &prev_stage
+        );
+    }
+
+    // Sniff esp stage
+    WifiMarauderScriptStageSniffEsp *sniff_esp = _wifi_marauder_script_get_stage_sniff_esp(stages);
+    if (sniff_esp != NULL) {
+        _wifi_marauder_script_add_stage(
+            script,
+            _wifi_marauder_script_create_stage(WifiMarauderScriptStageTypeSniffEsp, sniff_esp),
+            &prev_stage
+        );
+    }
+
     // Sniff PMKID stage
     WifiMarauderScriptStageSniffPmkid *sniff_pmkid = _wifi_marauder_script_get_stage_sniff_pmkid(stages);
     if (sniff_pmkid != NULL) {
@@ -306,6 +395,16 @@ void _wifi_marauder_script_load_stages(WifiMarauderScript *script, cJSON *stages
         );
     }
 
+    // Sniff pwn stage
+    WifiMarauderScriptStageSniffPwn *sniff_pwn = _wifi_marauder_script_get_stage_sniff_pwn(stages);
+    if (sniff_pwn != NULL) {
+        _wifi_marauder_script_add_stage(
+            script,
+            _wifi_marauder_script_create_stage(WifiMarauderScriptStageTypeSniffPwn, sniff_pwn),
+            &prev_stage
+        );
+    }
+
     // Beacon List stage
     WifiMarauderScriptStageBeaconList *stage_beacon_list = _wifi_marauder_script_get_stage_beacon_list(stages);
     if (stage_beacon_list != NULL) {
@@ -394,12 +493,24 @@ void wifi_marauder_script_free(WifiMarauderScript *script) {
             case WifiMarauderScriptStageTypeProbe:
                 free(current_stage->stage);
                 break;
-            case WifiMarauderScriptStageTypeSniffPmkid:
+            case WifiMarauderScriptStageTypeSniffRaw:
                 free(current_stage->stage);
                 break;
             case WifiMarauderScriptStageTypeSniffBeacon:
                 free(current_stage->stage);
                 break;
+            case WifiMarauderScriptStageTypeSniffDeauth:
+                free(current_stage->stage);
+                break;
+            case WifiMarauderScriptStageTypeSniffEsp:
+                free(current_stage->stage);
+                break;
+            case WifiMarauderScriptStageTypeSniffPmkid:
+                free(current_stage->stage);
+                break;
+            case WifiMarauderScriptStageTypeSniffPwn:
+                free(current_stage->stage);
+                break;
             case WifiMarauderScriptStageTypeBeaconList:
                 for (int i = 0; i < ((WifiMarauderScriptStageBeaconList *) current_stage->stage)->ssid_count; i++) {
                     free(((WifiMarauderScriptStageBeaconList *) current_stage->stage)->ssids[i]);

+ 36 - 0
applications/external/wifi_marauder_companion/script/wifi_marauder_script.h

@@ -21,8 +21,12 @@
  * - Select
  * - Deauth
  * - Probe
+ * - Sniff raw
  * - Sniff beacon
+ * - Sniff deauth
+ * - Sniff Espressif
  * - Sniff PMKID
+ * - Sniff Pwnagotchi
  * - Beacon List
  * ----------------------------------------------------------------------------------------------------
  * SCRIPT SYNTAX:
@@ -49,14 +53,26 @@
  *         "probe": {
  *             "timeout": seconds
  *         },
+ *         "sniffRaw": {
+ *             "timeout": seconds
+ *         },
  *         "sniffBeacon": {
  *             "timeout": seconds
  *         },
+ *         "sniffDeauth": {
+ *             "timeout": seconds
+ *         },
+ *         "sniffEsp": {
+ *             "timeout": seconds
+ *         },
  *         "sniffPmkid": {
  *             "forceDeauth": true (default) | false,
  *             "channel": 1-11,
  *             "timeout": seconds
  *         },
+ *         "sniffPwn": {
+ *             "timeout": seconds
+ *         },
  *         "beaconlist": {
  *             "ssids": [
  *                 "SSID 1",
@@ -80,8 +96,12 @@ typedef enum {
     WifiMarauderScriptStageTypeSelect,
     WifiMarauderScriptStageTypeDeauth,
     WifiMarauderScriptStageTypeProbe,
+    WifiMarauderScriptStageTypeSniffRaw,
     WifiMarauderScriptStageTypeSniffBeacon,
+    WifiMarauderScriptStageTypeSniffDeauth,
+    WifiMarauderScriptStageTypeSniffEsp,
     WifiMarauderScriptStageTypeSniffPmkid,
+    WifiMarauderScriptStageTypeSniffPwn,
     WifiMarauderScriptStageTypeBeaconList,
 } WifiMarauderScriptStageType;
 
@@ -124,16 +144,32 @@ typedef struct WifiMarauderScriptStageProbe {
     int timeout;
 } WifiMarauderScriptStageProbe;
 
+typedef struct WifiMarauderScriptStageSniffRaw {
+    int timeout;
+} WifiMarauderScriptStageSniffRaw;
+
 typedef struct WifiMarauderScriptStageSniffBeacon {
     int timeout;
 } WifiMarauderScriptStageSniffBeacon;
 
+typedef struct WifiMarauderScriptStageSniffDeauth {
+    int timeout;
+} WifiMarauderScriptStageSniffDeauth;
+
+typedef struct WifiMarauderScriptStageSniffEsp {
+    int timeout;
+} WifiMarauderScriptStageSniffEsp;
+
 typedef struct WifiMarauderScriptStageSniffPmkid {
     bool force_deauth;
     int channel;
     int timeout;
 } WifiMarauderScriptStageSniffPmkid;
 
+typedef struct WifiMarauderScriptStageSniffPwn {
+    int timeout;
+} WifiMarauderScriptStageSniffPwn;
+
 typedef struct WifiMarauderScriptStageBeaconList {
     char **ssids;
     int ssid_count;

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

@@ -80,6 +80,13 @@ void _wifi_marauder_script_execute_probe(WifiMarauderScriptStageProbe* stage, Wi
     _send_stop();
 }
 
+void _wifi_marauder_script_execute_sniff_raw(WifiMarauderScriptStageSniffRaw* stage, WifiMarauderScriptWorker* worker) {
+    const char sniff_command[] = "sniffraw\n";
+    wifi_marauder_uart_tx((uint8_t*)sniff_command, strlen(sniff_command));
+    _wifi_marauder_script_delay(worker, stage->timeout);
+    _send_stop();
+}
+
 void _wifi_marauder_script_execute_sniff_beacon(WifiMarauderScriptStageSniffBeacon* stage, WifiMarauderScriptWorker* worker) {
     const char sniff_command[] = "sniffbeacon\n";
     wifi_marauder_uart_tx((uint8_t*)sniff_command, strlen(sniff_command));
@@ -87,6 +94,20 @@ void _wifi_marauder_script_execute_sniff_beacon(WifiMarauderScriptStageSniffBeac
     _send_stop();
 }
 
+void _wifi_marauder_script_execute_sniff_deauth(WifiMarauderScriptStageSniffDeauth* stage, WifiMarauderScriptWorker* worker) {
+    const char sniff_command[] = "sniffdeauth\n";
+    wifi_marauder_uart_tx((uint8_t*)sniff_command, strlen(sniff_command));
+    _wifi_marauder_script_delay(worker, stage->timeout);
+    _send_stop();
+}
+
+void _wifi_marauder_script_execute_sniff_esp(WifiMarauderScriptStageSniffEsp* stage, WifiMarauderScriptWorker* worker) {
+    const char sniff_command[] = "sniffesp\n";
+    wifi_marauder_uart_tx((uint8_t*)sniff_command, strlen(sniff_command));
+    _wifi_marauder_script_delay(worker, stage->timeout);
+    _send_stop();
+}
+
 void _wifi_marauder_script_execute_sniff_pmkid(WifiMarauderScriptStageSniffPmkid* stage, WifiMarauderScriptWorker* worker) {
     char attack_command[50] = "sniffpmkid";
     int len = strlen(attack_command);
@@ -106,6 +127,13 @@ void _wifi_marauder_script_execute_sniff_pmkid(WifiMarauderScriptStageSniffPmkid
     _send_stop();
 }
 
+void _wifi_marauder_script_execute_sniff_pwn(WifiMarauderScriptStageSniffPwn* stage, WifiMarauderScriptWorker* worker) {
+    const char sniff_command[] = "sniffpwn\n";
+    wifi_marauder_uart_tx((uint8_t*)sniff_command, strlen(sniff_command));
+    _wifi_marauder_script_delay(worker, stage->timeout);
+    _send_stop();
+}
+
 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));
@@ -161,12 +189,24 @@ void wifi_marauder_script_execute_stage(WifiMarauderScriptStage* stage, void *co
         case WifiMarauderScriptStageTypeProbe:
             _wifi_marauder_script_execute_probe((WifiMarauderScriptStageProbe*)stage_data, worker);
             break;
+        case WifiMarauderScriptStageTypeSniffRaw:
+            _wifi_marauder_script_execute_sniff_raw((WifiMarauderScriptStageSniffRaw*)stage_data, worker);
+            break;
         case WifiMarauderScriptStageTypeSniffBeacon:
             _wifi_marauder_script_execute_sniff_beacon((WifiMarauderScriptStageSniffBeacon*)stage_data, worker);
             break;
+        case WifiMarauderScriptStageTypeSniffDeauth:
+            _wifi_marauder_script_execute_sniff_deauth((WifiMarauderScriptStageSniffDeauth*)stage_data, worker);
+            break;
+        case WifiMarauderScriptStageTypeSniffEsp:
+            _wifi_marauder_script_execute_sniff_esp((WifiMarauderScriptStageSniffEsp*)stage_data, worker);
+            break;
         case WifiMarauderScriptStageTypeSniffPmkid:
             _wifi_marauder_script_execute_sniff_pmkid((WifiMarauderScriptStageSniffPmkid*)stage_data, worker);
             break;
+        case WifiMarauderScriptStageTypeSniffPwn:
+            _wifi_marauder_script_execute_sniff_pwn((WifiMarauderScriptStageSniffPwn*)stage_data, worker);
+            break;
         case WifiMarauderScriptStageTypeBeaconList:
             _wifi_marauder_script_execute_beacon_list((WifiMarauderScriptStageBeaconList*)stage_data, worker);
             break;