溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Nmap是如何識別主機(jī)指紋的

發(fā)布時(shí)間:2022-01-18 14:46:00 來源:億速云 閱讀:353 作者:柒染 欄目:網(wǎng)絡(luò)安全

這篇文章給大家介紹Nmap是如何識別主機(jī)指紋的,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

0x01

Nmap維護(hù)一個nmap-os-db數(shù)據(jù)庫,存儲了上千種操作系統(tǒng)信息,簡單一點(diǎn)來說,Nmap通過TCP/IP協(xié)議棧的指紋信息來識別目標(biāo)主機(jī)的操作系統(tǒng)信息,這主要是利用了RFC標(biāo)準(zhǔn)中,沒有強(qiáng)制規(guī)范了TCP/IP的某些實(shí)現(xiàn),于是不同的系統(tǒng)中TCP/IP的實(shí)現(xiàn)方案可能都有其特定的方式,這些細(xì)節(jié)上的差異,給nmap識別操作系統(tǒng)信息提供了方案,具體一點(diǎn)說,Nmap分別挑選一個close和open的端口,分別發(fā)送給一個經(jīng)過精心設(shè)計(jì)的TCP/UDP數(shù)據(jù)包,當(dāng)然這個數(shù)據(jù)包也可能是ICMP數(shù)據(jù)包。然后根據(jù)收到返回報(bào)文,生成一份系統(tǒng)指紋。通過對比檢測生成的指紋和nmap-os-db數(shù)據(jù)庫中的指紋,來查找匹配的系統(tǒng)。最壞的情況下,沒有辦法匹配的時(shí)候,則用概率的形式枚舉出所有可能的信息。

所謂的指紋,即由特定的回復(fù)包提取出的數(shù)據(jù)特征

0x02

Nmap-os-db在kali中路徑如下

Nmap是如何識別主機(jī)指紋的

我把他下在到win上方便查看

Nmap是如何識別主機(jī)指紋的

這是指紋庫的版本

以這條為例

Nmap是如何識別主機(jī)指紋的

最前面幾行為注釋行,說明此指紋對應(yīng)的操作系統(tǒng)與版本。

Fingerprint關(guān)鍵字定義一個新的指紋,緊隨其后的是指紋名字。

Class行用于指定該指紋所屬的類別,依次指定該系統(tǒng)的vendor(生產(chǎn)廠家),OS family(系統(tǒng)類別),OS generation(第幾代操作系統(tǒng)),and device type(設(shè)備類型)。

接下來是CPE行,此行非常重要,使用CPE(CommonPlatformEnumeration,通用平臺枚舉)格式描述該系統(tǒng)的信息。以標(biāo)準(zhǔn)的CPE格式來描述操作系統(tǒng)類型,便于Nmap與外界信息的交換,比如可以很快從網(wǎng)上開源數(shù)據(jù)庫查找到CPE描述的操作系統(tǒng)具體信息。

此處作為指紋描述字段的CPE格式如下:

cpe:/<part>:<vendor>:<product>:<version>:<update>:<edition>:<language>

接下來從SEQ到IE的13行都是具體指紋數(shù)據(jù)描述行,在對比指紋時(shí),就是對比這13行里面的具體數(shù)據(jù),如果匹配則目標(biāo)機(jī)為指紋所描述的系統(tǒng)類型。

SEQ描述順序產(chǎn)生方式;OPS描述TCP包中可選字段的值;WIN描述TCP包的初始窗口大??;ECN(ExplicitCongestionNotification)描述TCP明確指定擁塞通知時(shí)的特征;T1-T7描述TCP回復(fù)包的字段特征;U1描述向關(guān)閉的UDP發(fā)包產(chǎn)生的回復(fù)的特征;IE描述向目標(biāo)機(jī)發(fā)送ICMP包產(chǎn)生的特征。

0x03

在系統(tǒng)探測過程中,會執(zhí)行五種不同的測試,每種測試由一個或者多個數(shù)據(jù)包組成,目標(biāo)系統(tǒng)對每個數(shù)據(jù)包作出的響應(yīng)有助于確定操作系統(tǒng)的類型。

五種不同的測試是:

1.sequencegeneration

2.ICMPecho

3.tcp explicit congestion notification

4.TCP

5.UDP

分別看看

序列生成(sequencegeneration):

序列生成測試由六個數(shù)據(jù)包組成,這六個包是每隔100 毫秒分開發(fā)送的,且都是TCP SYN 包。每個TCP SYN 包的結(jié)果將有助于NMAP 確定操作系統(tǒng)的類型。

ICMP回顯(ICMPecho):

兩個有著不同設(shè)置的ICMP請求包被送到目標(biāo)系統(tǒng),由此產(chǎn)生的反應(yīng)將有助于實(shí)現(xiàn)驗(yàn)證操作系統(tǒng)類型。

TCP顯式擁塞通知(explicitcongestion notification):

當(dāng)生成許多包通過路由器時(shí)會導(dǎo)致其負(fù)載變大,這稱之為擁塞。其結(jié)果就是系統(tǒng)會變慢以降低擁堵,以便路由器不會發(fā)生丟包。這個包僅為了得到目標(biāo)系統(tǒng)的響應(yīng)而發(fā)送。因?yàn)椴煌牟僮飨到y(tǒng)以不同的方式處理這個包,所以返回的特定值可以用來判斷操作系統(tǒng)。

TCP:在這個測試中會發(fā)送六個數(shù)據(jù)包。一些帶有特定的包設(shè)置的包被發(fā)送用來到打開的或關(guān)閉的端口。結(jié)果也將會因?yàn)椴僮飨到y(tǒng)的不同而不同。

所有TCP 包都是以如下不同的標(biāo)志被發(fā)送:

無標(biāo)志

SYN、FIN、URG和PSH

ACK

SYN

ACK

FIN、PSH和URG

UDP:這個測試由一個被發(fā)送給一個關(guān)閉的端口的數(shù)據(jù)包組成。如果目標(biāo)系統(tǒng)上的這個端口是關(guān)閉的,而且返回一條ICMP 端口不可達(dá)的信息,那么就說明沒有防火墻。

0x04

以kali為例,如果關(guān)閉全部端口,則會顯示

Nmap是如何識別主機(jī)指紋的

開放一個80端口,此時(shí)就可以檢測出這是linux系統(tǒng)

Nmap是如何識別主機(jī)指紋的

Nmap是如何識別主機(jī)指紋的

0x05

接下來通過抓包分析

144為被掃描的機(jī)器,138為運(yùn)行nmap的機(jī)器

Nmap是如何識別主機(jī)指紋的

我在前面提到,在kali上開發(fā)的唯一端口是80,所以在wireshark可以看到這一系列包是在發(fā)往80端口的

  1. Sequence generation (SEQ, OPS, WIN, and T1)

會發(fā)送一系列共6個tcp探測來生成4個響應(yīng)行,每一個都是tcpsyn數(shù)據(jù)包,連接到遠(yuǎn)程機(jī)器上檢測到的開放的端口。

這些數(shù)據(jù)包的序列(sequence)和確認(rèn)號(acknowledgementnumbers)是隨機(jī)的,tcp選項(xiàng)和tcp窗口字段值也是不同的。

具體而言如下所示:

Packet #1: window scale (10), NOP, MSS (1460),timestamp (TSval: 0xFFFFFFFF; TSecr: 0), SACK permitted. The windowfield is 1.

如2006所示

Nmap是如何識別主機(jī)指紋的

Packet #2: MSS (1400), window scale (0), SACKpermitted, timestamp (TSval: 0xFFFFFFFF; TSecr: 0), EOL. The windowfield is 63.

如2009所示

Nmap是如何識別主機(jī)指紋的

Packet #3: Timestamp (TSval: 0xFFFFFFFF; TSecr:0), NOP, NOP, window scale (5), NOP, MSS (640). The window field is4.

如2012所示

Nmap是如何識別主機(jī)指紋的

Packet #4: SACK permitted, Timestamp (TSval:0xFFFFFFFF; TSecr: 0), window scale (10), EOL. The window field is 4.

如2015所示

Nmap是如何識別主機(jī)指紋的

Packet #5: MSS (536), SACK permitted, Timestamp(TSval: 0xFFFFFFFF; TSecr: 0), window scale (10), EOL. The windowfield is 16.

如2018所示

Nmap是如何識別主機(jī)指紋的

Packet #6: MSS (265), SACK permitted, Timestamp(TSval: 0xFFFFFFFF; TSecr: 0). The window field is 512.

如2021所示

Nmap是如何識別主機(jī)指紋的

Nmap是如何識別主機(jī)指紋的

上圖中2006-2007是一對syn,及對應(yīng)返回的synack;

2006-2007,2009-2010,2012-2013,2015-2016,2018-2019,2021-2022一共6對

這些測試的結(jié)果包括四個結(jié)果類別行。

第一個SEQ包含基于探測包的序列分析的結(jié)果。這些測試結(jié)果是GCD,SP,ISR,TI,II,TS和SS。

SEQ測試將六個TCPSYN數(shù)據(jù)包發(fā)送到目標(biāo)機(jī)器的開放端口,并收回SYN/ ACK數(shù)據(jù)包。這些SYN /ACK分組中的每一個包含32位初始序列號(ISN)。GCD,SP,ISR的計(jì)算比較麻煩。GCD根據(jù)ISN計(jì)算。ISR,SP都根據(jù)GCD計(jì)算。

下面的截圖是6個tcpsyn包中的ISN

Nmap是如何識別主機(jī)指紋的

Nmap是如何識別主機(jī)指紋的

Nmap是如何識別主機(jī)指紋的

Nmap是如何識別主機(jī)指紋的

Nmap是如何識別主機(jī)指紋的

TI會檢查響應(yīng)的IP頭ID字段,必須至少收到三個響應(yīng)才能包含測試,如果ID字段值都是0的話,則為Z在2007,2010,2013,2016,2019,2022數(shù)據(jù)包中的IP頭部ID字段均為0

Nmap是如何識別主機(jī)指紋的

所以在TI的值為Z

TS是根據(jù)SEQ探測的響應(yīng)中的TCP時(shí)間戳選項(xiàng),它檢查TSval(選項(xiàng)的前四個字節(jié))

如果時(shí)間戳選項(xiàng)值不為0,還需計(jì)算,比較麻煩,根據(jù)計(jì)算結(jié)果再賦TS值為1或7或8

從數(shù)據(jù)包中,以2007為例,可以知道TS值為1或7或8

Nmap是如何識別主機(jī)指紋的

下一行OPS包含為每個探測器接收的TCPoption(測試名稱為O1到O6)。

按照順序來,即2007為O1,2010位O2...

以2007為例來分析

Nmap是如何識別主機(jī)指紋的

它對應(yīng)的字符串是M5B4ST11NW7:

M代表Maximumsegment size,1460的16進(jìn)制為5B4;

S代表SackPermitted

T代表Timestamp,如果TSval,TSecr都不是0,則為11

N代表NOP

W代表Windowscale,大小為7

O2-O6以此類推

WIN行包含response的windowsize(名為W1到W6)。

以2013為例

Nmap是如何識別主機(jī)指紋的

Windowsize為28960

與這些探測器相關(guān)的最后一行T1包含packet#1的各種測試值。這些結(jié)果用于R,DF,T,TG,W,S,A,F(xiàn),O,RD和Q測試。這些測試僅針對第一個探針報(bào)告,因?yàn)樗鼈儗τ诿總€探針幾乎總是相同的

R表示目標(biāo)是否有響應(yīng),有響應(yīng)則為Y

DF表示禁止路由器分段數(shù)據(jù)包的位是否置位,若置位則為Y,從下圖可以看出已置位

Nmap是如何識別主機(jī)指紋的

T表示初始TTL,下圖可以看到T應(yīng)為39

Nmap是如何識別主機(jī)指紋的

TG為猜測的初始TTL值,如果發(fā)現(xiàn)實(shí)際TTL值,則不會打印該字段

S檢查TCP報(bào)頭中的32位序列號字段,與引發(fā)響應(yīng)的探測中的TCP確認(rèn)號進(jìn)行比較。然后它記錄適當(dāng)?shù)闹怠O聢D可以看到sequencenumber為0,所以S的值為Z

Nmap是如何識別主機(jī)指紋的

A測試響應(yīng)中的確認(rèn)號acknowledgementnumber與相應(yīng)探測中的序列號的比較

下圖中可以看到2017的acknowledgementnumber為1,2016中的sequencenumber 為0,0+1=1,即2017的acknowledgementnumber等于2016的sequencenumber+1

所以A的值為S+

F記錄響應(yīng)中的tcpflag

下圖以2017為例,flags中A和S置位,所以F的值為AS

Nmap是如何識別主機(jī)指紋的

RD是針對reset包的數(shù)據(jù)做校驗(yàn)和的結(jié)果,如果沒數(shù)據(jù)或沒校驗(yàn)或校驗(yàn)和無效,則為0

下圖可以看出是沒校驗(yàn),RD值為0

Nmap是如何識別主機(jī)指紋的

Q主要針對兩處:一處是tcpheader的保留字段非0,如果出現(xiàn)則Q中記錄“R”

Nmap是如何識別主機(jī)指紋的

另一處是沒設(shè)置URGflag時(shí),存在非零的URG指針字段

上圖可以看出都不存在,所以Q為空

Emm,好累啊,抓包分析就是這么個情況,照著懟就完事了

直接下結(jié)論吧:

Nmap是開源世界里主動識別遠(yuǎn)程主機(jī)指紋最強(qiáng)的大佬。

關(guān)于Nmap是如何識別主機(jī)指紋的就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI