# Wi-Fi Pentest
## Setup
### Adapter
{%preview https://hackmd.io/@lywslc/By6N2czr-x %}
### Configure NetworkManager
(Ignore Wi-Fi interface to prevent conflicts with tools like hostapd or aircrack-ng)
```bash
sudo vim /etc/NetworkManager/NetworkManager.conf
```
Add the following content to the bottom of config file:
```ini
[keyfile]
unmanaged-devices=interface-name:wlan0
```
Restart service to apply changes:
```bash
sudo systemctl restart NetworkManager
```
> [!Important]
> Kali Linux kernel version `6.17` may encounter errors during monitor mode. Use `6.12` instead (e.g., `6.12.38+kali-rt-arm64`)
## General Commands
### Check Interface Info
```bash
iw dev
```
#### Modes
- **Managed**: Standard client mode. Used for connecting to Access Points (APs).
- **Monitor**: Capable of **sniffing** all traffic in the air and injecting packets.
- **AP**: Acting as an Access Point. Used for hosting hotspots (e.g., Evil Twin attacks).
- **Etc**
### Switch Interface Mode
```bash
sudo ip link set wlan0 down
sudo iw dev wlan0 set type [mode]
sudo ip link set wlan0 up
```
#### Available <mode\> Parameters
- **managed**: (Default) Client mode. Connects to an AP as a station (STA).
- **monitor**: Promiscuous mode. Listens to all traffic and allows packet injection.
- **ap**: Access Point mode. Creates a Wi-Fi hotspot (Master).
- **Etc**
#### Quick Examples
```bash
sudo ip link set wlan0 down
sudo iw dev wlan0 set type monitor
sudo ip link set wlan0 up
```
> [!Warning]
> If you encounter a "Device or resource busy" error, it indicates that a background process is holding the interface. Run `sudo airmon-ng check kill` to stop interfering services (like NetworkManager).
### Check Wi-Fi Regulatory Domain
```bash
iw reg get
```
Output:
```
global
country 00: DFS-UNSET
(755 - 928 @ 2), (N/A, 20), (N/A), PASSIVE-SCAN
(2402 - 2472 @ 40), (N/A, 20), (N/A)
(2457 - 2482 @ 20), (N/A, 20), (N/A), AUTO-BW, PASSIVE-SCAN
(5170 - 5250 @ 80), (N/A, 20), (N/A), AUTO-BW, PASSIVE-SCAN
# ... (other bands omitted)
```
#### Parameters Explanation
- **country 00**: World Regulatory Domain (Strictest restrictions).
- **Output Syntax**: (Freq Range @ Bandwidth), (Max Gain, Max Power)
- **PASSIVE-SCAN**: Listening only; active probing/packet injection is disabled on these frequencies.
#### Change Region (to unlock higher TX Power/Channels)
```bash
sudo iw reg set TW
```
### Checking Driver Capabilities
```bash
iw list
```
#### Key Sections to Look For:
- **Supported interface modes**
- **Supported Ciphers**: Shows hardware support for WEP, WPA2 (CCMP), etc.
- **Frequencies**: Shows which channels are enabled or disabled.
### Scanning Available WiFi
Use this optimized command to see SSID, Signal, and encryption status:
```bash
sudo iw dev wlan0 scan | grep -E '^BSS|signal:|SSID:|capability:'
```
#### Output Fields Explanation:
- **signal**: Received signal strength (closer to `0` is stronger, e.g., `-30` is better than `-80`).
- **SSID**: The Wi-Fi name.
- **capability**:
- `ESS`: Regular Access Point.
- `Privacy`: **Encrypted** (requires a password). If missing, the network is **Open**.
- **HT/VHT/HE**: Indicates the IEEE standard:
- `HT`: 802.11n (Wi-Fi 4)
- `VHT`: 802.11ac (Wi-Fi 5)
- `HE`: 802.11ax (Wi-Fi 6)
## Pretend Wi-Fi AP
{%preview https://hackmd.io/@lywslc/rJ89gTVSbl %}
## Aircrack-ng Suite
### airmon-ng (Monitor Mode Management)
Used to kill interfering processes and enable monitor mode on the interface.
#### Kill Interfering Processes
Before starting monitor mode, stop services that might interfere (e.g., NetworkManager, wpa_supplicant):
```bash
sudo airmon-ng check kill
```
#### Enable Monitor Mode
```bash
sudo airmon-ng start wlan0
```
> [!Note]
> After running this, interface name will likely change from `wlan0` to `wlan0mon`. Check with `iw dev`.
### airodump-ng (Packet Sniffing)
Used to capture raw 802.11 frames, discover Access Points (APs), and capture Handshakes.
#### Scan All Networks
```bash
sudo airodump-ng wlan0mon
```
#### Output Fields Explanation
* **BSSID**: MAC address of the Access Point.
* **PWR**: Signal strength.
* **Beacons**: Announcement packets sent by the AP.
* **#Data**: Number of data packets captured (Higher is better for WEP cracking).
* **CH**: Channel number.
* **ENC**: Encryption method (OPEN, WEP, WPA, WPA2).
* **ESSID**: The Wi-Fi name.
#### Targeted Scan (Capture Handshake)
Once you identify a target, focus on its specific channel and BSSID to capture the **WPA Handshake**.
```bash
sudo airodump-ng --bssid <AP_MAC> --channel <CH> --write capture_filename wlan0mon
```
* `--write`: Saves the capture files (creates `.cap`, `.csv`, etc.).
* `--bssid`: Only listen to the target AP.
* `--channel`: Lock the card to a specific frequency to prevent channel hopping.
### aireplay-ng (Packet Injection)
Used to generate traffic or disrupt connections to force a client to reconnect (capturing the 4-way handshake).
#### Deauthentication Attack (Deauth)
Forces a client to disconnect from the AP. When they automatically reconnect, `airodump-ng` captures the handshake.
```bash
sudo aireplay-ng --deauth 10 -a <AP_MAC> -c <CLIENT_MAC> wlan0mon
```
* `--deauth 10`: Send 10 deauthentication frames (0 means infinite loop).
* `-a`: The BSSID (MAC address) of the Access Point.
* `-c`: The MAC address of the specific Victim Client (Targeting a specific client is stealthier than a broadcast attack).
### aircrack-ng (Cracking)
Used to crack the encryption key (password) from the captured `.cap` file using a wordlist.
#### Crack WPA2/WPA3
Requires a valid 4-way handshake captured by `airodump-ng`.
```bash
sudo aircrack-ng -w /usr/share/wordlists/rockyou.txt -b <AP_MAC> capture_filename-01.cap
```
* `-w`: Path to the dictionary file (Wordlist).
* `-b`: BSSID of the target AP (selects the specific handshake if the file contains multiple).
* **capture_filename-01.cap**: The capture file generated by airodump-ng.
> [!Tip]
> If you see `Key Found! [ password123 ]`, you have successfully cracked the network.