前言
问题 | 回答 |
---|---|
这个作业属于那个课程 | 网络攻防实践 |
这个作业的要求在哪里 | 《网络攻防实践》第四周作业 |
1.知识点梳理总结与动手实践
网络嗅探
知识点梳理与总结
- 定义
网络嗅探利用计算机网络接口截获其他计算机数据报文,以监听数据流中包含的有效信息。由于捕获到的数据报文是经过封包处理的二进制数据,故还要结合网络协议分析技术。
- 原理
目前,有线局域网和无线局域网最流行的链路层协议为以太网和WIFi。以以太网上的嗅探技术为例进行讲解。以太网在部署局域网时分为共享式网络与交换式网络。共享式网络使用集线器连接;交互式网络使用交换机组件,数据通过交换机转发。
集线器的工作模式决定了同一集线器上连接的所有主机在发送数据包时,都会发往每一台主机,因此任一主机都能嗅探整个集线器上的全部网络流量。
交换机对每一个收到的数据帧根据映射表进行转发处理,发送至特定端口。这种方式可以减少网络被嗅探的风险。不过还是可以通过以下三种方式嗅探:1)MAc地址洪泛攻击 2)MAc地址欺骗 3)ARP欺骗
- 使用工具
类UNIX平台上最常用的包括libcap抓包开发库、tcpdump以及wireshark。Windows平台上有类UNIX平台上对应的移植版本,此外还有snifferPro等。
- 防范措施
1)采用安全的网络拓扑:对网络进行合理的分段,从而尽量使网络包只被转发到目标主机上。对网段分段越细,网络嗅探能够搜集到的信息就越少。
2)用静态ARP或MAC-端口映射表代替动态机制:通过在重要的主机或网关上设置静态的ARP对应表,以及在交换机上设置静态的MAc-端口映射表,能够防止利用MAc地址欺骗、ARP欺骗。
3)避免使用明文传输口令或敏感信息的网络协议:使用安全性强的网络协议进行替代。
动手实践:tcpdump
-
题目:使用tcpdump对在本机上访问www.tianya.cn时进行嗅探。在访问网站首页时,浏览器将访问多少个web服务器,IP地址是什么?
-
tcpdump命令格式介绍:
tcpdump [选项]表达式
选项中常用-i来指明监听的网卡,比如tcpdump -i eth0
即监听所有经过eth0的数据包,若不指明网卡,一般默认eth0。其他常用选项可以参考tcpdump官方文档,如果不想看英文的,这里还有好心人提供的翻译版本。
表达式中采用正则表达式的结构对监听信息进行过滤。其过滤规则可以按照需求随意搭配。
-
tcpdump常用选项介绍
- -n 禁止IP名称解析。
- -nn 禁止IP和端口名称解析。
- -i 指定捕获哪个网卡的网络数据包。
- -w 指定将包写入哪个文件,如果文件不存在则创建该文件;如果存在则覆盖其内容。
- -f 指定过滤表达式,例如指定捕获哪个端口,哪个协议等。
- -r 指定从哪个文件读取网络数据包文件。
- -F 指定使用哪个文件的过滤表达式抓包。
- -D 列出所有可以使用tcpdump抓包的网卡。
- -c 指定捕获或者读取包的个数,-c后面直接接数字即可。
- -l 抓包时保存到文件的同时查看包的内容。
- -t 不打印时间戳。
- -s 指定每个包捕获的字节数。
- -S 打印绝对的tcp序列号,而不是相对的序列号。
- -v/-vv/-vvv 打印详细信息,v的个数越多, 打印内容越详细。
-
解析
在开始写tcpdump命令前,我们首先应该明白浏览器访www.tianya.cn时都干了些什么。我将这个过程总结为4个协议。
1)ARP协议
首先浏览器要得到网关IP,然后在本地ARP表里查询该IP对应的MAC地址,如果没有缓存在表中,则发起ARP查询。即得到了网关的MAC地址。
2)DNS协议
其次我们需要得到www.tianya.cn对应的IP地址,(回想上次作业用nslookup查的那个),这里向DNS服务器发起查询。
3)TCP协议
接下来就该和www.tianya.cn的服务器建立连接,即TCP的三次握手。在此不赘述三次握手的原理,可以通过TCP三次握手和四次挥手通俗理解回顾。
4)HTTP协议
最后向web服务器提出请求,GET啊啥的。
从上述过程可以发现,要想知道浏览器访问了多少web服务器,关键在于TCP握手阶段,在这里我们可以抓取建立连接请求(“三次握手”的第一步)产生的数据包。
- 实践
使用命令如下,表示捕获所有由主机发出的,SYN位置1,ACK位置0的,发往80端口(HTTP)数据包。
tcpdump -n src 192.168.0.11 and tcp port 80 and "tcp[13] & 18 == 2"
其中TCP[13]即TCP包的第13字节(从第0字节开始计)内容,根据TCP包的头部数据格式,这一字节的内容包含了八个标志位,分别为保留位、保留位、URG、ACK、PSH、RST、SYN、FIN。由于18=00010010B,因此数字18表示ACK位和SYN位为1,将TCP包的第13字节内容同数字18相&的结果就得到了ACK位和SYN位的信息。如果结果为2说明数据包中ACK位为0而SYN位为1,即筛选得到的是所有SYN但非ACK包,正是建立连接请求(“三次握手”的第一步)产生的数据包。
成功得到访问的服务器的IP地址。现将得到的IP地址进行整理如下:
221.182.218.229海南省海口市 移动
221.182.218.151海南省海口市 移动
221.182.218.244海南省海口市 移动
221.182.218.238海南省海口市 移动
13.227.42.138美国
72.21.202.25美国弗吉尼亚阿什本 亚马逊云
使用nslookup来验证:
网络协议分析
知识点梳理与总结
- 原理
网络协议分析从底向上逐层解析网络协议,同时进行IP分片包以及TCP会话的重组,解析与保存各个网络层次上的所有包头字段信息,以及最高层的应用层数据。
数据包解包过程如下:
- 技术实现
在开源的软件如tcpdump、wireshark、snort中都有相应源码实现。
Snort网络协议分析处理过程如下:1)解析以太网数据帧 2)解析IP数据包 3)解析TCP数据包
动手实践:wireshark
-
题目:使用wireshark对在本机上以telnet方式登录BBS进行嗅探与协议分析。1)BBS服务器的IP地址与端口?2)telnet协议是如何向服务器传送你输入的用户名及登录口令?3)如何利用wireshark分析嗅探的数据包,并从中获取用户名及登录口令?
-
说明:由于没有找到合适的用telnet登录的BBS服务器,故自己用虚拟机Ubuntu搭建了telnet服务,操作较简单,在此不赘述,详情可参考ubuntu搭建telnet服务
虚拟机Ubuntu的IP地址为192.168.0.11,使用nmap工具进行端口扫描,开放的端口为23,即telnet的端口号。
在物理主机开启telnet服务(默认是禁止的)操作:【控制面板】-【程序】-【启用或关闭windows功能】,勾选telnet client:
在物理机终端输入命令telnet 192.168.0.11即可成功连接,输入用户名及密码之后即可成功登录。在进行telnet连接之前打开wireshark抓包。
打开wireshark查看刚刚连接过程中捕获的数据包,过滤器直接输入 telnet ,即可过滤显示telnet相关的数据包。
可以发现,物理机首先发送广播包,利用ARP协议获取目标机的MAC地址。接着进行TCP三次握手建立连接。
然后开始传递服务器信息,以下两张图可以看出分别传递了Ubuntu版本信息以及用户账户密码。
值得一提的是,这里传递用户名和密码时,是一个字符一个字符传递的。下面截取了传递zhang的过程,后续tuoning的截图就省了(太累了
此外还可以发现,传递密码时是用明文传输的,很容易被获取,安全性堪忧。(嗯你没看错我的密码就是123456
2.实践作业
攻防对抗实践
- 题目:攻击方用nmap扫描,防守方用tcpdump嗅探,用wireshark分析,并分析出攻击方的扫描目的以及每次使用的nmap命令。
防守方操作系统为winXP,故使用windump进行嗅探,发现了异常数据,故用wireshark捕获数据包。
值得注意的是,作为防守方,很有可能在分析数据包时,无法分辨两次扫描的分界线。此时可借助wireshark筛选条件icmp.type == 8来划分各次扫描的范围。因为nmap在发起端口扫描之前总是先通过Ping扫描和针对80端口的探测确定目标主机是否活跃,因此我们可以通过找出 ICMP Echo包的序号快速地划分。
先来看第一次扫描时防守方用wireshark捕获的数据包,发现在TCP三次握手的过程中,攻击机发送SYN包后,靶机回应了RST/ACK包,但在这之后攻击机没有再返回ACK进行确认,经查阅资料发现,此处应该是攻击机发送了一个RST包,但是是由操作系统内核自动完成的。故可以得出结论,这里只进行了半开扫描,也就是一个不完整的TCP三次握手。
再来看攻击机扫描的端口,涉及的目标端口包括了从 1 到 65535 的全部端口号。
故查阅nmap手册后可以推断第一次扫描的命令为nmap -sS -p 1-65535 192.168.200.4【其中-sS表示TCP SYN扫描 -p表示指定端口扫描
再来看第二次扫描,攻击主机发出的是没有设置任何标志位的TCP包,即Null包,对照nmap用户手册,可以确认是由-sN 选项所指定的 Null 扫描方式。
通过其之后的端口扫描,可以发现该次扫描的目标端口列表与/etc/services 中列出的基本一致,而nmap工具的-F 选项指定使用快速扫描模式,即只扫描 services 文件中所列出的端口,因此可以确认第二次扫描使用了-F 快速扫描模式。
找到第三次扫描的分界线,查看第二次扫描最后阶段的数据包(序号为135589至135670),发现攻击机针对 ssh、 TCP 和 UDP 的 1 端口,并使用了大量构造的标志位,以触发不同的响应包,并尝试从响应包中识别目标主机的操作系统信息。对照 nmap 对操作系统版本探测的实现机制,不难确认这些流量是由其-O 选项所触发的。
nmap 的-O 选项是用于通过 TCP/IP 协议栈"指纹"识别进行远程主机的操作系统探测,具体实现机制是通过构造一些特殊的数据包发送给目标主机,然后收集反馈包中存在的一些微妙"指纹"(不同操作系统网络协议栈实现上的差异),并与一个已知操作系统"指纹"数据库(nmap-os-fingerprints 文件)进行比较,从而识别目标主机的操作系统版本。
协议 端口 标志位
TCP ssh 22 SYN ECN
TCP ssh 22 NULL
TCP ssh 22 FIN SYN PSH URG
TCP ssh 22 ACK
TCP ssh 22 RST
TCP 1 SYN
TCP 1 ACK
TCP 1 FIN PSH URG
UDP 1
综合以上,第二次扫描的指令为nmap -sN -F -O 192.168.200.4。
取证分析实践
-
题目:分析由认为构造的到一台蜜罐主机的5次不同类型的端口扫描,用网络入侵检测器snort捕获每次扫描的流量并存入tcpdump格式二进制网络日志文件中,该文件已给出。回答下列问题。
1)攻击主机的IP地址是什么?
2)网络扫描的目标IP地址是什么?
3)本次案例使用了什么工具?你是如何确定的?
4)攻击者使用了哪种扫描方法?目标端口是什么,描述其工作原理。
5)蜜罐主机上哪些端口开放?
6)攻击机的操作系统是什么? -
172.31.4.178和172.31.4.188之间有大量的双向的网络数据包,因此可初步确定两者为攻击主机IP和目标主机IP。
从数据包内容看,所有的响应数据包(如TCP /RST包、 SYN/ACK包、 ICMP Echo Reply包等)均是从 172.31.4.188 发出, 可以确定172.31.4.188是被扫描的目标主机。而请求数据包(如 TCP SYN包、ICMP Echo包等)则是从172.31.4.178发起,可以确定172.31.4.178为攻击方。 -
使用Snort工具对记录文件进行入侵检测,确定攻击者使用的扫描工具。snort显示如下报警信息,可以确定扫描工具为nmap。
//进入root权限
apt-get install snort
update-rc.d snort disable
chmod 777 /etc/snort/snort.conf
snort -A console -q -u snort -c /etc/snort/snort.conf -r 你的路径/listen.pcap
- 在每次扫描之前,nmap会通过arp更新目标MAC地址。故可以通过过滤arp来确定扫描次数,易得攻击方一共进行了四次扫描。
-
由于第一次与第二次之间并没有数据包传输,故可以确定第一次扫描是采用namp -sP进行主机活跃探测。
nmap -sP 172.31.4.188
-
第二次扫描的分析与实践一攻防对抗中的第二次扫描同理。在最后阶段的数据包,发现攻击机针对 ssh、 TCP 和 UDP 的 1 端口,并使用了大量构造的标志位,以触发不同的响应包,并尝试从响应包中识别目标主机的操作系统信息。对照 nmap 对操作系统版本探测的实现机制,不难确认这些流量是由其-O 选项所触发的。
nmap -O 172.31.4.188
-
第三次扫描的分析与实践一攻防对抗中的第一次扫描同理。在TCP三次握手的过程中,攻击机发送SYN包后,靶机回应了RST/ACK包,但在这之后攻击机没有再返回ACK进行确认,经查阅资料发现,此处应该是攻击机发送了一个RST包,但是是由操作系统内核自动完成的。故可以得出结论,这里只进行了半开扫描,也就是一个不完整的TCP三次握手。对照 nmap 的使用手册,我们可以发现 nmap 的-sS 选项代表了选择 TCP SYN 扫描方式。再由第三次扫描的数据包总量达13万多,即扫描的端口为6万多,合理猜测是全端口扫描。
nmap -sS -p 1-65535 172.31.4.188
-
第四次扫描的时间很长,且不同于之前的半开扫描,而是建立了连接。如下图,通过139端口进入连接试图获得NetBIOS/SMB服务。合理推测攻击方在进行网络服务的探测。
nmap -sV 172.31.4.188
- 在wireshark的过滤器中输入命令
tcp.flags.syn == 1 and tcp.flags.ack == 1
查看端口开放情况。开放的端口有3306、139、23、80、25、22、53、21、445、5432、8009、8180、3632
- 利用工具p0f,这是一个操作系统识别工具。其利用被动指纹识别,在不干涉双方通信的情况下,通过嗅探的方式来分析流经某一网卡的流量以达到指纹识别的目的。安装 p0f:
sudo apt-get install p0f
确定攻击机的操作系统:p0f -r listen.pcap
攻击机操作系统为Linux 2.6.x。
3.学习中遇到的问题及解决
-
问题:我也是不懂为什么我的kali的IP地址被我搞没了,计算机真的是玄学。
-
解决:重新导入kali镜像。(重启解决一切
-
问题:虚拟机ubuntu中ens33没有ip
-
解决:使用如下两条命令即可
sudo dhclient ens33
sudo ifconfig ens33
4.学习感想和体会
本次作业主要涉及工具的使用以及协议的分析,对计算机网络的知识要求较高,也是一个很好的复习机会。正如王老师所说,希望我们学有收获,不只是会使用工具,更要对其中的原理了如指掌,才能如鱼得水。
参考资料
- 《网络攻防技术与实践》(诸葛建伟著)
- Snort入侵检测系统简介
- 关于connect: network is unreachable 问题的解决