Nmap扫描器使用和分析.docx
《Nmap扫描器使用和分析.docx》由会员分享,可在线阅读,更多相关《Nmap扫描器使用和分析.docx(59页珍藏版)》请在冰豆网上搜索。
Nmap扫描器使用和分析
华中科技大学计算机学院
《计算机网络安全》实验报告
实验名称Nmap扫描器使用和分析
团队成员:
姓名
班级
学号
贡献百分比
得分
王凤伟
IS0703
U200714945
100%
注:
团队成员贡献百分比之和为1
Email:
visual_110@
教师评语:
一.环境(详细说明运行的操作系统,网络平台,机器的IP地址)
操作系统:
MicrosoftWindowsXPProfessionalServicePackage3。
网络平台:
TCP/IP网络
机器IP:
211.69.207.74
Nmap版本:
5.21
二.实验目的
●掌握主机、端口扫描的原理
●掌握Nmap扫描器的使用
●掌握Nmap进行远程OS检测的原理
三.实验步骤及结果(包括主要流程和说明)
1.安装Nmap
a)安装界面
单击“IAgree”
b)选择组件
默认安装,单击“Next”
c)进入安装
单击“Install”
后面一路默认设置,最后安装成功。
2.利用Nmap扫描
d)-sS(TCPSYNscan)参数扫描如图2-1所示
图2-1-sS扫描211.69.207.72
从扫描结果可以看出211.69.207.72开通了11个端口,而且这些端口都是tcp端口,因为syn扫描是基于tcp的。
e)-sT(TCPconnectscan)参数扫描211.69.207.72如图2-2
图2-2-sT扫描211.69.207.72
从中可以看出,-sT扫描比-sS扫描多扫出了一个21号端口,对此我用wireshark截了一些包,发现21号端口只回应了一个rst|ack包,而其余的端口回应了至少三个rst|ack或reset之类的包,因此我判断有可能-sS与-sT判断端口打开的标准不同,-sT对回复一个rst|syn包就认为对方的端口是开着的,而-sS要对方回复多个rst|syn才认为对方的端口是开放的。
f)-sU(UDPscans)参数扫描如图2-3
图2-3–sU参数扫描202.114.0.242
由于-sU扫描的是UDP端口,而且扫描的目标ip为学校的DNS服务器,因此一定能扫描到对方的53号端口。
g)-sY(SCTPINITscan)扫描如图2-4
图2-4–sY参数扫描211.69.207.72
由于流控制传输协议(SCTP)是IETF新定义的一个传输层transportlayer协议(2000)所以到目前支持的不是很好,所以什么都没有扫描出来。
h)-sN;-sF;-sX(TCPNULL,FIN,andXmasscans)
-sN参数扫描如图2-5-a所示
图2-5-a–sN参数扫描211.69.207.72
由于对方是windows系列的操作系统所以检测到端口都是关闭的,但用syn扫描却发现对方11个tcp端口。
下面我们扫描一个不是windows系列的操作系统,-sF参数扫描如图2-5-b所示
图2-5-b–sF参数扫描
对方的主机是IBMAIX5.3-6.1,所以像443/tcp等关闭的端口操作系统会返回一个rst|ack,可以被nmap侦测到。
其它的966都是open或者filtered。
-sX参数扫描如图2-5-c所示
图2-5-c–sX参数扫描
这里的扫描结果与-sF的扫描结果一致,原理也基本一致,这里就不再解释了。
i)-sA(TCPackscan)参数扫描如图2-6
图2-6–sA参数扫描211.69.207.27
由于对方对每个ack报文都回复了rst,所以nmap判断所有的端口都没有过滤。
j)–sW(TCPwindowscan)参数扫描如图2-7
图2-7–sW参数扫描211.69.207.72
由于对方的所有回复报文均为rst故nmap判断对方所有端口关闭。
k)–sM(TCPMaimonscan)参数扫描如图2-8
图2-8–sM参数扫描211.69.207.72
-sM扫描实际是将sck和fin置位,对方以rst应答,nmap判断对方的所有端口都是开放或者被过滤的。
l)–sO(IPprotocolscan)参数扫描如图2-9
图2-9–sO参数扫描211.69.207.72
-sO扫描了IP协议相关的配置,如对方开放了ICMP协议、tcp协议以及UDP协议,而igmp、ip、ipv6、esp以及ah协议被检测为open|filtered。
m)–scanflags(CustomTCPscan)参数扫描如图2-10
图2-10–scanflags2参数扫描211.69.207.72
-scanflags2其实就是syn扫描机-sS所以扫描的结果与-sS(图2-1)应该基本相同。
3.深入了解NmapOS指纹库的结构和含义
n)利用-O参数扫描211.69.207.72如图3-1-A和3-1-B
图3-A-1–O参数扫描211.69.207.72第一屏
图3-B-2–O参数扫描211.69.207.72第二屏
由于使用了-d参数,所以nmap会打印出匹配的指纹信息,下面我们就讨论一下,这些指纹信息是如何计算出来的,以及nmap是如何通过指纹库判断操作系统的。
o)Scan行
此行反映了扫描的环境信息,如V=5.21说明nmap的版本是5.21,P=i686-pc-windows-windows说明扫描者的平台是i686,操作系统是windows系列的。
还有一些选项,不知道其具体是什么意思,但这对判断操作系统应该影响不大,所以就没有深入研究。
p)SEQ行
首先,我们看看nmap-os-db中对应于FingerprintMicrosoftWindowsXPSP2,的SEQ行:
SEQ(SP=FA-108%GCD=1-6%ISR=106-110%TI=I%II=I%SS=S%TS=0)。
下面我们先计算GCD:
由nmap的官方文档
http:
//nmap.org/book/osdetect-methods.html#osdetect-gcd可知,GCD是由Packet#1-Packet#6这六个报文的响应报文推到而来的,下面我们找到这些报文,我们首先找到Packet#1,可以通过如下的过滤参数得到:
ip.addr==211.69.207.234&&tcp.options.wscale_val==10&&tcp.window_size==1,结果如图3-C-1:
图3-C-1Packet#1报文
由图3-C-1可知Packet#1报文的序号为2054,那么我们就可以通过此序号找到其它的五个报文,如图3-C-2:
图3-C-2Packet#X以及它们的响应报文
下面我们计算各个响应报文之间的差值,以及差值的最大公约数。
我们用数组diff1保存各个差值,并只给出计算diff1[0]的详细过程,以及相关数据包的截图。
第一个响应报文为2055号报文,报文内容如图3-C-3:
图3-C-32055号报文wireshark截图
wireshark用相对值反映tcp的ISN,我们必须用实际的ISN,那么ISN=0X54f7491f。
第二个响应报文为2057号报文,报文的内容如图3-C-4:
图3-C-42057号报文的wireshark截图
ISN=0Xee7f5d13,所以diff1[0]=0Xee7f5d13-0X54f7491f=0X998813F4
由于响应报文的ISN依次为:
0X54f7491f、0Xee7f5d13、0X34447a3c、0Xf9b8bea0、0Xc0c45029、0X7f375ad7
同理可得(具体报文请参考os_detect.pcap文件):
diff1[0]=0Xee7f5d13-0X54f7491f=0X998813F4(已得到)
Diff2[1]=0X34447a3c-0Xee7f5d13+0Xffffffff=0X45C51D28
Diff3[2]=0Xf9b8bea0-0X34447a3c=0XC5744464
Diff4[3]=0Xf9b8bea0-0Xc0c45029=0X38F46E77
Diff5[4]=0Xc0c45029-0X7f375ad7=0X418CF552
由此可得:
GCD=(0X998813F4,0X45C51D28,0XC5744464,0X38F46E77,0X418CF552)=1,也就是GCD在1和6之间。
与nmap的打印结果不同。
下面计算ISR:
我们用数组seq_rates表示各个响应报文之间的初始序列号增长率,那么通过图3-C-2和diff1数组可以计算seq_rates:
Seq_rates[0]=0X998813F4/(4.965939-4.856578)=23553479320.78
Seq_rates[1]=0X45C51D28/(5.075279-4.965939)=10705560270.72
Seq_rates[2]=0XC5744464/(5.184631-5.075279)=30294198880.68
Seq_rates[3]=0X38F46E77/(5.294036-5.184631)=8733998985.42
Seq_rates[4]=0X418CF552/(5.403459-5.294036)=10050509326.19
AVG(seq_rates)=(23553479320.78+10705560270.72+30294198880.68+8733998985.42+8733998985.42+10050509326.19)/5=16667549356.758
ISR=8*log16667549356.758=0X10F,但不知为什么与nmap打印的0X106有一定的偏差。
说明:
log的底默认为2
下面计算SP:
SP=8*logStandardDivision(seq_rates)=8*log9687277259.89=0X109,但nmap打印的0X105,计算的结果还是与nmap的有些偏差。
下面计算TI:
探测SEQ响应报文(图3-C-2中有响应的序列号)的IP_ID分别为:
16538、16541、16542、16543、16544、16545,显然,IP_ID的增量小于10,所以TI=I,与nmap的打印结果一致。
下面计算CI:
由于CI要由T5、T6、T7的响应报文计算出来,下面我们就找到T2-T7,在wireshark中输入过滤参数:
ip.addr==211.69.207.234&&tcp.options.mss_val==265
得到过滤结果如图3-C-5
图3-C-5找到T2报文
由图3-C-5可知T2的报文序列号为2074,下面我们可以找到T2-T7如图3-C-6所示
图3-C-6T2-T7以及它们的响应报文
下面我们看看T5、T6、T7的响应报文的IP_ID,请看图3-C-7、图3-C-8和图3-C-9,
图3-C-7T5的响应报文
图3-C-8T6的响应报文
图3-C-9T7的响应报文
从以上3个图可以看出,T5、T6、T7响应报文的IP_ID分别为:
16553、16554、16555,显然它们的差值小于10所以CI=I,这与nmap的打印结果一致。
下面计算II:
由于II需要IE探测包的响应报文,那么我们就先找到两个IE探测包,使用如下wireshark过滤参数:
ip.addr==211.69.207.234&&icmp
得到如图3-C-10的结果
图3-C-10IE探测包及其响应报文
下面我们得到两个IE探测包响应报文的截图,如图3-C-11和图3-C-12
图3-C-11第一个IE探测包响应报文
图3-C-12第二个IE探测包响应报文
由以上两个图可以看出IP_ID分别为,16546、16547,所以它们的差值为1,小于10,所以II=I,这与nmap的打印结果一致。
下面计算SS:
探测SEQ响应报文(图3-C-2中有响应的序列号)的IP_ID分别为:
16538、16541、16542、16543、16544、16545,那么有:
Agv=(16545-16538)/(6-1)=1.4;
又由于第一个icmp响应报文IP_ID为16546,所以16546<16545+3*1.4,所以SS=S,这与nmap的打印结果一致。
其实,这个结果根本不用算,因为icmp的IP_ID为16546,最后一个tcp的IP_ID为16545,这正好是连续的。
下面计算TS:
我们先看看Packet#1的响应报文,如图3-C-13
图3-C-13Packet#1的响应报文
由图3-C-13可知,此报文TSval为0,所以TS=0,这与nmap的打印结果一致。
即:
SEQ(SP=109%GCD=1%ISR=10F%TI=I%CI=I%II=I%SS=S%TS=0)
q)OPS行
由于前面我们已经找到了所有的Packet#1-Packet#6,这里就不在全部截图了,而只给一个例子,Packet#1的响应报文如图3-D-1所示
图3-D-1Packet#1响应报文的ops
所以可得:
O1=M5B4NW0NNT00NNS;
同理可得:
O2=M5B4NW0NNT00NNS;
O3=M5B4NW0NNT00;
04=M5B4NW0NNT00NNS;
O5=M5B4NW0NNT00NNS;
O6=M5B4NNT00NNS;
这个结果与nmap的打印结果完全一致。
即:
OPS(O1=M5B4NW0NNT00NNS%O2=M5B4NW0NNT00NNS%O3=M5B4NW0NNT00%O4=M5B4NW0NNT00NNS%O5=M5B4NW0NNT00NNS%O6=M5B4NNT00NNS)
r)WIN行
由于前面我们已经找到了所有的Packet#1-Packet#6,这里就不在全部截图了,而只给一个例子,Packet#1的响应报文如图3-E-1所示
图3-E-1Packet#1响应报文的windowssize
由图3-E-1可得:
W1=FFFF;
同理可得:
W2=FFFF;
W3=FFFF;
W4=FFFF;
W5=FFFF;
W6=FFFF;
这与nmap的打印结果完全相同。
即:
WIN(W1=FFFF%W2=FFFF%W3=FFFF%W4=FFFF%W5=FFFF%W6=FFFF)
s)ECN行
我们首先找到ECNCWR报文,利用以下wireshark的过滤参数:
ip.addr==211.69.207.234&&tcp.flags.syn&&tcp.window_size==3
得到如图3-F-1所示的结果:
图3-F-1找到ECNCWR报文
由图3-F-1可知,ECNCWR报文的序列号为2072,下面我们定位其响应报文,如图3-F-2所示
下面计算R:
由图3-F-2可知,ECNCWR报文由响应报文,所以R=Y,这与nmap的打印信息一致。
下面计算DF:
由图3-F-2可知,DF标志位置1,所以DF=Y,这与nmap的打印信息一致。
下面计算T:
由于扫描的是局域网内的计算机,所以受到对方的IP数据包中的TTL即为初始TTL,由图3-F-2可以看到TTL=128,也就是十六进制的80,所以T=80,这与nmap的打印结果一致。
图3-F-2ECNCWR报文的响应报文
下面计算W:
由图3-F-2可知windowssize为65535,即十六进制的0Xffff,所以W=ffff,这与nmap的打印结果一致。
下面计算O:
由图3-F-2的ops字段可知:
O=M5B4NW0NNS
这与nmap的打印结果一致。
下面计算CC:
由图3-F-2的tcp头部的flag字段可知ECE与CWR字段均没有置位,所以CC=N,这与nmap的打印结果一致。
下面计算Q:
由于ECN、CWR以及URG均没有置位,所以根本不会存在文档中所说的所谓的巧合,所以Q什么值都没有鸡Q=,这与nmap的打印结果一致。
即:
ECN(R=Y%DF=Y%T=80%W=FFFF%O=M5B4NW0NNS%CC=N%Q=)
t)T1行
T1即为Packet#1,由于我们在前面已经找到了Packet#1报文,下面我们只给出其响应报文,如图3-G-1所示
图3-G-1T1响应报文
下面计算R:
由图3-G-1可知T1有响应报文,所以R=Y,这与nmap的打印结果一致。
下面计算DF:
由图3-G-1可知DF被置位,所以DF=Y,这与nmap的打印结果一致。
下面计算T:
由图3-G-1可知TTL=128,也就是十六进制的80,所以T=80,这与nmap的打印结果一致。
下面计算S:
下面我们把图3-G-1中的sequencenumber做一个特写,如图3-G-2所示
图3-G-2T1的响应报文的sequencenumber
我们还要知道请求报文,即T1的acknowledgementnumber,如图3-G-3所示:
由图3-G-2可知T1响应报文的sequencenumber为0X54f7491f,而由图3-G-3可知T1的acknowledgementnumber为0Xefd97016,所以S=O,这与nmap的打印结果一致。
图3-G-3T1的acknowledgementnumber
下面计算A:
从图3-G-3可知T1的sequencenumber为0Xa8975c01,且由图3-G-2可知T1的响应报文的acknowledgementnumber为0Xa8975c02,因此ack为syn+1,即A=S+,这与nmap的打印结果一致。
下面计算F:
由图3-G-2可知,T1响应报文的tcp的flags字段syn和ack被置位,所以F=AS,这与nmap的打印结果一致。
下面计算RD:
由图3-G-2可知,T1响应报文的tcp层根本没有携带用户层的数据,所以RD=0,这与nmap的打印结果一致。
下面计算Q:
由图3-G-2可知,T1响应报文的tcp头的flags字段的ECN、CWR以及URG字段均没有置位,所以Q的置位空,即Q=,这与nmap的打印结果一致。
即:
T1(R=Y%DF=Y%T=80%S=O%A=S+%F=AS%RD=0%Q=)
u)T2行
下面我们找到T2报文,通过过滤参数:
ip.addr==211.69.207.234&&tcp.flags==0,可以得到如图3-H-1
图3-H-1T2报文全貌
由图3-H-1可知,T1报文的序列号为2074,下面我们找到其响应报文,如图3-H-2所示
下面计算R:
由图3-H-2可知,T2报文有响应报文,所以R=Y,这与nmap的打印信息一致。
下面计算DF:
由图3-H-2可知,T2的响应报文的IP头的flags字段的DF没有置位,即DF=N,这与打印结果一致。
图3-H-2T2响应报文全貌
下面计算T:
由图3-H-2可知,T2响应报文的TTL为128,由于是在局域网中测试的,所以TTL的值即为T的值,即T=80(十六进制),这与nmap的打印信息一致。
下面计算W:
由图3-H-2可知,T2响应报文的widowssize为0,即W=0,这与nmap的打印结果一致。
下面计算S:
由图3-H-2可知,T2响应报文的sequencenumber为0,所以S=Z,这与nmap的打印结果一致。
下面计算A:
由图3-H-1可知,T2报文的sequencenumber为0Xa8975c01,而由图3-H-2可知,T2响应报文的acknowledgementnumber也为0Xa8975c01,所以A=S,这与nmap的打印结果一致。
下面计算F:
由图3-H-2可知,T2响应报文的tcp头部flags字段RST与ACK字段被置位,所以F=AR,这与nmap的打印结果一致。
下面计算O:
由图3-H-2可知,T2响应报文的tcp头部的ops字段没有数据,所以O为空,即O=,这与nmap的打印结果一致。
下面计算RD:
由图3-H-2可知,T2的响应报文tcp层根本没有携带用户层的数据,因此RD=0,这与nmap的打印结果一致。
下面计算Q:
由图3-H-2可知,T2的响应报文的tcp头部的flags的ECN、CWR以及URG均没有置位,所以Q为空,即Q=,这与nmap的打印结果一致。
即:
T2(R=Y%DF=N%T=80%W=0%S=Z%A=S%F=AR%O=%RD=0%Q=)
v)T3行
首先我们找到T3报文,T3报文就在T2报文的下面,T3报文如图3-I-1所示,而T3的响应报文如图3-I-2所示。
下面计算R:
由图3-I-2可知,T3报文有响应报文,所以R=Y,这与nmap的打印结果一致。
下面计算DF:
由图3-I-2可知,T3响应报文的IP头的flags字段的DF被置位,所以DF=Y,这与nmap的打印结果一致。
下面计算T:
由图3-I-2可知,T3响应报文的IP头的TTL字段的值为128,即十六进制的0X80,由因为对方主机与扫描主机在同一个局域网,所以T也为128,即T=80,这与nmap的打印结果一致。
下面计算W:
由图3-I-2可知,T3响应报文的tcp头部的windowssize字段的值为65535,即十六进制的0Xffff,所以W=ffff,这与nmap的打印结果一致。
下面计算S:
由图3-I-1可知,T3报文的acknowledgementnumber字段值为0Xefd97016,而由图3-I-2可知,T3响应报文的sequencenumber字段值为0Xfcd729be,所以S=O,这与nmap的打印结果一致。
图3-I-1T3报文全貌
下面计算A:
由图3-I-1可知,T3报文的sequencenumber值为0Xa8975c01,且由图3-I-2可知T3响应报文的acknowledgementnumber的值为0Xa8975c02,所以A=S+,这与nmap的打印结果一致。
下面计算F:
由图3-I-2可知,T3响应报文的tcp头部的flags字段的syn、ack均被置位,所以F=AS,这与nmap的打印结果一致。
下面计算O;
由图3-I-2中的T3响应报文的tcp头部的ops字段可知:
O=M5B4NW0NNT00NNS
这与nmap的打印结果一致。
图3-I-2T3的响应报文
下面计算RD:
由图3-I-2可知,T3响应报文的tcp层根本没有携带用户层的数据,所以RD=0,这与nmap的打印结果一致。
下面计算Q:
由图3-I-2可知,T3的响应报文的tcp头部的flags的EC