本学期开始两门课的SeedLab之旅~
网上能参考的资料比较少…要自己加油鸭 🥰
Sniffing & Spoofing Lab
两种语言:Python(Scapy)、C(pcap)
两种机制:Sniff、spoof
Task 1.1A
抄一抄示例代码,scapy的show()函数能直接打印出以太网、IP、ICMP、DNS等信息(需要root权限运行):
不用root权限时,会在socket系统调用的地方发生权限错误:
Task 1.1B
2 更改过滤条件,指定目的IP和目的端口号即可
3 更改过滤条件,指定子网即可
Task 1.2
Scapy的spoof很好写,不用计算校验和,直接创建对象指定字段就可以啦
发一个伪造的ICMP echo request(ICMP对象默认即为request)
在目的主机抓包,能看到它发送了reply
Task 1.3
模拟一个traceroute,循环每次TTL+1,中间节点都发回ICMP TTL字段过期的错误信息,目的节点发回ICMP reply就结束
可以用traceroute对比一下,基本是一样的
Task 1.4
最后一个啦,抓到ICMP request就伪造目的IP发送ICMP reply(交换源和目的端口,更改type,其他的都保持不变)
Scapy踩过的坑
第一个大坑就是Linux下使用python:Syntax error "(" unexpected
解决方法:
最上方加一行#!/usr/bin/python3
(这种以#!开头的代码指定了解释器,因为python2 / 3是不兼容的,所以需要路径)
Task 2.1A
开始pcap~
最开始同样是实现sniff,不同的是pcap没有scapy那么方便的接口,需要自己实现各类协议的各个字段,以便进行解析
用typedef更加方便~
要确保字段的大小无误,然后就可以输出IP地址啦
Task 2.1B
然后就是增加过滤条件:
1 指定两个端口的ICMP
2 指定目的端口范围的TCP
这里有个思考题没有搞成功,就是在pcap_open_live
里关闭混杂模式后再抓包,但是关掉之后(即使在命令行关闭网卡的混杂模式)也能抓到其他主机的包…官方文档说特殊情况下会这样,可能是虚拟机网络配置的问题叭…
Task 2.1C
这题还蛮有意思的,要嗅探TCPpayload里面携带的密码
要用到telnet,选择了新浪邮箱登录
登录操作:
嗅探到的报文:
Task 2.2B
要发一个伪造的ICMP echo request,注意type为8,code为0,id和seq都要用htons进行主机序与网络序的转换
校验和算法:
指定源和目的IP:
似乎IP地址的校验和不用计算,(可能是因为IP的分片,在底层设备发送前会自动计算并且填写好字段),但是ICMP的校验和必须计算,否则会出错,也会被目的主机拒收从而收不到回应报文
这里自己也没研究清楚,仅供参考…
Task 2.3
和之前一样,收到ICMP request后伪造ICMP reply
没什么问题,找了很久的一个bug是在计算校验和之前要先把checksum字段置为0
这个Lab总体不算很难,重点是各类协议的头部结构、scapy和pcap的语法熟悉和SeedLab的环境熟悉,希望验收顺利~
感谢大佬相助!
https://github.com/SmallPond/SeedLabs/tree/master/sniffandspoof