Просмотр исходного кода

Added support for beacon ap stage in automation script

tcpassos 2 лет назад
Родитель
Сommit
57b712616f

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

@@ -243,7 +243,7 @@ WifiMarauderScriptStageSniffPwn* _wifi_marauder_script_get_stage_sniff_pwn(cJSON
 }
 
 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) {
         return NULL;
     }
@@ -281,10 +281,28 @@ WifiMarauderScriptStageBeaconList* _wifi_marauder_script_get_stage_beacon_list(c
     // Timeout
     cJSON* timeout = cJSON_GetObjectItem(stage_beaconlist, "timeout");
     beaconlist_stage->timeout = timeout != NULL ? (int)cJSON_GetNumberValue(timeout) : WIFI_MARAUDER_DEFAULT_TIMEOUT_BEACON;
+    // Random SSIDs
+    cJSON* random_ssids = cJSON_GetObjectItem(stage_beaconlist, "generate");
+    beaconlist_stage->random_ssids = random_ssids != NULL ? (int)cJSON_GetNumberValue(random_ssids) : 0;
     
     return beaconlist_stage;
 }
 
+WifiMarauderScriptStageBeaconAp* _wifi_marauder_script_get_stage_beacon_ap(cJSON *stages) {
+    cJSON* beaconap_stage_json = cJSON_GetObjectItem(stages, "beaconAp");
+    if (beaconap_stage_json == NULL) {
+        return NULL;
+    }
+
+    cJSON* timeout_json = cJSON_GetObjectItem(beaconap_stage_json, "timeout");
+    int timeout = timeout_json != NULL ? (int)cJSON_GetNumberValue(timeout_json) : WIFI_MARAUDER_DEFAULT_TIMEOUT_BEACON;
+
+    WifiMarauderScriptStageBeaconAp *beacon_ap_stage = (WifiMarauderScriptStageBeaconAp*) malloc(sizeof(WifiMarauderScriptStageBeaconAp));
+    beacon_ap_stage->timeout = timeout;
+
+    return beacon_ap_stage;
+}
+
 WifiMarauderScriptStage* _wifi_marauder_script_create_stage(WifiMarauderScriptStageType type, void* stage_data) {
     WifiMarauderScriptStage* stage = (WifiMarauderScriptStage*) malloc(sizeof(WifiMarauderScriptStage));
     stage->type = type;
@@ -414,6 +432,16 @@ void _wifi_marauder_script_load_stages(WifiMarauderScript *script, cJSON *stages
             &prev_stage
         );
     }
+
+    // Beacon Ap stage
+    WifiMarauderScriptStageBeaconAp *stage_beacon_ap = _wifi_marauder_script_get_stage_beacon_ap(stages);
+    if (stage_beacon_ap != NULL) {
+        _wifi_marauder_script_add_stage(
+            script,
+            _wifi_marauder_script_create_stage(WifiMarauderScriptStageTypeBeaconAp, stage_beacon_ap),
+            &prev_stage
+        );
+    }
 }
 
 WifiMarauderScript *wifi_marauder_script_parse_raw(const char* json_raw) {
@@ -518,6 +546,9 @@ void wifi_marauder_script_free(WifiMarauderScript *script) {
                 free(((WifiMarauderScriptStageBeaconList *) current_stage->stage)->ssids);
                 free(current_stage->stage);
                 break;
+            case WifiMarauderScriptStageTypeBeaconAp:
+                free(current_stage->stage);
+                break;
         }
         free(current_stage);
         current_stage = next_stage;

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

@@ -28,6 +28,8 @@
  * - Sniff PMKID
  * - Sniff Pwnagotchi
  * - Beacon List
+ * - Beacon Random
+ * - Beacon Ap
  * ----------------------------------------------------------------------------------------------------
  * SCRIPT SYNTAX:
  * {
@@ -73,12 +75,16 @@
  *         "sniffPwn": {
  *             "timeout": seconds
  *         },
- *         "beaconlist": {
+ *         "beaconList": {
  *             "ssids": [
  *                 "SSID 1",
  *                 "SSID 2",
  *                 "SSID 3"
  *             ],
+ *             "generate": number of random SSIDs that will be generated,
+ *             "timeout": seconds
+ *         }
+ *         "beaconAp": {
  *             "timeout": seconds
  *         }
  *     }
@@ -103,6 +109,7 @@ typedef enum {
     WifiMarauderScriptStageTypeSniffPmkid,
     WifiMarauderScriptStageTypeSniffPwn,
     WifiMarauderScriptStageTypeBeaconList,
+    WifiMarauderScriptStageTypeBeaconAp,
 } WifiMarauderScriptStageType;
 
 typedef enum {
@@ -173,9 +180,14 @@ typedef struct WifiMarauderScriptStageSniffPwn {
 typedef struct WifiMarauderScriptStageBeaconList {
     char **ssids;
     int ssid_count;
+    int random_ssids;
     int timeout;
 } WifiMarauderScriptStageBeaconList;
 
+typedef struct WifiMarauderScriptStageBeaconAp {
+    int timeout;
+} WifiMarauderScriptStageBeaconAp;
+
 // Script
 typedef struct WifiMarauderScript {
     char* name;

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

@@ -147,12 +147,24 @@ void _wifi_marauder_script_execute_beacon_list(WifiMarauderScriptStageBeaconList
         wifi_marauder_uart_tx((uint8_t*)(command), strlen(command));
         _send_line_break();
     }
+    if (stage->random_ssids > 0) {
+        char add_random_command[50];
+        snprintf(add_random_command, sizeof(add_random_command), "ssid -a -r -g %d\n", stage->random_ssids);
+        wifi_marauder_uart_tx((uint8_t*)add_random_command, strlen(add_random_command));
+    }
     const char attack_command[] = "attack -t beacon -l\n";
     wifi_marauder_uart_tx((uint8_t*)(attack_command), strlen(attack_command));
     _wifi_marauder_script_delay(worker, stage->timeout);
     _send_stop();
 }
 
+void _wifi_marauder_script_execute_beacon_ap(WifiMarauderScriptStageBeaconAp* stage, WifiMarauderScriptWorker* worker) {
+    const char command[] = "attack -t beacon -a\n";
+    wifi_marauder_uart_tx((uint8_t*)command, strlen(command));
+    _wifi_marauder_script_delay(worker, stage->timeout);
+    _send_stop();
+}
+
 void wifi_marauder_script_execute_start(void *context) {
     furi_assert(context);
     WifiMarauderScriptWorker* worker = context;
@@ -210,6 +222,9 @@ void wifi_marauder_script_execute_stage(WifiMarauderScriptStage* stage, void *co
         case WifiMarauderScriptStageTypeBeaconList:
             _wifi_marauder_script_execute_beacon_list((WifiMarauderScriptStageBeaconList*)stage_data, worker);
             break;
+        case WifiMarauderScriptStageTypeBeaconAp:
+            _wifi_marauder_script_execute_beacon_ap((WifiMarauderScriptStageBeaconAp*)stage_data, worker);
+            break;
         default:
             break;
     }