《网络攻防》第4周作业
20169310 2016-2017-2 《网络攻防实践》第4周学习总结
教材学习内容总结
本周主要学习了《网络攻防---技术与实践》第4章的内容,主要学习了网络嗅探与协议分析。
- 网络嗅探(sniff)
网络嗅探是利用计算机的网络接口截获目的地为其他计算机的数据报文,以监听数据流中所包含的的用户账户密码或私密信息等。其利用的工具称为 网络嗅探器(sniffer) ,嗅探器捕获的报文是经过封包处理后的二进制数据,因而还需要结合网络协议分析技术来解析嗅探到的网络数据。
网络嗅探具有 被动性 与 非干扰性 的特点,因而具有很强的 隐蔽性。
网络嗅探器按照不同的标准可分为 有线嗅探器 与 无线嗅探器、软件嗅探器 与 硬件嗅探器。
1.共享式网络与交换式网络中的嗅探: MAC地址泛洪攻击、MAC欺骗、ARP欺骗;
2.类UNIX平台的网络嗅探技实现技术:内核态的BPF 与 用户态的libpcap抓包工具库;
3.Windows平台的网络嗅探实现技术:内核态的NPF 与 用户态的Winpcap。
网络嗅探器软件:
1.类UNIX平台网络嗅探器软件:libpcap抓包开发库、tcpdump、wireshark 等;
2.Windows平台网络嗅探器软件:wireshark、SnifferPro 等。 - 网络协议分析
这是网络嗅探器进一步解析与理解捕获数据包必须的技术手段。
主要利用解包的原理,从底向上逐层解析网络协议,同时进行IP分片包以及TCP会话的重组。
分析的典型过程如下:
1.网络嗅探得到的是数据链路层传递的二进制数据包,大多数情况下是以太网数据帧;
2.对以太网数据帧进行结构分析;
3.进一步对IP数据包进行分析;
4.继续根据TCP或UDP的目标端口确定具体的应用层协议;
5.依据相应的应用层协议对数据进行整合恢复,得到实际传输的数据。
教材学习中的问题和解决过程
主要学习了网络嗅探器软件 tcpdump 与网络协议分析工具 Wireshark ,以下对学习过程中存在的问题进行总结。
1. tcpdump
tcpdump 工具使用起来很方便,其命令构成可简单表示成:
tcpdump [选项] 表达式
选项当中常用 -i
,用来指明监听的网卡,例如:
tcpdump -i eth0 //监视所有经过eth0网卡的数据包
在不指定网卡的情况下,默认第一个网卡,一般是eth0。
表达式采用正则表达式的结构,用来对监听到的信息进行过滤,例如监听本机(IP 192.168.37.130
)作为源主机向外发送的所有数据包:
tcpdump src 192.168.37.130 and tcp dst port 80
其过滤规则按照需求可随意搭配。
为方便理解,抓取本机与靶机(IP 192.168.37.220
)之间的通信,为了完整显示二者之间的通信过程,可以先将本机关于靶机的arp缓存删掉(如果之前二者没有进行过通信,则不需要这一步):
arp -d 192.168.37.220
为了更好的阅读,使用选项 -nn
,以 IP 及 Port Number 显示,而不用主机名与服务名称:
tcpdump -nn host 192.168.37.130 and 192.168.37.220
利用tcpdump抓取到的TCP数据包的信息一般是:
src > dst: flags data-seqno ack window urgent options
其中: src > dst:表明从源地址到目的地址;
flags:是TCP报文中的标志信息,S 是SYN标志(表示建立连接), F 是FIN标志(表示关闭连接), P 是PSH标志(表示有 DATA数据传输), R 是RST标志(表示连接重 置),“.” (没有标记);
data-seqno:是报文中的数据包的顺序号;
ack:是下次期望的顺序号;
window:是接收缓存的窗口大小;
urgent:表明报文中是否有紧急指针;
Options:是选项。
从以上抓取到的数据当中,我们可以做以下分析:
第1条是 ARP 报文请求,向本机询问 IP 192.168.37.220
的MAC地址。
第2条是 ARP 报文回复,告知 IP 192.168.37.220
的MAC地址是 00:0c:29:c9:19:41
。
第3条至第5条,是TCP协议的三次握手,在第3条中,我们可以看到本机的TCP端口是34480,它与靶机端口80之间建立TCP连接,本机发送SYN包,seq=2626420257;在第4条中,靶机收到SYN包后,确认该SYN包,应答 ack=2626420258(正好是上一条中的 seq+1),再发一个SYN包,seq=4051344195;在第5条中,本机收到靶机的ACK+SYN包后,向靶机发送一个确认包,确认包的ack=seq+1,此处却显示为1,原因是tcpdump对于一个tcp连接上的会话, 只打印会话两端的初始数据包的序列号,其后相应数据包只打印出与初始包序列号的差异,即初始序列号之后的序列号,可被看作此会话上当前所传数据片段在整个要传输的数据中的相对位置,可以添加参数 -S
,将tcp的序列号以绝对值形式输出,而不是相对值:
tcpdump -nn -S host 192.168.37.130 and 192.168.37.220
第6条表明本机向靶机发送了399字节的数据(字节的编号为1到400),包中设置了PSH标志。
第7条表明靶机已经收到了这399字节的数据,回复ack=400。
第8、9条表明两者间又传输了233字节的数据。
实践: 利用 tcpdump工具,在访问 www.tianya.cn
时,浏览器访问了哪些Web服务器?
在与Web服务器的访问过程中,总会建立TCP连接,可以抓取同时带有SYN包与ACK包的数据,其实也就是三次握手中的第二次。
tcpdump -nn '(tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack != 0) and (host 192.168.37.130)'
从上图可以看到在访问天涯社区时与主机建立TCP连接的服务器ip。通过:
tcpdump -nn host 192.168.37.130 and tcp port 80
可以查看数据包的详细信息。
2. Wireshark
我所用的 Wireshark工具,是Kali Rolling中自带的版本。
以浏览器访问百度页面为例,可以抓取到以下数据包:
前4条是DNS服务,找寻域名 www.baidu.com
所对应的IP地址,其中 192.168.37.2
是本机所设定的DNS地址,通过界面中部的协议树窗口可以得到更加详细的信息:
第1条:
表示本机在向DNS询问域名 www.baidu.com
在Internet上的IPV4地址。
第2条:
表示本机在向DNS询问域名的IPV6地址。
第3条:
表示DNS向本机回复,百度指向了另一个别名 www.a.shifen.com
,并给出了一个权威DNS服务器 ns1.a.shifen.com
.
第4条:
可以看到,域名 www.a.shifen.com
对应了2个IP地址,还给出了5个DNS服务器。至此,我们已经得到百度的IP地址了。
第5-7条表明开始建立TCP连接,表示TCP协议中的3次握手:
第5条:
表示本机在向百度服务器请求建立TCP连接(SYN),其中SYN序号为0。
第6条:
表示百度服务器在响应本机的连接请求,确认连接,发送SYN包与ACK包,SYN序号为0,ACK包序号为1。
第7条:
表示本机收到SYN+ACK包后,再次发送确认包,ACK包的序号为1。至此,二者的TCP连接已经建立。
第8-11条是双方在进行HTTP协议方面信息的交互。
实践: 利用 Wireshark工具,以telnet方式登录BBS进行嗅探分析。
为方便测试,以下 Wireshark工具是运行在Windows环境下的:
由于现在大多数论坛不再采用telnet进行登录,所以我选择在ubuntu虚拟机( IP 192.168.37.150
)当中搭建一个telnet服务,再实现telnet登录以用来嗅探分析(本机IP 192.168.37.200
)。
关于Ubuntu中配置telnet,引用 ubuntu 14.04中打开telnet服务步骤-Linux_ever 中的介绍:
1、首先查看telnet运行状态
#netstat -a | grep telnet
输出为空,表示没有开启该服务
2、安装openbsd-inetd
#apt-get install openbsd-inetd
如果已经安装过了,会提示已经安装过了,直接执行下面的步骤就可以了。
3、安装telnetd
#apt-get install telnetd
安装完之后,查看/etc/inetd.conf的内容会多了一行telnet stream tcp nowait telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd
#cat /etc/inetd.conf | grep telnet
输出: telnet stream tcp nowait telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd
4、重启openbsd-inetd
# /etc/init.d/openbsd-inetd restart
输出:* Restarting internet superserver inetd
5、查看telnet运行状态
#netstat -a | grep telnet
输出:tcp 0 0 *:telnet *:* LISTEN
此时表明已经开启了telnet服务。
6、telnet登陆测试
#telnet 127.0.0.1
输出:
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'. (停在这里的时候要按Ctrl+] 然后回车)
telnet> (表示登陆成功)
按照以上步骤,Ubuntu上的telnet服务就建成了:
使用以下命令,可以查看到telnet服务的端口默认为23:
在PC上打开DOS(前提pc与虚拟机可以ping通,且pc上的telnet服务已经开启),按以下方式就可进入:
连接之后,输入用户名及密码即可登陆成功:
在 Wireshark 当中,过滤器直接输入 telnet
,即可过滤显示telnet相关的数据包。
可看到,在最初连接时,先是利用ARP协议获取目标机的MAC地址,再进行TCP三次握手建立连接。后面就是传递服务器的信息,从以下两条就能看出来:
传递Ubuntu版本信息:
传递用户名输入信息:
然后输入登录用户名及密码,从抓取到的数据包可以发现用户名及密码都是一个字符一个字符传输的:
重要的是登录的密码是以明文形式传输的,所以可以很容易获取到密码:
综上,使用telnet方式登录时,通过抓包可以很容易得到用户名及密码,所以这种方式很不安全。
视频学习中的问题和解决过程
本周主要学习了视频 KaliSecurity 11-15 ,学习了Kali漏洞分析中的扫描工具、WEB爬行工具、WEB漏洞扫描工具。
问题1
在学习WEB漏洞扫描工具 Cadaver 与 davtest 时,我所用的靶机 Metasploitable 中没有搭建WebDAV服务环境,在网上查找相关资料后,解决步骤如下。
在靶机 Metasploitable 中,首先进入 /var/www
目录:
输入命令:
sudo a2enmod dav_fs
sudo a2enmod dav
启动WebDAV服务(前提是已经安装了 apache 服务)。
创建一个目录并授权给 apache 服务:
sudo mkdir /var/www/webdav
sudo chown www-data:www-data /var/www/webdav
创建一个存放密码的目录:
创建登录用户:
授权密码目录给 apache服务:
设置密码文件读写权限:
在使用靶机 Metasploitable 的过程中,由于是纯命令行,使用起来不是很方便,可采用 SSH Secure Shell工具,在PC机上远程登录虚拟机,方便使用,前提是虚拟机与PC机可以互相ping通,使用方法如下:
首先在靶机当中使用命令 sudo /etc/init.d/ssh start
将SSH服务打开:
然后再PC上打开SSH Secure Shell工具,将相应的靶机IP、用户名输入,连接即可:
接下来,继续配置WebDAV服务器,在 Apache2 配置文件当中写入相应配置,配置文件为 /etc/apache2/sites-enabled/000-default
,打开文件后,在 virtialhost
当中添加以下内容:
Alias /webdav "/var/www/webdav"
<Directory /var/www/webdav>
DAV On
AuthType Basic
AuthName "admin"
AuthUserFile /var/www/webdavpasswd/passwd.dav
Require valid-user
</Directory>
上述配置在利用 Cadaver
工具扫描时有个问题,靶机上的webDAV服务有登录密码,为了测试带有漏洞的服务,可以注释掉相应的配置,实际如下:
为了方便测试,在webdav目录下创建一个文件:
在Kali当中,打开浏览器,输入地址 http://192.168.37.220/webdav
,即可看到靶机webdav目录下的内容:
这样,靶机当中的WebDAV服务环境就搭建完成了,此时就可以使用 Cadaver 工具,对靶机的WebDAV进行扫描了:
也可以利用 DAVtest 工具对WebDAV服务器进行文件上传测试:
在靶机下可以查看到已上传的文件:
学习进度条
学习目标(本学期)
完成网络攻防课程的学习,完成各种攻防实践操作。
本周完成内容
学习了《网络攻防---技术与实践》第4章的内容,学习了KaliSecurity的11 - 15视频,着重学习了tcpdump、Wireshark工具的使用。