【实验目的】
1、熟悉scapy工具,掌握scapy工具的基本使用;
3、提高python编程能力;
4、熟悉Wireshark工具的使用;
5、加深对IPv6相关理论的理解。
【实验要求】
1、采用BackTrack操作系统。
2、使用scapy进行IPv6内网攻击。
【实验环境】
1、虚拟机操作系统:BackTrack5;
python虚拟机2、主机操作系统:XP SP3;
2、工具:scapy、Wireshark。
【实验过程】
1、如使用Windows操作系统,需安装虚拟机,具体过程从略;
(略)
2、配置虚拟机A及虚拟机B网络环境
(1)虚拟机A网络环境如图:
采用Host-only模式
虚拟机A网络接口(2)虚拟机B网络环境如图:
同虚拟机A一样,采用Host-only模式。
虚拟机B网络接口
(3)测试主机连通性
在虚拟机A上使用alive6命令,通过wireshark可以看出发送了目的地址为ff02::1的ICMPv6Echo request包,收到了两个Echo reply,其中一个是主机VMnet1的地址,另一个是虚拟机B的地址。由此可见,主机、虚拟机A、虚拟机B之间是联通的。
3、熟悉工具scapy的基本操作;
(1)构造ICMPv6EchoRequest包发送
使用IPv6函数构造IPv6基本包头,其中目的地址指定为虚拟机B的IPv6地址;使用
/ICMPv6EchoRequest()在IPv6基本头后面加上ICMPv6报文,没有显示赋值的参数都使用默认值。和使用/ICMPv6EchoRequest()类似,scapy还提供了很多ICMPv6报文。Scapy还支持自己定义私有报文,可以很方便的拓展到新报文,提供对各种报文的支持。
Scapy支持的部分ICMPv6报文
使用scapy构造的ICMPv6EchoRequest包
Scapy也提供报文解析功能
从上两幅图可以看出,scapy构造的报文某些字段(例如:checksun、payload),发送时会默认scapy 自己填充,这样可以很方便的构造报文。
(2)捕获ICMPv6EchoReply报文
Scapy提供捕获报文功能,可以设置过滤捕获报文,也可以使用sr1()函数指定捕获某个请求报文
的响应。sr()函数可以将捕获到的报文和发送的报文自动匹配,返回两个list,一个ans保存得到相应
的报文对,另一个unans保存没有响应的报文。
捕获某个指定报文的响应
捕获一对请求响应报文
Scapy也提供了sniff功能,通过help(sniff)可查看sniff函数的帮助,可以看出这里的sniff函数通过参数prn支持自定义的回调函数。
Sniff函数的帮助
使用sniff函数捕获数据包
(3)使用scapy实现alive6功能
由上文可知,linux上的alive6命令,是通过发送了目的地址为ff02::1的ICMPv6Echo request 包,实现的。这里也可以用scapy构造目的地址为ff02::1的ICMPv6Echo request包,通过wireshark抓包可以看出虚拟机B和主机发送了ICMPv6EchoReply包。和alive6的效果是一样的。
使用scapy实现alive6功能
(4)使用scapy实现多播NS报文欺骗
在地址解析过程中,节点B收到发送给自己的多播NS报文后,根据NS报文的Src Link-Layer Addr 选项创建关于节点A的IP-MAC记录并将其状态设为Stale。可见,链路内的攻击节点可以发送伪造的NS 报文,修改目标节点的缓存的IP-MAC记录。
NS报文
请求节点多播地址是由前缀FF02::1::FF00:0/104和单播IPv6地址的最后24位共同构成,所以这个NS报文的多播地址是FF02::1::FFED::BC5。下面使用scapy构造多播报文,其中目的主机为虚拟机B,通过抓包可以看到顺利收到了NA报文。同时在虚拟机B中查看邻居列表,可以看到虚拟机A的表项,其状态为STALE(停滞)。