Updated TODO with more ideas, tech debt, etc.
This commit is contained in:
188
TODO.md
188
TODO.md
@@ -1,47 +1,74 @@
|
|||||||
Braindump of ideas to improve Wifite2 (or for Wifite3)
|
# TODO
|
||||||
|
|
||||||
### Directory structure
|
This file is a braindump of ideas to improve Wifite2 (or forward-looking to "Wifite3")
|
||||||
|
|
||||||
Too modular in some places, not modular enough in others.
|
|
||||||
|
|
||||||
Not "/py":
|
|
||||||
|
|
||||||
* aircrack/aircrack.py <- process
|
|
||||||
* aircrack/airmon.py <- process
|
|
||||||
* aircrack/airodump.py <- process
|
|
||||||
* aircrack/aireplay.py <- process
|
|
||||||
* attack/decloak.py <- aireplay, airodump
|
|
||||||
* attack/wep.py (relay, chopchop, etc) <- aireplay, airodump
|
|
||||||
* attack/wpa.py (capture handshake only) <- aireplay, airodump
|
|
||||||
* attack/wps-pixie.py <- reaver
|
|
||||||
* attack/wps-pin.py
|
|
||||||
* config.py
|
|
||||||
* crack/crackwep.py <- target, result, aireplay, aircrack
|
|
||||||
* crack/crackwpa.py <- target, handshake, result, aircrack
|
|
||||||
* handshake/tshark.py <- process
|
|
||||||
* handshake/cowpatty.py <- process
|
|
||||||
* handshake/pyrit.py <- process
|
|
||||||
* output.py (color/printing) <- config
|
|
||||||
* process.py <- config
|
|
||||||
* scan/scan.py (airodump output to target) <- config, target, airodump
|
|
||||||
* target/target.py (ssid, pcap file) <- airodump, tshark
|
|
||||||
* target/result.py (PIN/PSK/KEY)
|
|
||||||
* target/handshake.py <- tshark, cowpatty, pyrit, aircrack
|
|
||||||
|
|
||||||
------------------------------------------------------
|
------------------------------------------------------
|
||||||
|
|
||||||
### Dependency injection
|
### Command-line Arguments
|
||||||
|
|
||||||
* Initialize each dependency at startup or when first possible.
|
Wifite is a 'Spray and Pray', 'Big Red Button' script. Wifite should not provide obscure options that only advanced users can understand. Advanced users can simply use Wifite's dependencies directly.
|
||||||
* Pass dependencies to modules that require them.
|
|
||||||
* Modules that call aircrack expect aircrack.py
|
--------------------------------
|
||||||
* Modules that print expect output.py
|
|
||||||
* Unit test using mocked dependencies.
|
Every option in Wifite's should either:
|
||||||
|
|
||||||
|
1. Significantly affect how Wifite behaves (e.g. `pillage`, `5ghz`, '--no-wps', '--nodeauths')
|
||||||
|
2. Or narrow down the list of targets (e.g. filtering --wps --wep --channel)
|
||||||
|
3. Or set some flag required by certain hardware (packets per second)
|
||||||
|
|
||||||
|
Any options that don't fall into the above buckets should be removed.
|
||||||
|
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
Currently there are way too many command-line options:
|
||||||
|
|
||||||
|
* 8 options to configure a timeout in seconds (wpat, wpadt, pixiet, pixiest, wpst, wept, weprs, weprc)
|
||||||
|
* I don't even know what these are or if they work anymore.
|
||||||
|
* 5 options to configure Thresholds (WPS retry/fail/timeout, WEP pps/ivs)
|
||||||
|
* And the WPS options are NOT consistent between Bully & Reaver.
|
||||||
|
* "Num deauths" etc
|
||||||
|
|
||||||
|
For most of these, We can just set a sane default value to avoid the `--help` Wall-of-Text.
|
||||||
|
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
The "Commands" (`cracked`, `crack`, `check`) should probably not start with `--`, e.g. `--crack` should be simply `crack`
|
||||||
|
|
||||||
|
------------------------------------------------------
|
||||||
|
|
||||||
|
### Native Python Implementations
|
||||||
|
|
||||||
|
Some dependencies of Wifite (aircrack suite, tshark, etc) could be replaced with native Python implementations.
|
||||||
|
|
||||||
|
*Scapy* allows listening to and inspecting packets, writing pcap files, and other features.
|
||||||
|
|
||||||
|
There's ways to change wireless channels, enumerate wireless devices, send Deauth packets, etc. all within Python.
|
||||||
|
|
||||||
|
We could still utilize libraries when it's more trouble than it's worth to port to Python, like some of aircrack (chopchop, packetforge-ng).
|
||||||
|
|
||||||
|
And some native Python implementations might be cross-platform, which would allow...
|
||||||
|
|
||||||
|
------------------------------------------------------
|
||||||
|
|
||||||
|
### Non-Linux support (OSX & Windows)
|
||||||
|
|
||||||
|
Some of Wifite's dependencies work on other OSes (airodump) but some don't (airmon).
|
||||||
|
|
||||||
|
If it's possible to run these programs on Windows or OSX, Wifite should suporrt that.
|
||||||
|
|
||||||
|
------------------------------------------------------
|
||||||
|
|
||||||
|
### Backwards Compatibility
|
||||||
|
|
||||||
|
* WIFITE: needs command-line parity with older versions (or does it?)
|
||||||
|
* AIRODUMP: --output-format, --wps, and other flags are only in new versions of Airodump.
|
||||||
|
|
||||||
------------------------------------------------------
|
------------------------------------------------------
|
||||||
|
|
||||||
### WPS detection
|
### WPS detection
|
||||||
|
|
||||||
|
See https://github.com/derv82/wifite2/issues/62 for discussion.
|
||||||
|
|
||||||
WASH
|
WASH
|
||||||
* Wash does not seem to detect APs when given a .cap file
|
* Wash does not seem to detect APs when given a .cap file
|
||||||
* Wash can scan, but is slow and does not provide as much info as airodump
|
* Wash can scan, but is slow and does not provide as much info as airodump
|
||||||
@@ -62,35 +89,67 @@ We can extract WPS networks' BSSID and WPS lock status:
|
|||||||
```bash
|
```bash
|
||||||
% tshark -r withwps-01.cap -n -Y "wps.wifi_protected_setup_state && wlan.da == ff:ff:ff:ff:ff:ff" -T fields -e wlan.ta -e wps.ap_setup_locked -E separator=,
|
% tshark -r withwps-01.cap -n -Y "wps.wifi_protected_setup_state && wlan.da == ff:ff:ff:ff:ff:ff" -T fields -e wlan.ta -e wps.ap_setup_locked -E separator=,
|
||||||
# Output:
|
# Output:
|
||||||
88:ad:43:d2:77:c8,
|
|
||||||
18:d6:c7:6d:6b:18,
|
|
||||||
f4:f2:6d:9e:34:25,
|
|
||||||
fc:51:a4:1e:11:67,
|
fc:51:a4:1e:11:67,
|
||||||
98:e7:f4:90:f1:12,0x00000001
|
98:e7:f4:90:f1:12,0x00000001
|
||||||
10:13:31:30:35:2c,
|
10:13:31:30:35:2c,
|
||||||
60:a4:4c:6a:46:b0,
|
|
||||||
c0:7c:d1:6f:a2:c8,
|
|
||||||
f8:cf:c5:fb:a3:e2,
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
### Directory structure
|
||||||
|
|
||||||
|
Too modular in some places, not modular enough in others.
|
||||||
|
|
||||||
|
Not "/py":
|
||||||
|
|
||||||
|
* **aircrack/**
|
||||||
|
* `aircrack.py` <- process
|
||||||
|
* `airmon.py` <- process
|
||||||
|
* `airodump.py` <- process
|
||||||
|
* `aireplay.py` <- process
|
||||||
|
* **attack/**
|
||||||
|
* `decloak.py` <- aireplay, airodump
|
||||||
|
* `wps-pin.py` <- reaver, bully
|
||||||
|
* `wps-pixie.py` <- reaver, bully
|
||||||
|
* `wpa.py` (handshake only) <- aireplay, airodump
|
||||||
|
* `wep.py` (relay, chopchop) <- aireplay, airodump
|
||||||
|
* `config.py`
|
||||||
|
* **crack/**
|
||||||
|
* `crackwep.py` <- target, result, aireplay, aircrack
|
||||||
|
* `crackwpa.py` <- target, handshake, result, aircrack
|
||||||
|
* **handshake/**
|
||||||
|
* `tshark.py` <- process
|
||||||
|
* `cowpatty.py` <- process
|
||||||
|
* `pyrit.py` <- process
|
||||||
|
* `output.py` (color/printing) <- config
|
||||||
|
* `process.py` <- config
|
||||||
|
* `scan.py` (airodump output to target) <- config, target, airodump
|
||||||
|
* **target/**
|
||||||
|
* `target.py` (ssid, pcap file) <- airodump, tshark
|
||||||
|
* `result.py` (PIN/PSK/KEY)
|
||||||
|
* `handshake.py` <- tshark, cowpatty, pyrit, aircrack
|
||||||
|
|
||||||
------------------------------------------------------
|
------------------------------------------------------
|
||||||
|
|
||||||
### Backwards Compatibility
|
### Dependency injection
|
||||||
|
|
||||||
* WIFITE: needs command-line parity with older versions (or does it?)
|
* Initialize each dependency at startup or when first possible.
|
||||||
* AIRODUMP: --output-format, --wps, and other flags are newer
|
* Pass dependencies to modules that require them.
|
||||||
* WASH: Broken? can we use AIRODUMP or something else?
|
* Modules that call aircrack expect aircrack.py
|
||||||
|
* Modules that print expect output.py
|
||||||
|
* Unit test using mocked dependencies.
|
||||||
|
|
||||||
------------------------------------------------------
|
------------------------------------------------------
|
||||||
|
|
||||||
### Dependencies
|
### Dependencies
|
||||||
|
|
||||||
AIRMON
|
**AIRMON**
|
||||||
|
|
||||||
* Detect interfaces in monitor mode.
|
* Detect interfaces in monitor mode.
|
||||||
* Check if config interface name is found.
|
* Check if config interface name is found.
|
||||||
* Enable or Disable monitor mode on a device.
|
* Enable or Disable monitor mode on a device.
|
||||||
|
|
||||||
AIRODUMP
|
**AIRODUMP**
|
||||||
* Run as daemon (background thread)
|
* Run as daemon (background thread)
|
||||||
* Accept flags as input (--ivs, --wps, etc)
|
* Accept flags as input (--ivs, --wps, etc)
|
||||||
* Construct a Target for all found APs
|
* Construct a Target for all found APs
|
||||||
@@ -103,14 +162,14 @@ AIRODUMP
|
|||||||
* XXX: Reading STDOUT might not match what's in the Cap file...
|
* XXX: Reading STDOUT might not match what's in the Cap file...
|
||||||
* XXX: But STDOUT gives us WPS and avoids WASH...
|
* XXX: But STDOUT gives us WPS and avoids WASH...
|
||||||
|
|
||||||
TARGET
|
**TARGET**
|
||||||
* Constructed via passed-in CSV (airodump-ng --output-format=csv)
|
* Constructed via passed-in CSV (airodump-ng --output-format=csv)
|
||||||
* Needs info on the current AP (1 line) and ALL clients (n lines)
|
* Needs info on the current AP (1 line) and ALL clients (n lines)
|
||||||
* Keep track of BSSID, ESSID, Channel, AUTH, other attrs
|
* Keep track of BSSID, ESSID, Channel, AUTH, other attrs
|
||||||
* Construct Clients of target
|
* Construct Clients of target
|
||||||
* Start & return an Airodump Daemon (e.g. WEP needs --ivs flag)
|
* Start & return an Airodump Daemon (e.g. WEP needs --ivs flag)
|
||||||
|
|
||||||
AIREPLAY
|
**AIREPLAY**
|
||||||
* Fakeauth
|
* Fakeauth
|
||||||
* (Daemon) Start fakeauth process
|
* (Daemon) Start fakeauth process
|
||||||
* Detect fakeauth status
|
* Detect fakeauth status
|
||||||
@@ -119,9 +178,9 @@ AIREPLAY
|
|||||||
* Call aireplay-ng to deauth a Client BSSID+ESSID
|
* Call aireplay-ng to deauth a Client BSSID+ESSID
|
||||||
* Return status of deauth
|
* Return status of deauth
|
||||||
* Chopchop & Fragment
|
* Chopchop & Fragment
|
||||||
1. (Daemon) Start aireplay-ng --chopchop on Target
|
1. (Daemon) Start aireplay-ng --chopchop or --fragment on Target
|
||||||
2. LOOP
|
2. LOOP
|
||||||
1. Detect chopchop status (.xor or EXCEPTION)
|
1. Detect chopchop/fragment status (.xor or EXCEPTION)
|
||||||
2. If .xor is created:
|
2. If .xor is created:
|
||||||
* Call packetforge-ng to forge cap
|
* Call packetforge-ng to forge cap
|
||||||
* Arpreplay on forged cap
|
* Arpreplay on forged cap
|
||||||
@@ -131,13 +190,13 @@ AIREPLAY
|
|||||||
2. Detect status of replay (# of packets)
|
2. Detect status of replay (# of packets)
|
||||||
3. If running time > threshold and/or packet velocity < threshold, EXCEPTION
|
3. If running time > threshold and/or packet velocity < threshold, EXCEPTION
|
||||||
|
|
||||||
AIRCRACK
|
**AIRCRACK**
|
||||||
* Start aircrack-ng for WEP: Needs pcap file with IVS
|
* Start aircrack-ng for WEP: Needs pcap file with IVS
|
||||||
* Start aircrack-ng for WPA: Needs pcap file containig Handshake
|
* Start aircrack-ng for WPA: Needs pcap file containig Handshake
|
||||||
* Check status of aircrack-ng (`percenage`, `keys_tried`)
|
* Check status of aircrack-ng (`percenage`, `keys-tried`)
|
||||||
* Return cracked key
|
* Return cracked key
|
||||||
|
|
||||||
CONFIG
|
**CONFIG**
|
||||||
* Key/value stores: 1) defaults and 2) customer-defined
|
* Key/value stores: 1) defaults and 2) customer-defined
|
||||||
* Reads from command-line arguments (+input validation)
|
* Reads from command-line arguments (+input validation)
|
||||||
* Keys to filter scanned targets by some attribute
|
* Keys to filter scanned targets by some attribute
|
||||||
@@ -156,13 +215,13 @@ CONFIG
|
|||||||
|
|
||||||
------------------------------------------------------
|
------------------------------------------------------
|
||||||
|
|
||||||
### Workflow
|
### Process Workflow
|
||||||
|
|
||||||
MAIN: Starts everything
|
**MAIN**: Starts everything
|
||||||
1. Parse command-line args, override defaults
|
1. Parse command-line args, override defaults
|
||||||
2. Start appropriate COMMAND (SCAN, ATTACK, CRACK, INFO)
|
2. Start appropriate COMMAND (SCAN, ATTACK, CRACK, INFO)
|
||||||
|
|
||||||
SCAN: (Scan + Attack + Result)
|
**SCAN**: (Scan + Attack + Result)
|
||||||
1. Find interface, start monitor mode (airmon.py)
|
1. Find interface, start monitor mode (airmon.py)
|
||||||
2. LOOP
|
2. LOOP
|
||||||
1. Get list of filtered targets (airodump.py)
|
1. Get list of filtered targets (airodump.py)
|
||||||
@@ -179,10 +238,10 @@ SCAN: (Scan + Attack + Result)
|
|||||||
3. WPA-only: Start cracking Handshake
|
3. WPA-only: Start cracking Handshake
|
||||||
4. If cracked, test credentials by connecting to the router (?).
|
4. If cracked, test credentials by connecting to the router (?).
|
||||||
|
|
||||||
ATTACK (ALL)
|
**ATTACK** (All types)
|
||||||
Returns cracked target information or throws exception
|
Returns cracked target information or throws exception
|
||||||
|
|
||||||
ATTACK (WEP)
|
**ATTACK WEP**
|
||||||
0. Expects: Target
|
0. Expects: Target
|
||||||
1. Start Airodump to capture IVS from the AP (airodump)
|
1. Start Airodump to capture IVS from the AP (airodump)
|
||||||
2. LOOP
|
2. LOOP
|
||||||
@@ -194,7 +253,7 @@ ATTACK (WEP)
|
|||||||
4. If aireplay/others and IVS has not changed in N seconds, restart attack.
|
4. If aireplay/others and IVS has not changed in N seconds, restart attack.
|
||||||
5. If running time > threshold, EXCEPTION
|
5. If running time > threshold, EXCEPTION
|
||||||
|
|
||||||
ATTACK (WPA): Returns cracked Target or Handshake of Target
|
**ATTACK WPA**: Returns cracked Target or Handshake of Target
|
||||||
0. Expects: Target
|
0. Expects: Target
|
||||||
1. Start Airodump to capture PCAP from the Target AP
|
1. Start Airodump to capture PCAP from the Target AP
|
||||||
2. LOOP
|
2. LOOP
|
||||||
@@ -208,10 +267,10 @@ ATTACK (WPA): Returns cracked Target or Handshake of Target
|
|||||||
1. If successful, add PSK to target and return
|
1. If successful, add PSK to target and return
|
||||||
4. If not cracking or crack is unsuccessful, mark PSK as "Handshake" and return
|
4. If not cracking or crack is unsuccessful, mark PSK as "Handshake" and return
|
||||||
|
|
||||||
ATTACK-WPS:
|
**ATTACK WPS**
|
||||||
0. Expects: Target
|
0. Expects: Target
|
||||||
1. For each attack (PIN and/or Pixie-Dust based on CONFIG):
|
1. For each attack (PIN and/or Pixie-Dust based on CONFIG):
|
||||||
1. (Daemon) Start Reaver (PIN/Pixie-Dust)
|
1. (Daemon) Start Reaver/Bully (PIN/Pixie-Dust)
|
||||||
2. LOOP
|
2. LOOP
|
||||||
1. Print Pixie status
|
1. Print Pixie status
|
||||||
2. If Pixie is successful, add PSK+PIN to Target and return
|
2. If Pixie is successful, add PSK+PIN to Target and return
|
||||||
@@ -219,7 +278,7 @@ ATTACK-WPS:
|
|||||||
4. If Pixie is locked out == CONFIG, EXCEPTION
|
4. If Pixie is locked out == CONFIG, EXCEPTION
|
||||||
5. If running time > threshold, EXCEPTION
|
5. If running time > threshold, EXCEPTION
|
||||||
|
|
||||||
CRACK (WEP)
|
**CRACK WEP**
|
||||||
0. Expects: String pcap file containing IVS
|
0. Expects: String pcap file containing IVS
|
||||||
2. FOR EACH Aircrack option:
|
2. FOR EACH Aircrack option:
|
||||||
1. (Daemon) Start Aircrack
|
1. (Daemon) Start Aircrack
|
||||||
@@ -228,7 +287,7 @@ CRACK (WEP)
|
|||||||
2. If Aircrack is successful, print result
|
2. If Aircrack is successful, print result
|
||||||
3. If unsuccessful, EXCEPTION
|
3. If unsuccessful, EXCEPTION
|
||||||
|
|
||||||
CRACK (WPA)
|
**CRACK WPA**
|
||||||
0. Expects: String pcap file containing Handshake (optional: BSSID/ESSID)
|
0. Expects: String pcap file containing Handshake (optional: BSSID/ESSID)
|
||||||
1. Select Cracking option (Aircrack, Cowpatty, Pyrit)
|
1. Select Cracking option (Aircrack, Cowpatty, Pyrit)
|
||||||
2. (Daemon) Start attack
|
2. (Daemon) Start attack
|
||||||
@@ -237,8 +296,9 @@ CRACK (WPA)
|
|||||||
2. If successful, print result
|
2. If successful, print result
|
||||||
3. If unsuccessful, EXCEPTION
|
3. If unsuccessful, EXCEPTION
|
||||||
|
|
||||||
INFO:
|
**INFO**
|
||||||
* Print list of handshake files with ESSIDs, Dates, etc.
|
* Print list of handshake files with ESSIDs, Dates, etc.
|
||||||
|
* Show options to `--crack` handshakes (or execute those commands directly)
|
||||||
* Print list of cracked Targets (including WEP/WPA/WPS key)
|
* Print list of cracked Targets (including WEP/WPA/WPS key)
|
||||||
|
|
||||||
------------------------------------------------------
|
------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user