这篇文章给大家介绍Nmap是如何识别主机指纹的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。0x01Nmap维护一个nmap-os-db数据库,存储了上千种操作系统信息,简单一点来说,Nmap通过TCP/IP协议栈的指纹信息来识别目标主机的操作系统信息,这主要是利用了RFC标准中,没有强制规范了TCP/IP的某些实现,于是不同的系统中TCP/IP的实现方案可能都有其特定的方式,这些细节上的差异,给nmap识别操作系统信息提供了方案,具体一点说,Nmap分别挑选一个close和open的端口,分别发送给一个经过精心设计的TCP/UDP数据包,当然这个数据包也可能是ICMP数据包。然后根据收到返回报文,生成一份系统指纹。通过对比检测生成的指纹和nmap-os-db数据库中的指纹,来查找匹配的系统。最坏的情况下,没有办法匹配的时候,则用概率的形式枚举出所有可能的信息。所谓的指纹,即由特定的回复包提取出的数据特征0x02Nmap-os-db在kali中路径如下我把他下在到win上方便查看这是指纹库的版本以这条为例
最前面几行为注释行,说明此指纹对应的操作系统与版本。Fingerprint关键字定义一个新的指纹,紧随其后的是指纹名字。Class行用于指定该指纹所属的类别,依次指定该系统的vendor(生产厂家),OS family(系统类别),OS generation(第几代操作系统),and device type(设备类型)。接下来是CPE行,此行非常重要,使用CPE(CommonPlatformEnumeration,通用平台枚举)格式描述该系统的信息。以标准的CPE格式来描述操作系统类型,便于Nmap与外界信息的交换,比如可以很快从网上开源数据库查找到CPE描述的操作系统具体信息。此处作为指纹描述字段的CPE格式如下:cpe:/
我在前面提到,在kali上开发的唯一端口是80,所以在wireshark可以看到这一系列包是在发往80端口的Sequence generation (SEQ, OPS, WIN, and T1)
会发送一系列共6个tcp探测来生成4个响应行,每一个都是tcpsyn数据包,连接到远程机器上检测到的开放的端口。这些数据包的序列(sequence)和确认号(acknowledgementnumbers)是随机的,tcp选项和tcp窗口字段值也是不同的。具体而言如下所示:Packet #1: window scale (10), NOP, MSS (1460),timestamp (TSval: 0xFFFFFFFF; TSecr: 0), SACK permitted. The windowfield is 1.如2006所示Packet #2: MSS (1400), window scale (0), SACKpermitted, timestamp (TSval: 0xFFFFFFFF; TSecr: 0), EOL. The windowfield is 63.如2009所示Packet #3: Timestamp (TSval: 0xFFFFFFFF; TSecr:0), NOP, NOP, window scale (5), NOP, MSS (640). The window field is4.如2012所示Packet #4: SACK permitted, Timestamp (TSval:0xFFFFFFFF; TSecr: 0), window scale (10), EOL. The window field is 4.如2015所示Packet #5: MSS (536), SACK permitted, Timestamp(TSval: 0xFFFFFFFF; TSecr: 0), window scale (10), EOL. The windowfield is 16.如2018所示
Packet #6: MSS (265), SACK permitted, Timestamp(TSval: 0xFFFFFFFF; TSecr: 0). The window field is 512.如2021所示上图中2006-2007是一对syn,及对应返回的synack;2006-2007,2009-2010,2012-2013,2015-2016,2018-2019,2021-2022一共6对这些测试的结果包括四个结果类别行。第一个SEQ包含基于探测包的序列分析的结果。这些测试结果是GCD,SP,ISR,TI,II,TS和SS。SEQ测试将六个TCPSYN数据包发送到目标机器的开放端口,并收回SYN/ ACK数据包。这些SYN /ACK分组中的每一个包含32位初始序列号(ISN)。GCD,SP,ISR的计算比较麻烦。GCD根据ISN计算。ISR,SP都根据GCD计算。下面的截图是6个tcpsyn包中的ISNTI会检查响应的IP头ID字段,必须至少收到三个响应才能包含测试,如果ID字段值都是0的话,则为Z在2007,2010,2013,2016,2019,2022数据包中的IP头部ID字段均为0所以在TI的值为ZTS是根据SEQ探测的响应中的TCP时间戳选项,它检查TSval(选项的前四个字节)如果时间戳选项值不为0,还需计算,比较麻烦,根据计算结果再赋TS值为1或7或8从数据包中,以2007为例,可以知道TS值为1或7或8下一行OPS包含为每个探测器接收的TCPoption(测试名称为O1到O6)。按照顺序来,即2007为O1,2010位O2…以2007为例来分析它对应的字符串是M5B4ST11NW7:M代表Maximumsegment size,1460的16进制为5B4;S代表SackPermittedT代表Timestamp,如果TSval,TSecr都不是0,则为11N代表NOPW代表Windowscale,大小为7O2-O6以此类推WIN行包含response的windowsize(名为W1到W6)。以2013为例Windowsize为28960与这些探测器相关的最后一行T1包含packet#1的各种测试值。这些结果用于R,DF,T,TG,W,S,A,F,O,RD和Q测试。这些测试仅针对第一个探针报告,因为它们对于每个探针几乎总是相同的R表示目标是否有响应,有响应则为YDF表示禁止路由器分段数据包的位是否置位,若置位则为Y,从下图可以看出已置位
T表示初始TTL,下图可以看到T应为39
TG为猜测的初始TTL值,如果发现实际TTL值,则不会打印该字段S检查TCP报头中的32位序列号字段,与引发响应的探测中的TCP确认号进行比较。然后它记录适当的值。下图可以看到sequencenumber为0,所以S的值为Z
A测试响应中的确认号acknowledgementnumber与相应探测中的序列号的比较下图中可以看到2017的acknowledgementnumber为1,2016中的sequencenumber 为0,0+1=1,即2017的acknowledgementnumber等于2016的sequencenumber+1所以A的值为S+F记录响应中的tcpflag下图以2017为例,flags中A和S置位,所以F的值为ASRD是针对reset包的数据做校验和的结果,如果没数据或没校验或校验和无效,则为0下图可以看出是没校验,RD值为0Q主要针对两处:一处是tcpheader的保留字段非0,如果出现则Q中记录“R”另一处是没设置URGflag时,存在非零的URG指针字段上图可以看出都不存在,所以Q为空Emm,好累啊,抓包分析就是这么个情况,照着怼就完事了直接下结论吧:Nmap是开源世界里主动识别远程主机指纹最强的大佬。关于Nmap是如何识别主机指纹的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
本篇内容介绍了“怎么用PHP+MySQL设计发表评论留言免费云主机域名功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先我们放置一个评论表单和显示评论列表#…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。