0


【网络攻防技术】实验九——嗅探与欺骗实验

文章目录

一、实验题目

包嗅探和欺骗是网络安全中的两个重要概念;它们是网络通信中的两大威胁。能够理解这两种威胁对于理解网络中的安全措施至关重要。有许多包嗅探和欺骗工具,如Wireshark、Tcpdump、Netwox等。其中一些工具被安全专家以及攻击者广泛使用。能够使用这些工具对学生来说很重要,但对于网络安全课程的学生来说,更重要的是了解这些工具是如何工作的,即包嗅探和欺骗是如何在软件中实现的。
本实验的目标是让学生掌握大多数嗅探和欺骗工具的基本技术。学生们将使用一些简单的嗅探和欺骗程序,阅读它们的源代码,修改它们,并最终对这些程序的技术方面有深入的了解。在本实验结束时,学生应该能够编写自己的嗅探和欺骗程序。

二、实验步骤及结果

Lab Task Set 1: Using Scapy to Sniff and Spoof Packet

这部分主要是利用工具来嗅探数据包,这里用的是 scapy
在这里插入图片描述

简单测试一下,构造了一个IP数据包并打印其的一些信息
在这里插入图片描述

Task 1.1A

下面是使用 scapy来嗅探数据包的一个例子
在这里插入图片描述

将下图id添加到上述py文件中
在这里插入图片描述

先使用 chmod a+x sniffer.py 添加执行权限,然后使用root权限运行上面的程序 sudo ./sniffer.py, 结果如下,可以看到其成功嗅探到了不同协议的数据包,图中只包括ICMP包。
在这里插入图片描述

Ping 10.9.0.5后嗅探到数据包,其中只包括ICMP包
在这里插入图片描述

然后使用普通权限运行该程序 ./sniffer.py。结果如下,可以看到报错了,提示无权限。
在这里插入图片描述

Task 1.1B

一般在嗅探包时我们只对特定类型的数据包感兴趣,所以我们需要对数据包进行一些过滤。scapy的过滤机制使用BPF的语法,这部分我们需要实现几个过滤的方法。
① 只捕捉ICMP数据包
上面的代码就是只捕捉icmp的数据包,略修改如下:
在这里插入图片描述

运行结果如下,可以看到捕获到了14个ICMP数据包:
在这里插入图片描述

② 只捕捉来自特定IP,且目标端口号为23的TCP数据包
查看自己的IP地址如下:
在这里插入图片描述

这里随意拿个IP来测试, 我们使用 10.9.0.8 , 嗅探代码如下:
在这里插入图片描述

发送数据包的代码如下:
在这里插入图片描述

运行嗅探的程序,再运行发送数据包的程序(可以多试几次), 结果如下:
在这里插入图片描述

③ 捕捉来自或发送到特定子网的数据包
这里我们使用的子网为128.230.0.0/16.嗅探代码如下:
在这里插入图片描述

发送包的代码如下:
在这里插入图片描述

嗅探结果如下,可以看到嗅探到了发送给子网128.230.0.0/16 和 该子网发送过来的数据包
在这里插入图片描述
在这里插入图片描述

Task 1.2

这部分主要是伪造任意的IP地址发IP包,这里我们用的是ICMP协议,使用的IP地址为 10.9.0.3,注意在task 1.1B2中,我们查看了自己的IP地址为10.9.0.1,也就是这里我们伪造成ip地址为 10.9.0.3 进行发包。
先启动wireshark,选择网卡,再运行发包的程序:
在这里插入图片描述

准备抓包:
在这里插入图片描述

发送的代码如下:
在这里插入图片描述

运行发包程序:
在这里插入图片描述

抓包结果:
在这里插入图片描述

Task1.3

此任务的目的是使用Scapy来估计虚拟机和选定目的地之间的路由器数量方面的距离。这基本上是由跟踪工具实现的。在这个任务中,我们将编写我们自己的工具。这个想法非常简单:只需发送一个数据包(任何类型)到目的地,首先将其实时时间(TTL)字段设置为1。这个数据包将被第一个路由器丢弃,该路由器将向我们发送一个ICMP错误消息,告诉我们它的运行时间已经超过。这就是我们如何得到第一个路由器的IP地址。然后,我们将TTL字段增加到2,发送另一个数据包,并获得第二个路由器的IP地址。我们将重复此过程,直到我们的数据包最终到达目的地。需要注意的是,这个实验只得到一个估计结果,因为理论上,不是所有这些包采取相同的路径(但在实际中,它们可能在短时间内)。下面的代码显示了这个过程中的一轮。
在这里插入图片描述

模拟一个traceroute,循环每次TTL+1,中间节点都发回ICMP TTL字段过期的错误信息,目的节点发回ICMP reply就结束:
创建一个trace.py文件:
在这里插入图片描述

运行效果如下, 可以看到打印除了不同TTL对应的IP
在这里插入图片描述

Task 1.4

在此任务中,您将结合嗅探和欺骗技术来实现以下嗅探和欺骗程序。您需要在同一局域网上的两台机器:虚拟机和用户容器。从用户容器中,您可以生成一个IPX。这将生成一个ICMP回波请求包。如果X被激活,ping程序将收到一个回波响应,并打印出响应。您的嗅探和欺骗程序运行在VM上,它通过数据包嗅探来监视局域网。每当它看到ICMP回波请求时,无论目标IP地址是什么,您的程序都应该立即使用数据包欺骗技术发送回波回复。因此,无论机器X是否活动,ping程序将始终收到回复,表明X激活。您需要使用Scapy来完成此任务。在您的报告中,您需要提供证据来证明您的技术有效的。在您的实验中,您应该从用户容器中获取以下三个IP地址。报告你的观察结果,并解释这些结果。
代码如下:
在这里插入图片描述

① ping 1.2.3.4
在这里插入图片描述
在这里插入图片描述

② ping 10.9.0.99
在这里插入图片描述

③ ping 8.8.8.8
在这里插入图片描述

Task Set 2:Writing Programs to Sniff and Spoof Packets

对于这个任务的设置,您应该在主机VM中编译C代码,然后在容器中运行该代码。您可以使用“dockercp”命令将文件从主机VM复制到容器中。

Task 2.1: Writing Packet Sniffing Program

这部分主要是写一个打印捕获的包的源IP和目的IP地址。
代码如下:
在这里插入图片描述

运行,并尝试ping baidu.com,可以看到发送的包出现在结果中:
在这里插入图片描述
在这里插入图片描述

  • Question 1. Please use your own words to describe the sequence of the library calls that are essential for sniffer programs. This is meant to be a summary, not detailed explanation like the one in the tutorial or book. Answer:主要就是第一步,启动pcap监听网卡,第二步就是编译BPF过滤器并设置过滤器,第三步就是设置嗅探的处理函数,最后关闭嗅探即可。
  • Question 2. Why do you need the root privilege to run a sniffer program? Where does the program fail if it is executed without the root privilege? Answer:嗅探数据包是一个高权限的操作,因为涉及到隐私,安全相关问题。如果普通用户也能嗅探数据包,那么他就能窃取别人的隐私,甚至盗取账号密码等等。
  • Question 3. Please turn on and turn off the promiscuous mode in your sniffer program. The value 1 of the third parameter in pcap open live() turns on the promiscuous mode (use 0 to turn it off). Can you demonstrate the difference when this mode is on and off? Please describe how you can demonstrate this. You can use the following command to check whether an interface’s promiscuous mode is on or off (look at the promiscuity’s value). Answer:使用混杂模式可以监听所在网段下其他机器的数据包,关闭则不能。
Task 2.1B: Writing Filters.

这部分主要是写一些过滤器。这部分还是复用 task 2.1A的代码,只是修改其中的过滤器而已
① 只捕捉两个特定主机之间的ICMP包
使用的过滤器为 icmp and src host 10.9.0.5 and dst host 10.9.0.1, 只捕捉从 10.9.0.5 发送到 10.9.0.1的ICMP包。结果如下,可以看到全是从 10.9.0.1 发送到 10.9.0.5的ICMP包,没有其他类型的包。
使用 attacker 和 host A 两个容器(10.9.0.1 和 10.9.0.5),
代码修改如下:
在这里插入图片描述

然后在 attacker 上运行,在 host A 上输入 ping 10.9.0.1,结果如图:
HostA:
在这里插入图片描述
在这里插入图片描述

Attacker:
在这里插入图片描述

② 捕捉目的端口在10到100之间的TCP包
过滤器条件改为:tcp and dst portrange 10-100:
在这里插入图片描述

只捕捉从 10.9.0.5 发送到 10.9.0.1的ICMP包。结果如下,可以看到全是从 10.9.0.5 发送到 10.9.0.1的ICMP包,没有其他类型的包。
HostA:
在这里插入图片描述

Attacker:
在这里插入图片描述

Task 2.1C: Sniffing Passwords.

这部分是用嗅探去捕捉telent协议中的密码。我们使用scapy会更方便一些。
代码如下:
在这里插入图片描述

然后 使用telnet 10.9.0.1,并输入账户密码远程登录。嗅探到的密码如下,其分成了几个包发送,如下:
在这里插入图片描述

所以输入的密码就是dees。获得telnet输入的用户名同理。

Task 2.2: Spoofing

Task 2.2A: Write a spoofing program.
这部分主要是伪造包。用到的一些代码文件如下:
myheader.h内容如下:
在这里插入图片描述

checksum.c内容如下:
在这里插入图片描述

spoof.c内容如下:
在这里插入图片描述

Task2.2A的代码如下:
这部分主要是伪造IP包。这里伪造是UDP包, 代码如下:
在这里插入图片描述

使用gcc -o task22a task22a.c spoof.c -lpcap编译,sudo ./task22A运行,后台使用wireshark进行抓包,可以看到我们伪造的UDP包:
在这里插入图片描述
在这里插入图片描述

Task 2.2B: Spoof an ICMP Echo Request.

这部分是伪造ICMP Echo请求。伪造的代码如下, 其中源IP10.0.2.5是局域网内另一个虚拟机的IP:
在这里插入图片描述

使用gcc -o task22B task22B.c spoof.c checksum.c -lpcap 进行编译, sudo ./task22B运行
在这里插入图片描述

查看后台的wireshark,如下:
在这里插入图片描述

可以看到我们发送的源IP为10.0.2.5, 目的IP为8.8.8.8的ICMP包,并且还有回复。

  • Question 4. Can you set the IP packet length field to an arbitrary value, regardless of how big the actual packet is? Answer:可以调大length,不能调小length。
  • Question 5. Using the raw socket programming, do you have to calculate the checksum for the IP header? Answer:不用计算IP头部的checksum,但是需要计算ICMP头部的checksum。
  • Question 6. Why do you need the root privilege to run the programs that use raw sockets? Where does the program fail if executed without the root privilege? Answer:因为能任意读取发送包意味着很大的安全风险,所以需要root权限。使用普通权限运行,返回的socket 描述符为-1,说明创建raw socket失败了。在这里插入图片描述

Task 2.3: Sniff and then Spoof

准备两个在同一个局域网的虚拟机,这部分主要是同时嗅探和伪造包,实现一个机器ping任意IP x,另一个机器伪造ICMP回复请求,使得其有回复,而IP x所对应的机器可能根本不存在。
使用Attacker和HostA完成:
代码如下:
在这里插入图片描述

首先编译文件:
在这里插入图片描述

然后在attacker中运行:
在这里插入图片描述

然后打开 Host A,ping 1.1.1.1,结果如下:
在这里插入图片描述

此时Attacker如下:
在这里插入图片描述

标签: 网络 web安全 安全

本文转载自: https://blog.csdn.net/qq_45755706/article/details/123215050
版权归原作者 whalien__52 所有, 如有侵权,请联系我们删除。

“【网络攻防技术】实验九——嗅探与欺骗实验”的评论:

还没有评论