鉴于之前看过了ARP协议的原理,这次来测试一下ARP欺骗.在如何发送数据包方面,貌似基于python的scapy
包是一个很nice的选择
实验
下面我们来测试一下arp欺骗相关内容
环境:
test1:192.168.122.11,52:54:00:95:07:90,被欺骗主机
test2:192.168.122.12,52:54:00:02:3a:3d,欺骗主机
router:192.168.122.1,52:54:00:6d:32:18,路由器
单主机arp欺骗
首先试试看test2能不能向test1发送免费arp,让test1以为test2才是路由器,并使之无法上网
这里test2发送的arp包的目标IP与目标MAC都是test1的,源MAC是自己,唯独源IP改为了路由器的IP
1 | from scapy.all import ( |
该脚本一执行,与test1的ssh连接就中断了…test1现在处于只能局域网通信的状态,因为外网的数据包全都发送到test2上
查看test1的arp表:
1 | 192.168.122.1 dev eth0 lladdr 52:54:00:02:3a:3d REACHABLE |
可以看到test1认为test2和路由器的mac地址相同,试验成功!
数据包截获
光是让一个主机无法通信就太简单了,arp欺骗一般来说是用来截获数据包获取有价值的信息的
为了达成这个目的,我们所需要做的是:
- 欺骗test1,使之认为test2是路由器
- 欺骗路由器,使之认为test2是test1
- 转发test1的流量,使之能正常上网
- 截获来自test1的流量
由于test1,test2,router处于同一局域网下,所以无需手动配置路由,只需内核的路由转发功能即可:
1 | [root@test2 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward |
接下来创建py脚本,分别对test1和router进行arp欺骗:
1 | from scapy.all import ( |
理论上来说test1已经能够正常上网,且数据包都经过test2才对,但现在的情况是test1能局域网通信,却无法访问外网-.-
1 | [root@test1 ~]# ping 192.168.122.1 -c1 |
由于之前已经在外网测试成功,所以这次虚拟机测试失败也不应该是步骤错误的问题…先抓包试试看:
1 | [root@test2 ~]# tcpdump -nn not port 22 and not arp and not icmp |
可以看到test1对dns的请求是成功的,返回了百度的ip地址,但http数据包从router发送至百度服务器后,却再也没有收到服务器的回应,真是奇怪…这个问题暂时放在这,以后再来解决
正常来说,能够截获数据包就算arp欺骗成功而了,除了最常用的wireshark外,kali上也有一些相关的工具,如ettercap
进行密码嗅探,driftnet
进行图片嗅探,还有arpspoof
进行arp欺骗
小结
这次除了进行arp欺骗外,值得注意的还有scapy
包,这是一个数据包构造相关的库,使用相当简单.有了这个包,我们就可以对学得的网络知识快速实践
这是写好的脚本:
1 | from scapy.all import ( |