文章目录

  • 背景
  • 要求
  • 实验过程
  • 工具
  • HTTP
  • FTP
  • SMTP
  • TELNET
  • 说明


背景

Sniffer,中文翻译为嗅探器,也叫抓包软件, Sniffer工具实际上就是一个网络上的抓包工具,同时还可以对抓到的包进行分析。由于在共享式的网络中,信息包是会广播到网络中所有主机的网络接口,只不过在没有使用sniffer工具之前,主机的网络设备会判断该信息包是否应该接收,这样它就会抛弃不应该接收的信息包,sniffer工具使用一种基于被动侦听原理的网络分析方式,能够使主机的网络设备接收所有到达的信息包,这样就达到了网络监听的效果。对于网络管理人员来说,使用嗅探器可以随时掌握网络的实际情况,在网络性能急剧下降的时候,通过sniffer工具来分析原因,找出造成网络阻塞的来源。对于网络程序员来说,通过sniffer工具来调试程序。
Tcpdump是Linux下非常优秀的sniffer命令行工具,在各大linux发行版中的软件仓库中都有提供,可以直接通过包管理器安装,比如fedora使用yum install tcpdump,debian使用apt install tcpdump安装,如果没有也可以使用源码安装。虽然叫tcpdump,但是它却不只可以嗅探TCP数据包,也可以抓取其他协议的数据包,比如UDP、ICMP、ARP等。对于使用命令行的人来说是非常合适的工具。
另一个著名的sniffer工具就是wireshark了,wireshark是目前功能最全面使用者最多的抓包工具,而且是开源软件,在unix、windows、Mac OS上都可以获取到,wireshark也有对应的命令行工具tshark。为了安全考虑,wireshark只能查看包,而不能修改包的内容,或者发送数据包。
另外,scapy是从python的一个模块独立出来的功能强大的交互式数据包处理程序,可用来发送、嗅探、解析和伪造网络数据包,常常被用到网络攻击和测试中。所以如果想要修改抓到的包可以使用这个工具。

要求

使用一种Sniffer工具(自选)进行网络监听,主要集中在HTTP、FTP、SMTP、TELNET协议方面,并分析监听结果。
为了减少分析的数据量,必须有效地设置过滤规则。
通过使用Sniffer软件来掌握Sniffer工具的使用方法,实现捕捉HTTP、FTP、SMTP、TELNET等协议的数据包,理解TCP/IP主要协议的数据结构、会话连接建立和终止的过程、TCP序列号应答号的变化规律。
通过实验了解HTTP、FTP、SMTP等协议明文传输的特性,以建立安全意识。

实验过程

工具

Wireshakr安装简单,和其他windows程序一样,下载exe安装包之后,一路下一步就可以了。

打开wireshark之后如下图所示,首先要选择一个网络适配器(网卡)进行捕获,因为笔记本电脑使用的wifi,所以只有WLAN显示有流量,那就只能监听这个网卡。

Storm sniffer可以抓取app信息吗_明文传输


选择之后如下图,可以看到正在捕获WLAN,以及窗口中显示抓到的数据包。

Storm sniffer可以抓取app信息吗_服务器_02


和其他的sniffer工具一样也是使用表达式对数据包进行过滤,点击下图中的表达式按钮可以看到所有的表达式元素。可以通过搜索关键字快速查找目标。

Storm sniffer可以抓取app信息吗_HTTP_03

Storm sniffer可以抓取app信息吗_TCP_04

HTTP

HTTP协议是超文本传输协议(Hyper Text Transfer Protocol)的缩写,是用于从web服务器传输信息到本地浏览器的传送协议。HTTP基于TCP/IP通信协议来传递数据。默认端口是80。

HTTP请求报文格式:

Storm sniffer可以抓取app信息吗_TCP_05


HTTP响应报文格式:

Storm sniffer可以抓取app信息吗_wireshark_06


要过滤出HTTP协议数据包,只需要在过滤条件处写上http即可。

Storm sniffer可以抓取app信息吗_HTTP_07


双击其中一个包就可以看到包内的具体内容,如下图:

Storm sniffer可以抓取app信息吗_HTTP_08


可以看到请求报文中只有请求行和首部,没有主体。

请求行中的方法是GET,url是GET之后的/sdm/242_…qlt=50,版本号是HTTP/1.1。

接着下面就是请求的首部。

Host:p0.qhimg.com表示服务器主机名是p0.qhimg.com。

User-Agent:Mozilla……说明了发起请求的浏览器是火狐浏览器,因为早期微软和网景公司的浏览器之争导致现在的浏览器分为几个阵营,开发者要根据浏览器不同的特性开发不同的代码,以便内容能够正确显示。所以请求中要指明浏览器的名称。

Accept:image/webp 说明了客户端要接收的媒体类型,为图像。

Accept-Language:en-US说明了客户端能够识别的语言,包括英文、汉字,q表示优先级。

Accept-Encoding:gzip客户能够接收的编码类型。

Referer:https://cn.bing.com先前网页的地址。

Connection:keep-alive 需要持久连接。

最后是一行空行\r\n

上面是请求报文,下面是该请求报文的响应。

Storm sniffer可以抓取app信息吗_wireshark_09


响应报文由三部分组成,第一部分状态行,有三部分:协议版本HTTP/1.1,状态码200,状态码描述OK,常见状态码如下:

Storm sniffer可以抓取app信息吗_TCP_10


接下来是首部:

Content-Length:9014响应内容长度9014

Connection:keep-alive 客户端与服务器之间通信是持久连接

Cache-Control:max-age=31536…说明了缓存大小是3153…


File Data:9014bytes指明文件数据大小9014字节。

接着就是报文的具体内容,即传送的真正内容,为明文消息,这里应该是图片的编码:

Storm sniffer可以抓取app信息吗_服务器_11

FTP

FTP文件传输协议。FTP使得主机间可以共享文件,用于控制Internet上文件的双向传输。和HTTP一样是一个客户机/服务器系统。用户通过一个支持FTP协议的客户端,连接到在远程主机上的FTP服务器。用户通过客户机程序向服务器发出命令,服务器执行用户所发出的命令,并将执行的结果返回到客户端。 当FTP客户端与服务器建立FTP连接时,将与服务器上的两个端口建立联系:端口20和21。FTP使用不同的端口号传输不同的内容,会建立不同的TCP连接。首先,使用 TCP 生成一个虚拟连接用于控制信息,然后再生成一个单独的 TCP 连接用于数据传输。

使用ftp or ftp-data表达式过滤ftp数据包。

Storm sniffer可以抓取app信息吗_HTTP_12


可以看到上图第二帧是请求报文并以ascii码方式明文传输数据,请求命令为USER,参数为anonymous,即一个匿名用户发起的请求,因为实验条件限制,使用的gnuftp服务器只允许匿名访问,但实际上ftp服务器是使用明文传输,所以如果条件允许可以嗅探到明文用户名和密码。然后下图是第三帧响应报文,响应码是230,表示登录因特网。

Storm sniffer可以抓取app信息吗_HTTP_13


接下来是ftp服务器返回的提示信息,也是明文传输。

Storm sniffer可以抓取app信息吗_服务器_14


然后是PORT命令,告诉 FTP 服务器客户端监听的端口号,让 FTP 服务器采用主动模式连接客户端。可以看到端口号是63442

Storm sniffer可以抓取app信息吗_TCP_15


接着是LIST命令,如下图,说明用户查看了ftp服务器目录,红框中的三帧说明用户使用RETR命令请求下载README文件。查看具体帧可以看到ftp为数据传输又开辟了一个TCP连接(用于数据连接ftp-data),服务器端口是20,常说的ftp21端口是ftp的控制连接

Storm sniffer可以抓取app信息吗_HTTP_16


然后通过追踪流,就可以看到传输的明文信息。

Storm sniffer可以抓取app信息吗_TCP_17


查看数据包内容如下:

Storm sniffer可以抓取app信息吗_明文传输_18


上面两图分别截取了开头和结尾部分,然后对比下图实际接收到的README文件,可以发现内容是相同的。

Storm sniffer可以抓取app信息吗_明文传输_19

SMTP

SMTP称为简单邮件传输协议(Simple Mail Transfer Protocal),目标是向用户提供高效、可靠的邮件传输。它的一个重要特点是它能够在传送中接力传送邮件,即邮件可以通过不同网络上的主机接力式传送。SMTP是一个请求/响应协议,它监听25号端口,用于接收用户的Mail请求,并与远端Mail服务器建立SMTP连接。

实验首先设置wireshark过滤规则为smtp,之后使用telnet登录网易的smtp.163.com服务器。如下:

Storm sniffer可以抓取app信息吗_TCP_20


首先发送EHLO命令查询服务器支持的扩充功能,然后使用AUTH LOGIN请求认证,服务器会发回响应334 dxNlcm5hbWU6(经过BASE64编码了的"Password:"=),输入经过BASE64编码了的用户名zevsee@163.com(我的网易邮箱,BASE64编码为emV2c2VlQDE2My5jb20=),回车之后提示继续输入密码334 UGFzc3dvcmQ6(经过BASE64编码了的"Password:"=),输入密码之后显示登录成功然后就是使用MAIL命令发送邮件了。

Storm sniffer可以抓取app信息吗_HTTP_21


然后查看wireshark抓取到的数据包如下:

Storm sniffer可以抓取app信息吗_明文传输_22


上图是一次完整的smtp通信过程,可以看到我们每一步发送的SMTP数据包都被抓取到了,而且是明文传输的。

用户名:(明文的BASE64)

Storm sniffer可以抓取app信息吗_HTTP_23


密码:(密码也是明文的,因为涉及到敏感信息所以作了处理)

Storm sniffer可以抓取app信息吗_服务器_24


收发人:

Storm sniffer可以抓取app信息吗_TCP_25


邮件内容:

Storm sniffer可以抓取app信息吗_明文传输_26


上面右图中的粉红色部分是我写在邮件中的内容,对比可以看到是相同的。

TELNET

Telnet协议是TCP/IP协议族中应用最广泛的协议,是Internet远程登陆服务的标准协议和主要方式,为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器,在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样,在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法,但是Telnet使用明文传输,这导致其安全性不高,因此目前通常使用 SSH代替Telnet进行远程管理,SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。SSH基于成熟的公钥加密体系,把所有传输的数据进行加密,保证数据在传输时不被恶意破坏、泄露和篡改。

在上面的SMTP实验中使用了TELNET协议,从wireshark的捕获结果中已经可以看出telnet使用明文传输的特性了,下面分析使用telnet远程登录的情景。

首先使用telnet登录远程主机,远程主机上要开启telnet服务,这里我使用虚拟机作为远程主机。操作如下:

命令为telnet IP PORT,192.168.8.130是我的虚拟机地址,系统是ubuntu14.04,默认是不开启root用户的,所以使用普通用户void登录,密码是123456。可以看到成功登录,并且能够执行ls命令查看文件。

Storm sniffer可以抓取app信息吗_明文传输_27


下面是wireshark在我登录的时候抓取的telnet数据包。过滤规则是telnet

Storm sniffer可以抓取app信息吗_TCP_28


通过使用追踪流,可以看到整个通信过程中的数据如下图所示:

Storm sniffer可以抓取app信息吗_TCP_29


上图中,粉色部分是客户端(我)输入的信息,浅蓝色是服务器返回的响应。可以看到红色框的部分有我输入的明文的用户名void和密码123456,最后是输入的命令ls。

Storm sniffer可以抓取app信息吗_TCP_30

说明

课程作业,仅作记录。