很多工具都提供远程对操作系统进行检测的功能,你可以使用Nmap在网络上找到那些已经过时的系统或未经授权的系统。
但是并没有一种工具可以提供绝对精准的远程操作系统信息。几乎所有的工具都使用猜解的方法,通过向目标发送探针,然后根据目标的回应来进行猜测系统。这个探针大多都是以TCP和UDP数据包的形式,检查的细节包括初始序列号(ISN),TCO选项,IP标识符(ID),数字时间戳等。每个系统都会对这些探针做出不同的响应,这些工具就提取这些响应中的特征部分,然后记录在一个数据库中,Nmap也是如此。
在Nmap中操作系统检测还提供了关于系统运行时间和TCP序列可预测性信息的分类,使用-O参数通过端口扫描来完成对操作系统的扫描。
创新互联建站服务项目包括嘉荫网站建设、嘉荫网站制作、嘉荫网页制作以及嘉荫网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,嘉荫网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到嘉荫省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
nmap -O 192.168.126.1
这个命令将会使用Nmap默认的SYN的扫描方式进行端口检测,不过操作系统检测选项可以和别的检测技术结合使用。使用--osscan-limit参数的时候,Nmap只会对满足“同时具有状态open和closed的端口”条件的主机进行操作系统检测。
远程判断目标计算机操作系统的方法可以分为两类。
主动式方法:指客户端主动向远程主机发送信息,远程主机一般要对这些信息作出反应,会回复一些信息,发送者对这些信息进行分析,就有可能会得知远程主机的操作系统类型。
被动式方法:并不向目标操作系统发送任何数据包,而是通过各种抓包工具来搜集流经网络的数据报文,再从这些报文中得到目标计算机的操作系统信息。
Nmap并不使用被动方式,Nmap的主动方式中采用多达15个探针的操作系统指纹扫描包。指纹是计算机作为身份认证的一种机制,每种操作系统都有不一样的特征,通过向计算机发送探针来查看目标主机的响应数据,这个过程就是操作系统指纹分析的过程。探针利用了TCP,UDP,ICMP等协议。这些经过巧妙设计的探针可以发现目标操作系统细微的差别。
在Nmap中我们可以搭配使用-O参数
nmap -O -F 192.168.126.1
随着我们不断增加参数,可能会为系统带来更大的负担,同时也会泄露我们更多信息,更容易被IPS/IDS检测出来。
nmap同样可以作为网络管理者的一个利器。利用这款工具,网络管理者可以节省大量的时间和精力,我们使用下面这个指令来看一下有什么效果。
nmap -sV -F --fuzzy --osscan-guess 192.168.0.103
这里我是扫描的是我自己的物理机,开着防火墙的情况下,检测出我的虚拟机版本是vmware15。
我再用这个指令来试一下虚拟机,扫描的结果是没毛病的嗷
如果我们希望通过nmap准确检测远程操作系统是比较困难的,所有这里我们使用到了-osscan-guess这个具有猜测功能的参数,它会猜测最为接近目标的操作系统类型,我们可以利用这条指令就可以简单的发现目标网络中那些不安全的系统,还可以快速获取目标上不安全的应用,我们做为维护者可以使用这个尽早来完善系统的安全性。
我们一直在说nmap无法百分之百的确定目标系统,只能依靠猜测。在nmap无法确定目标操作系统的时候,nmap会输出系统的TCP/IP指纹文件,并给出各个系统类型的可能性。nmap也希望我们可以提交这个指纹文件和最终验证的该系统的真实类型,从而帮助nmap更新操作系统指纹数据库。这里我们就不扫描网站了,还是使用自己的虚拟机。
通过扫描结果我们发现,在这次扫描中,并没有得到目标系统的准确值,但是可以看出结果给出了一个TCP/IP fingerprint的值,也就是OS后面的内容。
这个输出结果并非一次的扫描结果,而是多次扫描的结果,这些扫描包括SCAN、SEQ、OPS、WIN、ECN、T1~T7、U1和IE。每次的扫描结果都是用%作为分隔符,有的扫描结果可能为空(RD=0,就代表RD的结果没有得到什么实际内容),测试结果必须完全匹配操作系统指纹的定义,这样才能与指纹数据库中的条目进行匹配。例如 T1(R =N)则代表这次测试没有任何返回结果。
我们将第一个SCAN的结果拿出来分析一下
SCAN(V=7.80%E=4%D=11/3%OT=80%CT=7%CU=40895%PV=Y%DS=1%DC=D%G=Y%M=000C29%TM=5DBE8A64%P=i686-pc-windows-windows)
这一行代表当前进行扫描使用的nmap版本以及一些其他的相关本地信息。
V=7.80表示当前使用的nmap版本
D=11/3表示的扫描的日期
OT=80%CT=7表示在指纹识别过程中使用的TCP端口
CU=40895表示在指纹识别过程中使用的UDP端口
PV=Y表示目标IP地址是否属于私有IP地址(Y=yes N=no)
DS=1表示从nmap所在主机到目标主机的距离跳数
G=Y表示这次扫描结果较好,可以提交给iNSEcure.Org(也就是nmap的网站)
TM=5DBE8A64表示扫描所消耗的时间
p=i686-pc-windows-windows指出nmap所在主机的操作系统类型
下面的这些测试结果(SEQ、OPS、WIN、T1),这些测试的结果是通过向目标上开放的TCP端口发送一组非常巧妙的探针得到的。
SEQ(SP=FD%GCD=1%ISR=10D%TI=I%CI=I%II=I%SS=S%TS=U)
SP=FD表示TCP的初始序列号(ISN)
GCD=1表示TCP的增量
ISR=10D表示ISN的速率
TI=I表示SEQ探针回应数据包中IP头部的ID值
II=I表示ICMP探针回应数据包中的IP头部的ID值
TS=U表示TCP数据包的时间戳信息
OPS测试结果
OPS(O1=M5B4NW8NNS%O2=M5B4NW8NNS%O3=M5B4NW8%O4=M5B4NW8NNS%O5=M5B4NW8NNS%O6=M5B4NNS)
O1=M5B4表示TCP数据包每次能够传输的最大数据分段
ST11表示ACK的可选信息和数据包的时间戳内容
N表示为空操作
w0指出了窗口大小
O2、O3....O6的意义均和O1相同。
WIN测试结果
WIN(W1=FFFF%W2=FFFF%W3=FFFF%W4=FFFF%W5=FFFF%W6=FF70)
这个测试结果给出了6个探针返回值的初始窗口大小
W1=2DA0
W2=2DA0
W3=2DA0
W4=2DA0
W5=2DA0
W6=2DA0
ECN测试结果
ECN(R=Y%DF=Y%T=40%W=FFFF%O=M5B4NW8NNS%CC=N%Q=)
R=Y表示目标是否对我们进行了响应
DF=Y表示IP数据包的分段标志位是否被设置
T=40表示回应数据包IP中的TT1值 W=FFFF表示TCP初始化窗口的大小信息
O=M5B4NNS表示TCP选项的信息
CC=Y表示目标的拥塞控制控制能力。Y表示目标支持ECN
第一个探针回应。第二个探针是一个设置了DF位内容的为空的数据包,这个数据包的窗口大小为128。
第三个探针是一个设置了FIN、URG、PSH以及SYN标识的数据包,这个数据包的大小为256。第四个探针是一个设置了ACK位的TCP数据包,这个包同样设置了DF位,大小为1024。第五个探针是一个窗口大小为31337的数据包。第六个数据包是一个窗口大小为32768,这个数据包通常是发往关闭的端口。第七个数据包设置了FIN、URG、PSH标志位,这个探针同样发往一个关闭端口,窗口大小为65535。
U1的结果是根据UDP数据包探针返的结果,这个探针的数据部分是300个C字符
IE探针基于ICMP协议,由两个探针组成。
新的操作系统指纹信息提交地址 http://iNSEcure.org/Nmap/submit/
Nmap提供更精确的服务及版本检测选项,可通过添加选项-sV进行服务和版本检测。服务和版本检测还有更多的选项。
--allports(扫描全部端口)
通常我们在使用nmap进行版本探测的时候不会对目标的全部端口进行扫描,而是会跳过一些端口。如果确实有必要的话可以对全部端口进行扫描。
-version-intensity 0-9(设置版本扫描强度)
当进行版本扫描-sV的时候,nmap发送一系列的报文,每个报文都被赋予一个1-9之间的值。数字越高,服务越有可能被正确识别。强度越高扫描时间也越长。强度值在0-9之间,默认是7。
--version-light(轻量级模式)
--versiom-light其实相当于上面说的强度值为2的扫描。这种轻量级模式扫描速度更快,不过使用这种模式对服务进行扫描的成功几率也小了许多。
--version-trace(跟踪版本扫描活动)
这将会是nmap打印出关于正在进行扫描的详细调试信息。它是用--packet-trace所得到的信息的子集。