1.0 概述

数据包嗅探和欺骗是网络安全中的两个重要概念;它们是网络通信中的两大威胁。能够理解这两种威胁对于理解网络中的安全措施至关重要。有很多包嗅探和欺骗工具,如Wireshark、Tcpdump、Netwox、Scapy等。其中一些工具被安全专家和攻击者广泛使用。能够使用这些工具对学生来说很重要,但是在网络安全课程中,对学生来说更重要的是理解这些工具是如何工作的,即,。数据包嗅探和欺骗是如何在软件中实现的。

本实验的目标是双重的:学习使用工具和理解这些工具背后的技术。对于第二个对象,学生将编写简单的嗅探器和欺骗程序,并深入了解这些程序的技术方面。本实验涵盖以下主题:

  • 嗅探和欺骗是如何工作的
  • 使用pcap库和Scapy进行数据包嗅探
  • 使用原始套接字和Scapy的数据包欺骗
  • 使用Scapy操作数据包

2.0 实验任务Set 1:使用工具嗅探和欺骗数据包

许多工具可以用来进行嗅探和欺骗,但是大多数工具只提供固定的功能。Scapy不同:它不仅可以用作工具,还可以作为构建其他嗅探和欺骗工具的构建块,即,。我们可以将Scapy功能集成到我们自己的程序中。在这组任务中,我们将对每个任务使用Scapy。当前版本的SEED虚拟机可能没有为Python3安装Scapy.我们可以使用以下命令为Pyhon3安装Scapy。

$sudo pip3 install scapy

要使用Scapy,我们可以编写一个Python程序,然后使用Python执行这个程序。请参见以下示例。我们应该使用root权限运行Python,因为欺骗数据包需要该权限。在程序的开始(第à行),我们应该导入所有Scapy的模块。

我们也可以进入Python的交互模式,然后在Python提示符下一次运行一行我们的程序。如果我们需要在实验中频繁更改代码,这将更加方便。

实验步骤: 

切换 到root权限,按照scapy

安装完毕:

使用Python交互:

2.1 task 1.1 嗅探数据包

Wireshark是最流行的嗅探工具,而且很容易使用。我们将在整个实验使用它。然而,很难使用Wireshark作为构建块来构建其他工具。为此,我们将使用Scapy。这项任务的目标是学习如何在Python程序中使用Scapy进行数据包嗅探。下面提供了一个示例代码:

#!/usr/bin/python3
from scapy.all import *
def print_pkt(pkt):
pkt.show()
pkt = sniff(filter=’icmp’,prn=print_pkt)

任务1.1A  上面的程序嗅探数据包。对于每个捕获的数据包,将调用回调函数print PKT();这个函数将打印出一些关于数据包的信息。以root权限运行该程序,并演示您确实可以捕获数据包。之后,再次运行程序,但不使用root权限;描述并解释你的观察结果。

// Make the program executable
$ chmod a+x sniffer.py
// Run the program with the root privilege
$ sudo ./sniffer.py
// Run the program without the root privilege
$ sniffer.py

实验步骤: 

创建sniffer.py文件:

提升权限,嗅探数据包:

打开另一个终端,查看ip,ping自己的地址:

嗅探数据包:

普通用户进行嗅探:报错、提示无权限

任务1.1B 通常,当我们嗅探数据包时,我们只对特定类型的数据包感兴趣。我们可以通过在嗅探中设置过滤器来做到这一点。scapy的过滤器使用BPF(柏克莱包过滤)语法;你可以在网上找到BPF手册。请设置以下过滤器,并再次演示您的嗅探器程序(每个过滤器应单独设置):

  • 仅捕获ICMP数据包
  • 捕获来自特定IP且目的端口号为23的任何TCP数据包。
  • 捕获来自或去往特定子网的数据包。您可以选择任何子网,如128 . 230 . 0 . 0/16;您不应该选择虚拟机所连接的子网。

实验步骤:

①仅捕获ICMP包

修改sniffer.py的代码:仅返回ICMP包

 

②捕获来自特定IP且目的端口号为23的任何TCP数据包

本机ip地址:10.0.2.15

设定一个ip地址:10.0.2.2

创建发送数据包的代码:datapak.py、并指定tcp端口是23

修改sniffer.py文件:

捕获两个数据包:

捕获来自或去往特定子网的数据包。您可以选择任何子网,如128 . 230 . 0 . 0/16;您不应该选择虚拟机所连接的子网

修改嗅探的过滤条件:

修改datapak.py文件:

嗅探结果如下:

2.2 task 1.2  欺骗ICMP数据包

作为数据包欺骗工具,Scapy允许我们将IP数据包的字段设置为任意值。此任务的目标是利用任意源IP地址欺骗IP数据包。我们将欺骗ICMP回应请求数据包,并将它们发送到同一网络上的另一个虚拟机。我们将使用Wireshark观察我们的请求是否会被接收者接受。如果它被接受,一个回应应答包将被发送到欺骗的IP地址。下面的代码显示了一个如何欺骗ICMP数据包的示例。

在上面的代码中,行①从IP类创建了一个IP对象;为每个IP报头字段定义了一个类属性。我们可以使用ls(a)或ls(IP)来查看所有的属性名称/值。我们也可以使用a.show()和IP.show()来做同样的事情。行②显示了如何设置目的IP地址字段。如果未设置字段,将使用默认值。

行③创建一个ICMP对象。默认类型是回应请求。在行④中,我们将a和b堆叠在一起,形成一个新对象。/ 运算符被IP类重载,因此不再代表除法;相反,这意味着添加b作为a的有效载荷字段,并相应地修改a的字段。结果,我们得到了一个表示ICMP数据包的新对象。现在,我们可以使用⑤中的send()发送此数据包。请对示例代码进行任何必要的更改,然后演示如何使用任意源IP地址欺骗ICMP回应请求数据包。

实验步骤:

安装wireshark:

sudo apt-get update
sudo apt-get install wireshark

此任务的伪造ip地址回应ICMP包,本机ip地址为10.0.2.15,我们伪造成10.0.2.2

创建发包程序sendFakePak.py:

启动wireshark:

sudo wireshark:(root权限下、报错忽略)

准备抓包:

运行发包程序:

抓包结果:

2.3 task 1.3 追踪路线

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

如果你是一个有经验的Python程序员,你可以编写你的工具来自动执行整个过程。如果您是Python编程新手,可以通过手动更改每一轮的TTL字段来完成,并根据您在Wireshark上的观察记录IP地址。任何一种方式都是可以接受的,只要你得到结果。

实验步骤:

模拟一个traceroute,循环每次TTL+1,中间节点都发回ICMP TTL字段过期的错误信息,目的节点发回ICMP reply就结束:

创建一个trace.py文件:

from scapy.all import *
import sysdef traceroute(target, minttl=1, maxttl=30, dport=80):print("target: %s(port=%s)" % (target, dport))ans, unans = sr(IP(dst=target, ttl=(minttl,maxttl),id=RandShort())/TCP(flags=0x2, dport=dport), timeout=10)for snd,rcv in ans:print(snd.ttl, rcv.src)if __name__ == '__main__':if len(sys.argv) <= 1:traceroute("baidu.com")else:traceroute(sys.argv[1])

2.4 task 1.4 嗅探和欺骗

在本任务中,您将结合嗅探和欺骗技术来实现以下嗅探和欺骗程序。同一局域网上需要两台虚拟机。从虚拟机A,您ping一个IP X。这将生成一个ICMP回应请求数据包。如果X还活着,ping程序会收到一个回应,并打印出响应。你的嗅探然后欺骗程序运行在虚拟机B上,它通过数据包嗅探来监控局域网。每当它看到一个ICMP回应请求时,不管目标IP地址是什么,您的程序都应该立即使用数据包欺骗技术发送一个回应回复。因此,不管机器X是否还活着,ping程序总会收到一个回复,表示X还活着。您需要使用Scapy来完成此任务。在你的报告中,你需要提供证据来证明你的技术是有效的。

实验步骤:

创建sniffer2.py

 

3.0 实验任务Set 2 :编写嗅探和欺骗数据包的程序

3.1  task2.1 编写数据包嗅探程序

使用pcap库可以很容易地编写嗅探器程序。有了pcap,嗅探器的任务就变成了调用pcap库中一系列简单的过程。在序列的末尾,数据包一旦被捕获,就会被放入缓冲区进行进一步处理。数据包捕获的所有细节都由pcap库处理。

SEED书籍《计算机安全:实践方法》在第12章提供了一个示例代码,展示了如何使用pcap编写一个简单的嗅探器程序。我们将示例代码包含在以下内容中(有关详细解释,请参见本书)

#include <pcap.h>
#include <stdio.h>
/* This function will be invoked by pcap for each captured packet.
We can process each packet inside the function.
*/
void got_packet(u_char *args, const struct pcap_pkthdr *header,
const u_char *packet)
{
printf("Got a packet\n");
}
int main()
{
pcap_t *handle;
char errbuf[PCAP_ERRBUF_SIZE];
struct bpf_program fp;
char filter_exp[] = "ip proto icmp";
bpf_u_int32 net;
// Step 1: Open live pcap session on NIC with name eth3
// Students needs to change "eth3" to the name
// found on their own machines (using ifconfig).
handle = pcap_open_live("eth3", BUFSIZ, 1, 1000, errbuf);
// Step 2: Compile filter_exp into BPF psuedo-code
pcap_compile(handle, &fp, filter_exp, 0, net);
pcap_setfilter(handle, &fp);
// Step 3: Capture packets
pcap_loop(handle, -1, got_packet, NULL);
pcap_close(handle); //Close the handle
return 0;
}
// Note: don’t forget to add "-lpcap" to the compilation command.
// For example: gcc -o sniff sniff.c -lpcap

Tim Carstens还写了一篇教程,介绍如何使用pcap库编写嗅探器程序。该教程可在http://www.tcpdump.org/pcap.htm.获得。

任务2.1A:了解嗅探器如何工作在这个任务中,学生需要编写一个嗅探器程序来打印出每个捕获数据包的源和目的IP地址。学生可以输入上述代码或从SEED图书的网站(https://www.handsonsecurity)下载示例代码。net/figurecode.html)。学生应提供截图作为证据,以表明他们的嗅探器程序可以成功运行并产生预期的结果。此外,请回答以下问题:

  • 问题1。请用你自己的话来描述对嗅探器程序至关重要的库调用的顺序。这是一个总结,而不是像教程或书中那样的详细解释。
  • 问题2。为什么运行嗅探器程序需要root权限?如果在没有根权限的情况下执行程序,程序会在哪里失败?
  • 问题3。请在你的嗅探器程序中打开和关闭混杂模式。你能演示一下这个模式开和关的区别吗?请描述你如何证明这一点。

任务2.1B:编写过滤器。请为您的嗅探器程序编写过滤器表达式,以捕获以下各项。您可以找到pcap过滤器的在线手册。在您的实验报告中,您需要包括截图,以显示应用这些过滤器后的结果。

  • 捕获两台特定主机之间的ICMP数据包。
  • 捕获目标端口号在10到100范围内的TCP数据包。

任务2.1C:嗅探密码。请说明当有人在您监控的网络上使用telnet时,您如何使用嗅探器程序来捕获密码。您可能需要修改您的嗅探器代码来打印出捕获的TCP数据包的数据部分(telnet使用TCP)。如果您打印出整个数据部分,然后手动标记密码(或部分密码)的位置,这是可以接受的。

3.2 task2.2 欺骗

当普通用户发送数据包时,操作系统通常不允许用户设置协议头中的所有字段(如TCP、UDP和IP头)。操作系统将设置大部分字段,而只允许用户设置几个字段,如目的IP地址、目的端口号等。但是,如果用户拥有root权限,他们可以在数据包报头中设置任意字段。这被称为数据包欺骗,可以通过原始套接字实现。

原始套接字赋予程序员对数据包构造的绝对控制权,允许程序员构造任意数据包,包括设置报头字段和有效载荷。使用原始套接字非常简单;它包括四个步骤:(1)创建一个原始套接字,(2)设置套接字选项,(3)构造数据包,以及(4)通过原始套接字发送数据包。有很多在线教程可以教你如何在C编程中使用原始套接字。我们已经将一些教程链接到了实验室的网页上。请阅读它们,并学习如何编写数据包欺骗程序。我们展示了这样一个程序的简单框架。

int sd;
struct sockaddr_in sin;
char buffer[1024]; // You can change the buffer size
/* Create a raw socket with IP protocol. The IPPROTO_RAW parameter
* tells the sytem that the IP header is already included;
* this prevents the OS from adding another IP header. */
sd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
if(sd < 0) {
perror("socket() error"); exit(-1);
}
/* This data structure is needed when sending the packets
* using sockets. Normally, we need to fill out several
* fields, but for raw sockets, we only need to fill out
* this one field */
sin.sin_family = AF_INET;
// Here you can construct the IP packet using buffer[]
// - construct the IP header ...
// - construct the TCP/UDP/ICMP header ...
// - fill in the data part if needed ...
// Note: you should pay attention to the network/host byte order.
/* Send out the IP packet.
* ip_len is the actual size of the packet. */
if(sendto(sd, buffer, ip_len, 0, (struct sockaddr *)&sin,
sizeof(sin)) < 0) {
perror("sendto() error"); exit(-1);
}

任务2.2A:编写一个欺骗程序。请用c语言编写自己的数据包欺骗程序。你需要提供证据(例如,。Wireshark数据包跟踪)来显示您的程序成功发送了假冒的IP数据包。

任务2.2B:欺骗ICMP回应请求。代表另一台机器欺骗ICMP回应请求数据包(即,。使用另一台机器的IP地址作为其源IP地址)。该数据包应该发送到互联网上的远程机器(该机器必须是活动的)。您应该打开您的Wireshark,这样如果您的欺骗成功了,您就可以看到从远程机器返回的回声回复。

问题。请回答以下问题。

  • 问题4。无论实际数据包有多大,您都可以将IP数据包长度字段设置为任意值吗?
  • 问题5。使用原始套接字编程,您必须计算IP报头的校验和吗?
  • 问题6。为什么需要root权限来运行使用原始套接字的程序?如果在没有根权限的情况下执行,程序会在哪里失败?

3.3 task2.3 嗅探然后欺骗

在本任务中,您将结合嗅探和欺骗技术来实现以下嗅探和欺骗程序。同一局域网上需要两台虚拟机。从虚拟机A,您ping一个IP X。这将生成一个ICMP回应请求数据包。如果X还活着,ping程序会收到一个回应,并打印出响应。你的嗅探然后欺骗程序运行在虚拟机B上,它通过数据包嗅探来监控局域网。每当它看到一个ICMP回应请求时,不管目标IP地址是什么,您的程序都应该立即使用数据包欺骗技术发送一个回应回复。因此,不管机器X是否还活着,ping程序总会收到一个回复,表示X还活着。你需要用C语言编写这样一个程序,并在你的报告中包含截图,以表明你的程序是有效的。也请在您的报告中附上代码(带有足够数量的注释)。

【科软课程-信息安全】Lab13 Packet Sniffing and Spoofing相关推荐

  1. 【科软课程-信息安全】Lab7 Format String Vulnerability Lab

    目录 1.0 概述 2.0 实验任务 2.1 task1 易受攻击程序 2.2 task2 理解堆栈的布局 2.3 task3崩溃程序 2.4 task4 打印出服务器程序的内存 2.5 task5 ...

  2. 【科软课程-信息安全】Lab12 SQL Injection Attack

    目录 1.0 概述 2.0 实验环境 3.0 实验任务 3.1 task1 熟悉SQL语句 3.2 task2 对SELECT语句的SQL注入攻击 3.3 task3 对UPDATE语句的SQL注入攻 ...

  3. Lab1 Packet Sniffing and Spoofing Lab

    @[TOC]Packet Sniffing and Spoofing Lab 实验网站连接link 1.准备工作 1.先在虚拟机上导入 SEED VM并完成相应的配置.配置可以参考:link 2.使用 ...

  4. 【SEED Labs 2.0】Packet Sniffing and Spoofing Lab

    本文为 SEED Labs 2.0 - Packet Sniffing and Spoofing Lab 的实验记录. 文章目录 实验原理 Lab Task Set 1: Using Scapy to ...

  5. Packet Sniffing and Spoofing Lab(报文嗅探欺骗SEED 实验)

    Packet Sniffing and Spoofing Lab 本次实验的目的有两点:学习使用报文嗅探&欺骗的工具.理解其背后的原理. 实验配置 本次实验使用处在同一局域网下的三台机器,使用 ...

  6. 【信息安全-科软课程】Lab2环境变量和Set-UID程序实验

    目录 1.0 前言 2.0 实验任务 2.1任务1:操纵环境变量 2.2任务2:将环境变量从父进程传递给子进程 2.3任务3:环境变量和execve() 2.4 任务4:环境变量和system() 2 ...

  7. 【科软课程NLP】自然语言处理复习

    目录 自然语言处理1(分词) 自然语言处理2(神经网络) 自然语言处理3(词向量) 自然语言处理4(循环神经网络) 自然语言处理5(seq2seq) 自然语言处理6(transformer) 自然语言 ...

  8. 【SeedLab】Packet Sniffing and Spoofing Lab

    实验环境 Lab Task Set 1: Using Scapy to Sniff and Spoof Packets 本节实验要求:借助Scapy库,实现网络流量的捕获与伪造. Task 1.1: ...

  9. 信息安全 SEED Lab10 Packet Sniffing and Spoofing Lab

    这个实验是关于数据包的嗅探与伪造 1. Task Set 1 这部分主要是利用工具来嗅探数据包,这里用的是 scapy. 可以用下面的命令进行安装. sudo pip3 install scapy 简 ...

最新文章

  1. 面试了一个32岁的大佬,明显感觉到他背过很多面试题…
  2. linux的iso镜像机没有redis,在Linux系统上安装Redis【避坑篇】
  3. 项目管理中的沟通管理(转)
  4. arm ida 伪代码 安卓 符号表_使用IDA动态调试及ARM指令学习笔记
  5. 7.3.8.1 - 并发多线程 死锁和递归锁 - 信号量
  6. JavaScript数组的声明及使用(1)
  7. asp.net Code学习二(使用vs 2015 update 3)
  8. yum 安装jenkins
  9. 线性调频信号与脉冲压缩
  10. 盘点2020年最好用的7款3D游戏建模软件
  11. 微信公众号网页授权流程
  12. FLUX-TMS-物流整体解决方案 附下载地址
  13. A. Arithmetic Array
  14. 记录下我磕磕碰碰的三个月找工作经历,好文推荐
  15. 应用于RFID医疗试剂防伪管理系统解决方案
  16. 使用Jsch执行Shell脚本
  17. HTML特殊转义字符 Javascript转义字符
  18. 计算机网络安全技术复习知识点总结
  19. 问大家 ArrayList 是按照输入顺序显示的么,如果不是,哪种集合可以实现
  20. 自动驾驶之行人轨迹预测数据集

热门文章

  1. python3 爬虫 爬取华为应用市场 APP应用评论(一)爬取全部评论——学霸君
  2. Java并发编程73道面试题及答案 —— 面试稳了 侵立删
  3. 在市场买一个小鸡都要20多块,为什么加工好的童子鸡才19块?
  4. C#彩色艺术化二维码样式设计(仅说思路)
  5. 并发编程(三)---共享模型之管程
  6. 对话旷视科技孙剑:iPhone X之外 人脸识别到底安不安全? | AI英雄
  7. Android SD系统启动卡制作
  8. 深圳物流 inurl php id=,免费快递在线下单接口对接文档-(PHP)
  9. 内网代理神奇Venom
  10. “神一般存在”的印度理工学院到底有多牛?