seedlab实验Sniffing_Spoofing
一、实验目标
对数据包进行嗅探与伪造(本次实验代码在底部)
二、实验原理
Sniffing就是一种能将本地网卡状态设成‘混杂’状态的模式,当网卡处于这种“混杂”方式时,该网卡具备“广播地址”,它对遇到的每一个帧都产生一个硬件中断以便提醒操作系统处理流经该物理媒体上的每一个报文包。(绝大多数的网卡具备置成混杂模式的能力)
一般来说,sniffing和poofing会联合起来使用。当攻击者嗅探到关键信息时,通常会使用poofing技术来构造数据包来劫持会话或者去获取更多信息,通常会造成很大的危害。Poofing技术就是攻击者自己构造数据包的ip/tcp数据包帧头部数据来达到自己的目的。
本次实验就是基于以上原理,在linux下模拟整个过程。
三、实验步骤及运行结果
Task1.编写嗅探程序
1、深入理解并可以编写嗅探程序
Problem1:用自己的话描述库调用的顺序。
首先需要确定监听的端口,之后初始化pcap,告诉pcap我们要嗅探的设备。然后可以设置过滤条件,比如只收icmp包,再之后进入执行循环,每当它收到一个包之后,就可以进入我们设置的函数中进行处理。最后结束退出。
Problem2:为何需要root权限执行,没有root的话,哪里造成的出错。
因为讲网卡设为混杂模式需要root权限。没有root的话,pcap_open_live()函数的返回值是NULL,也就是没有获得设备的权限。
Problem3:打开和关闭混杂模式,演示二者的区别。
在一台主机上构造一个包,from 1.2.3.4 to 5.6.7.8,
在另外一台主机上运行嗅探程序,对于打开混杂模式的程序,可以捕获到,因为所有的包都会传入内核。而对于关闭混杂模式的程序,不会捕获。
对于第一个编写嗅探程序,可以通过程序写一个服务端和一个请求端,然后进行嗅探。
运行结果如下:
同时运行服务器和嗅探程序,当请求端向服务器发送请求后,程序显示got a packet。
2.1只抓取icmp包
把程序设成可以抓取所有的包,然后使用嗅探程序去嗅探。
当运行server/client的时候,运行嗅探程序:
说明无法获得udp包
然后,两台机器ping一下,再运行嗅探程序:
发现能抓到icmp包。
2.2捕获TCP数据包有一个目的端口范围从端口10 – 100
只需把过滤条件在2.1的基础上从’icmp’改为’ tcp and dst portrange 10-100’即可。
运行程序,打开seedlab网站,发现可以抓取80端口下的tcp包,而运行9090的server/client则没有包可以捕获不行。
Task2、包欺骗
在正常的情况下,当一个用户发送一个数据包时,操作系统通常不允许用户设
4
置所有的在协议头字段(如TCP,UDP,和IP报头)。操作系统将大部分的领域,而
只允许用户设置几个字段,如目标IP地址、目标端口号等。但是当用户有有root权限,他们可以在数据包标头设置为任意字段。这就是所谓的包欺骗,它可以通过原始套接字完成。
原始套接字给程序员的数据包结构的绝对控制,允许程序员构建任何任意的数据包,包括设置头字段和有效载荷。使用原始套接字是相当简单的,它包括四个步骤:(1)创建一个原始套接字,(2)设置套接字选项,(3)构建数据包,和(4)通过原始套接字发送数据包。有许多在线教程,可以教你如何使用原始套接字在C编程。我们已经把一些教程与实验室的网页联系起来了。请阅读它们,并学习如何写一个spoonfing程序包。我们展示了一个简单的的程序。
Problem4:能否随意设置ip报文的大小
很明显不能。
Problem5:使用raw socket编程时,是否一定要计算检验和。
需要。
Problem6: 为什么需要root权限才能运行使用原始套接字的程序?在哪里?如果没有根权限执行程序,程序会失败吗?
因为在发送数据包时需要使用网卡设备,如果没有root,程序没有权限使用设备
2.a:发送IP
运行完程序之后是这个结果,说明成功。
伪造udp
对于该任务,在一台主机上连接一个ip地址和端口,向该端口发送一个udp数据包,在另一台主机上提前运行伪造程序,结果如下:
发现该主机向2.9.5.6的9999端口发送包后,收到了伪造的包,并且在攻击主机上有来往记录。
Task3:综合使用
在这个任务中,你将嗅探和欺骗技术实现连接,并实现程序。你需要在同一局域网两虚拟机。从VMA ping 另一个VM的IP,这将产生一个ICMP回送请求报文。如果X是活着的,ping程序将收到一个回音答复,并打印出响应。你嗅探到数据包然后伪造程序运行在虚拟机B、监控网络数据包嗅探。每当它看到ICMP回送请求,不管目标IP地址是什么,你的程序应该立即发出回声应答数据包欺骗技术的使用。因此,考虑到机器X是否是活的,这个程序将总是收到一个回复,这表明X是活的。你要写这样一个程序,包括在你显示你的程序的工作报告screendumps。请在你的报告中附上代码。
本次实验从10.0.2.4ping到10.0.2.3,在10.0.2.1的主机上进行嗅探操作:
运行结果如下:
发现程序进行了对回复的包的伪造,并且收到目的主机的响应,证明它是活的。
四、代码
Task1、
1、server:
1 |
|
2、client:
1 |
|
嗅探程序:
1 |
|
2.1、Icmp:
1 |
|
2.2、tcp10-100:
1 |
|
Task2:
1 |
|
Task3:
1 |
|
- 本文作者: 李小混
- 本文链接: https://lixiaohun.github.io/post/3.html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!