@[TOC]Packet Sniffing and Spoofing Lab
实验网站连接link
1.准备工作
1.先在虚拟机上导入 SEED VM并完成相应的配置。配置可以参考:link
2.使用准备好的docker-compose.yml去配置虚拟机环境
2.1先把docker-compose.yml放到虚拟机的某个文件夹下。
2.2 然后再文件所在的目录下输入命令运行 docker-compose up -d就能直接配置并在后台运行。
2 Lab Task Set 1: Using Scapy to Sniff and Spoof Packets
2.1 Task 1.1: Sniffing Packets
Task 1.1A
1.编写python代码进行嗅探数据包。
2.找到自己的interface。
3.给sniffer文件赋予权限,并以管理员身份运行文件。在运行时要再启动一个终端进行ping10.9.0.5,来获取10.9.0.5发来的icmp报文。
4.使用seed用户去运行sniffer
说明普通用户没有权限去运行sniffer。
Task 1.1B
1.只捕获ICMP包。
2.只捕捉来自特定IP,且目标端口号为23的TCP数据包
3.捕捉来自或发送到特定子网的数据包,这里我们使用的子网为128.230.0.0/16。
Task 1.2 欺骗ICMP数据包
作为数据包欺骗工具,Scapy允许我们将IP数据包的字段设置为任意值。此任务的目标是利用任意源IP地址欺骗IP数据包。我们将欺骗ICMP回应请求数据包,并将它们发送到同一网络上的另一个虚拟机。我们将使用Wireshark观察我们的请求是否会被接收者接受。如果它被接受,一个回应应答包将被发送到欺骗的IP地址。
1.启动wireshark
2.创建抓包程序,并用wireshark进行查看。
Task1.3追踪路线
1.此任务的目的是使用Scapy来估计虚拟机和选定目的地之间的路由器数量方面的距离。这基本上是由跟踪工具实现的。在这个任务中,我们将编写我们自己的工具。这个想法非常简单:只需发送一个数据包(任何类型)到目的地,首先将其实时时间(TTL)字段设置为1。这个数据包将被第一个路由器丢弃,该路由器将向我们发送一个ICMP错误消息,告诉我们它的运行时间已经超过。这就是我们如何得到第一个路由器的IP地址。然后,我们将TTL字段增加到2,发送另一个数据包,并获得第二个路由器的IP地址。我们将重复此过程,直到我们的数据包最终到达目的地。需要注意的是,这个实验只得到一个估计结果,因为理论上,不是所有这些包采取相同的路径(但在实际中,它们可能在短时间内)。
2.编写追踪文件。
3.打印结果。
Task1.4 嗅探和欺骗
在此任务中,您将结合嗅探和欺骗技术来实现以下嗅探和欺骗程序。您需要在同一局域网上的两台机器:虚拟机和用户容器 。从用户容器中,您可以生成一个IPX。这将生成一个ICMP回波请求包。如果X被激活,ping程序将收到一个回波响应,并打印出响应。您的嗅探和欺骗程序运行在VM上,它通过数据包嗅探来监视局域网。每当它看到ICMP回波请求时,无论目标IP地址是什么,您的程序都应该立即使用数据包欺骗技术发送回波回复。因此,无论机器X是否活动,ping程序将始终收到回复,表明X激活。您需要使用Scapy来完成此任务。在您的报告中,您需要提供证据来证明您的技术有效的。在您的实验中,您应该从用户容器中获取以下三个IP地址。报告你的观察结果,并解释这些结果。
1.首先需要启动用户容器,需要使用到Docker exec 命令。
2.编写代码。
3.测试结果
3 Lab Task Set 2: Writing Programs to Sniff and Spoof Packets
3.1 Task 2.1: Writing Packet Sniffing Program
Task 2.1A: Understanding How a Sniffer Works
这部分主要是写一个打印捕获的包的源IP和目的IP地址。
1.编写代码。
#include <pcap.h>
#include <stdio.h>
#include <arpa/inet.h>
/* IP Header */
struct ipheader {
unsigned char iph_ihl:4, //IP header length
iph_ver:4; //IP version
unsigned char iph_tos; //Type of service
unsigned short int iph_len; //IP Packet length (data + header)
unsigned short int iph_ident; //Identification
unsigned short int iph_flag:3, //Fragmentation flags
iph_offset:13; //Flags offset
unsigned char iph_ttl; //Time to Live
unsigned char iph_protocol; //Protocol type
unsigned short int iph_chksum; //IP datagram checksum
struct in_addr iph_sourceip; //Source IP address
struct in_addr iph_destip; //Destination IP address
};
struct ethheader {
u_char ether_dhost[6]; /* destination host address */
u_char ether_shost[6]; /* source host address */
u_short ether_type; /* IP? ARP? RARP? etc */
};
void got_packet(u_char *args, const struct pcap_pkthdr *header,
const u_char *packet)
{
struct ethheader *eth = (struct ethheader *)packet;
if (ntohs(eth->ether_type) == 0x0800) { // 0x0800 is IP type
struct ipheader * ip = (struct ipheader *)
(packet + sizeof(struct ethheader));
printf(" From: %s\n", inet_ntoa(ip->iph_sourceip));
printf(" To: %s\n", inet_ntoa(ip->iph_destip));
/* determine protocol */
switch(ip->iph_protocol) {
case IPPROTO_TCP:
printf(" Protocol: TCP\n");
return;
case IPPROTO_UDP:
printf(" Protocol: UDP\n");
return;
case IPPROTO_ICMP:
printf(" Protocol: ICMP\n");
return;
default:
printf(" Protocol: others\n");
return;
}
}
}
int main()
{
pcap_t *handle;
char errbuf[PCAP_ERRBUF_SIZE];
struct bpf_program fp;
char filter_exp[] = "icmp";
bpf_u_int32 net;
handle = pcap_open_live("enp0s3", BUFSIZ, 1, 1000, errbuf);
// Step 2: Compile filter_exp into BPF psuedo-code
pcap_compile(handle, &fp, filter_exp, 0, net);
if (pcap_setfilter(handle, &fp) !=0) {
pcap_perror(handle, "Error:");
}
// Step 3: Capture packets
pcap_loop(handle, -1, got_packet, NULL);
pcap_close(handle); //Close the handle
return 0;
}
2.测试运行结果。
运行c程序的命令要注意一下(
)
Question1:描述在sniff程序中的调用序列。
主要就是第一步,启动pcap监听网卡,第二步就是编译BPF过滤器并设置过滤器,第三步就是设置嗅探的处理函数,最后关闭嗅探即可。
Quesion2: 嗅探过程为什么需要root权限?没有root的话哪里出错?
嗅探数据包是一个高权限的操作,因为涉及到隐私,安全相关问题。如果普通用户也能嗅探数据包,那么他就能窃取别人的隐私,甚至盗取账号密码等等。
Question3: 打开嗅探程序的混杂模式,打开和关闭这个模式的区别是什么?
使用混杂模式可以监听所在网段下其他机器的数据包,关闭则不能。
Task 2.1B: Writing Filters
这部分主要是写一些过滤器。这部分还是复用 task 2.1A的代码,只是修改其中的过滤器而已
1.只捕捉两个特定主机之间的ICMP包
使用的过滤器为 icmp and src host 10.9.0.6 and dst host 10.9.0.1, 只捕捉从 10.9.0.6 发送到 10.9.0.1的ICMP包。结果如下,可以看到全是从 10.9.0.6 发送到 10.9.0.1的ICMP包,没有其他类型的包。
使用 attacker 和 host B两个容器(10.9.0.1 和 10.9.0.6)。
2.捕捉目的端口在10到100之间的TCP包
过滤器条件改为:tcp and dst portrange 10-100。
Task 2.1C: Sniffing Passwords.
这部分是用嗅探去捕捉telent协议中的密码。
我们最后可以得到密码为dees。同时用这种方法也可以得到用户名。文章来源:https://www.toymoban.com/news/detail-732394.html
Task 2.2A: Write a spoofing program.
文章来源地址https://www.toymoban.com/news/detail-732394.html
到了这里,关于Lab1 Packet Sniffing and Spoofing Lab的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!