Kali Linux 網(wǎng)絡(luò)掃描秘籍 第三章 端口掃描(一)

第三章 端口掃描(一)

作者:Justin Hutchens

譯者:飛龍

協(xié)議:CC BY-NC-SA 4.0

3.1 UDP端口掃描

由于 TCP 是更加常用的傳輸層協(xié)議崭添,使用 UDP 的服務(wù)常常被人遺忘要糊。雖然 UDP 服務(wù)本質(zhì)上擁有被忽視的趨勢童社,這些服務(wù)可以枚舉拱雏,用來完全理解任何給定目標(biāo)的工具面隅要,這相當(dāng)關(guān)鍵昧识。UDP 掃描通常由挑戰(zhàn)性疮丛,麻煩轰传,并且消耗時間驴党。這一章的前三個秘籍會涉及如何在 Kali 中使用不同工具執(zhí)行 UDP 掃描。理解 UDP 掃描可以用兩種不同的方式執(zhí)行相當(dāng)重要获茬。一種技巧會在第一個秘籍中強(qiáng)調(diào)港庄,它僅僅依賴于 ICMP 端口不可達(dá)響應(yīng)。這類型的掃描依賴于任何沒有綁定某個服務(wù)的 UDP 端口都會返回 ICP 端口不可達(dá)響應(yīng)的假設(shè)恕曲。所以不返回這種響應(yīng)就代表擁有服務(wù)鹏氧。雖然這種方法在某些情況下十分高效,在主機(jī)不生成端口不可達(dá)響應(yīng)佩谣,或者端口不可達(dá)響應(yīng)存在速率限制或被防火墻過濾的情況下把还,它也會返回不精確的結(jié)果。一種替代方式會在第二個和第三個秘籍中講解茸俭,是使用服務(wù)特定的探針來嘗試請求響應(yīng)吊履,以表明所預(yù)期的服務(wù)運行在目標(biāo)端口上。這個方法非常高效调鬓,也非常消耗時間艇炎。

3.2 TCP 掃描

這一章中,會提及幾個不同的 TCP 掃描方式腾窝。這些技巧包含隱秘掃描缀踪、連接掃描和僵尸掃描。為了理解這些掃描技巧的原理虹脯,理解 TCP 如何建立以及維護(hù)連接十分重要驴娃。TCP 是面向連接的協(xié)議,只有連接在兩個系統(tǒng)之間建立之后归形,數(shù)據(jù)才可以通過 TCP 傳輸。這個和建立 TCP 連接的過程通常使用三次握手指代鼻由。這個內(nèi)容暗指連接過程涉及的三個步驟暇榴。下圖展示了這個過程:

TCP SYN 封包從想要建立連接的設(shè)備發(fā)送厚棵,并帶有想要連接的設(shè)備端口。如果和接收端口關(guān)聯(lián)的服務(wù)接收了這個連接蔼紧,它會向請求系統(tǒng)返回 TCP 封包婆硬,其中 SYN 和 ACK 位都是激活的。連接僅僅在請求系統(tǒng)發(fā)送 TCP ACK 響應(yīng)的情況下建立奸例。這個三步過程在兩個系統(tǒng)之間建立了 TCP 會話彬犯。所有 TCP 端口掃描機(jī)制都會執(zhí)行這個過程的不同變種,來識別遠(yuǎn)程主機(jī)上的活動服務(wù)查吊。

連接掃描和隱秘掃描都非常易于理解谐区。連接掃描會為每個掃描端口建立完整的 TCP 連接。這就是說逻卖,對于每個掃描的端口宋列,會完成三次握手。如果連接成功建立评也,端口可以判斷為打開的炼杖。作為替代,隱秘掃描不建立完整的連接盗迟。隱秘掃描也指代 SYN 掃描或半開放掃描坤邪。對于每個掃描的端口,指向目標(biāo)端口發(fā)送單個 SYN 封包罚缕,所有回復(fù) SYN+ACK 封包的端口假設(shè)為運行活動服務(wù)艇纺。由于初始系統(tǒng)沒有發(fā)送最后的 ACK,連接只開啟了左半邊怕磨。這用于指代隱秘掃描喂饥,是因為日志系統(tǒng)只會記錄建立的鏈接,不會記錄任何這種掃描的痕跡肠鲫。

這一章要討論的最后一種 TCP 掃描技術(shù)叫做僵尸掃描员帮。僵尸掃描的目的是映射遠(yuǎn)程系統(tǒng)上的所有開放端口,而不會產(chǎn)生任何和系統(tǒng)交互過的痕跡导饲。僵尸掃描背后的工作原理十分復(fù)雜捞高。執(zhí)行僵尸掃描過程需要遵循以下步驟:

  1. 將某個遠(yuǎn)程系統(tǒng)看做你的僵尸。這個系統(tǒng)應(yīng)該擁有如下特征:

    • 這個系統(tǒng)是限制的渣锦,并且和網(wǎng)絡(luò)上其它系統(tǒng)沒有通信硝岗。
    • 這個系統(tǒng)使用遞增的 IPID 序列。
  2. 給僵尸主機(jī)發(fā)送 SYN+ACK 封包并記錄初始 IPID 值袋毙。

  3. 將封包的 IP 源地址偽造成僵尸主機(jī)的 IP 地址型檀,并將其發(fā)送給目標(biāo)系統(tǒng)。

  4. 取決于掃描目標(biāo)的端口狀態(tài)听盖,會發(fā)生下列事情之一:

    • 如果端口開放胀溺,掃描目標(biāo)會向僵尸主機(jī)返回 SYN+ACK 封包裂七,它相信僵尸主機(jī)發(fā)送了之前的 SYN 請求。這里仓坞,僵尸主機(jī)會以 RST 封包回復(fù)這個帶路不明的 SYN+ACK 封包背零,并且將 IPID 值增加 1。
    • 如果端口關(guān)閉无埃,掃描目標(biāo)會將 RST 響應(yīng)返回給僵尸主機(jī)徙瓶, 它相信僵尸主機(jī)發(fā)送了之前的 SYN 請求。如果這個值增加了 1嫉称,那么之后掃描目標(biāo)上的端口關(guān)閉侦镇,。如果這個值增加了 2澎埠,那么掃描目標(biāo)的端口開放虽缕。
  5. 向僵尸主機(jī)發(fā)送另一個 SYN+ACK 封包,并求出所返回的 RST 響應(yīng)中的最后的 IPID 值蒲稳。如果這個值增加了 1氮趋,那么掃描目標(biāo)上的端口關(guān)閉。如果增加了 2江耀,那么掃描目標(biāo)上的端口開放剩胁。

下面的圖展示了當(dāng)僵尸主機(jī)用于掃描開放端口時,所產(chǎn)生的交互祥国。

為了執(zhí)行僵尸掃描昵观,初始的 SYN+SCK 請求應(yīng)該發(fā)給僵尸系統(tǒng)來判斷返回 RST 封包中的當(dāng)前 IPID 值。之后舌稀,將偽造的 SYN 封包發(fā)往目標(biāo)咪表啊犬,帶有僵尸主機(jī)的源 IP 地址。如果端口開放壁查,掃描目標(biāo)會將 SYN+ACK 響應(yīng)發(fā)回僵尸主機(jī)觉至。由于將是主機(jī)并沒有實際發(fā)送之前的 SYN 請求,它會將 SYN+ACK 響應(yīng)看做來路不明睡腿,并將 RST 請求發(fā)送回目標(biāo)主機(jī)语御,因此 IPID 會增加 1。最后席怪,應(yīng)該向僵尸主機(jī)發(fā)送另一個 SYN+ACK 封包应闯,這會返回 RST 封包并再次增加 IPID。增加 2 的 IPID 表示所有這些事件都發(fā)生了挂捻,目標(biāo)端口是開放的碉纺。反之,如果掃描目標(biāo)的端口是關(guān)閉的,會發(fā)生一系列不同的事件骨田,這會導(dǎo)致 RST 響應(yīng)的 IPID 僅僅增加 1唬涧。

下面的圖展示了當(dāng)僵尸主機(jī)用于掃描關(guān)閉端口時,所產(chǎn)生的交互盛撑。

如果目標(biāo)端口關(guān)閉,發(fā)往僵尸系統(tǒng)的 RST 封包是之前偽造的 SYN 封包的響應(yīng)捧搞。由于 RST 封包沒有手造恢復(fù)抵卫,僵尸系統(tǒng)的 IPID 值不會增加。因此胎撇,返回給掃描系統(tǒng)的最后的 RST 封包的 IPID 值只會增加 1介粘。這個過程可以對每個想要掃描的端口執(zhí)行,它可以用于映射遠(yuǎn)程系統(tǒng)的開放端口晚树,而不需要留下掃描系統(tǒng)執(zhí)行了掃描的痕跡姻采。

3.3 Scapy UDP 掃描

Scapy 可以用于向網(wǎng)絡(luò)構(gòu)造和注入自定義封包。在這個秘籍中爵憎,Scapy 會用于掃描活動的 UDP 服務(wù)慨亲。這可以通過發(fā)送空的 UDP 封包給目標(biāo)端口,之后識別沒有回復(fù) ICMP 不可達(dá)響應(yīng)的端口來實現(xiàn)宝鼓。

準(zhǔn)備

為了使用 Scapy 執(zhí)行 UDP 掃描刑棵,你需要一個運行 UDP 網(wǎng)絡(luò)服務(wù)的遠(yuǎn)程服務(wù)器。這個例子中我們使用 Metasploitable2 實例來執(zhí)行任務(wù)愚铡。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍蛉签。

此外,這一節(jié)也需要編寫腳本的更多信息沥寥,請參考第一章中的“使用文本編輯器*VIM 和 Nano)碍舍。

操作步驟

使用 Scapy,我們就可以快速理解 UDP 掃描原理背后的底層規(guī)則邑雅。為了確認(rèn)任何給定端口上是否存在 UDP 服務(wù)片橡,我們需要讓服務(wù)器產(chǎn)生響應(yīng)。這個證明十分困難蒂阱,因為許多 UDP 服務(wù)都只回復(fù)服務(wù)特定的請求锻全。任何特定服務(wù)的知識都會使正面識別該服務(wù)變得容易。但是录煤,有一些通常技巧可以用于判斷服務(wù)是否運行于給定的 UDP 端口鳄厌,并且準(zhǔn)確率還不錯。我們將要使用 Scapy 操作的這種技巧是識別關(guān)閉的端口的 ICMP 不可達(dá)響應(yīng)妈踊。為了向任何給定端口發(fā)送 UDP 請求了嚎,我們首先需要構(gòu)建這個請求的一些層面,我們需要構(gòu)建的第一層就是 IP 層。

root@KaliLinux:~# scapy 
Welcome to Scapy (2.2.0) 
>>> i = IP() 
>>> i.display() 
###[ IP ]###  
    version= 4  
    ihl= None  
    tos= 0x0  
    len= None  
    id= 1  
    flags=   
    frag= 0  
    ttl= 64  
    proto= ip  
    chksum= None  
    src= 127.0.0.1  
    dst= 127.0.0.1  
    \options\ 
>>> i.dst = "172.16.36.135" 
>>> i.display()
###[ IP ]###  
    version= 4  
    ihl= None  
    tos= 0x0  
    len= None  
    id= 1
    flags=   
    frag= 0  
    ttl= 64  
    proto= ip  
    chksum= None  
    src= 172.16.36.180  
    dst= 172.16.36.135  
    \options\ 

為了構(gòu)建請求的 IP 層歪泳,我們需要將IP對象賦給變量i萝勤。通過調(diào)用display函數(shù),我們可以確定對象的屬性配置呐伞。通常敌卓,發(fā)送和接受地址都設(shè)為回送地址,127.0.0.1伶氢。這些值可以通過修改目標(biāo)地址來修改趟径,也就是設(shè)置i.dst為想要掃描的地址的字符串值。通過再次調(diào)用dislay函數(shù)癣防,我們看到不僅僅更新的目標(biāo)地址蜗巧,也自動更新了和默認(rèn)接口相關(guān)的源 IP 地址。現(xiàn)在我們構(gòu)建了請求的 IP 層蕾盯,我們可以構(gòu)建 UDP 層了幕屹。

>>> u = UDP() 
>>> u.display() 
###[ UDP ]###  
    sport= domain  
    dport= domain  
    len= None  
    chksum= None 
>>> u.dport 
53 

為了構(gòu)建請求的 UDP 層,我們使用和 IP 層相同的技巧级遭。在這個立即中望拖,UDP對象賦給了u變量。像之前提到的那樣挫鸽,默認(rèn)的配置可以通過調(diào)用display函數(shù)來確定靠娱。這里,我們可以看到來源和目標(biāo)端口的默認(rèn)值都是domain掠兄。你可能已經(jīng)猜到了像云,它表示和端口 53 相關(guān)的 DNS 服務(wù)。DNS 是個常見服務(wù)蚂夕,通常能在網(wǎng)絡(luò)系統(tǒng)上發(fā)現(xiàn)迅诬。為了確認(rèn)它,我們可以通過引用變量名稱和數(shù)量直接調(diào)用該值婿牍。之后侈贷,可以通過將屬性設(shè)置為新的目標(biāo)端口值來修改。

>>> u.dport = 123 
>>> u.display() 
###[ UDP ]###
    sport= domain  
    dport= ntp  
    len= None  
    chksum= None 

在上面的例子中等脂,目標(biāo)端口設(shè)為123俏蛮,這是 NTP 的端口。既然我們創(chuàng)建了 IP 和 UDP 層上遥,我們需要通過疊放這些層來構(gòu)造請求搏屑。

>>> request = (i/u) 
>>> request.display() 
###[ IP ]###  
    version= 4  
    ihl= None  
    tos= 0x0  
    len= None  
    id= 1  
    flags=   
    frag= 0  
    ttl= 64  
    proto= udp  
    chksum= None  
    src= 172.16.36.180  
    dst= 172.16.36.135  
    \options\ 
###[ UDP ]###     
    sport= domain     
    dport= ntp     
    len= None     
    chksum= None

我們可以通過以斜杠分離變量來疊放 IP 和 UDP 層。這些層面之后賦給了新的變量粉楚,它代表整個請求辣恋。我們之后可以調(diào)用dispaly函數(shù)來查看請求的配置亮垫。一旦構(gòu)建了請求,可以將其傳遞給sr1函數(shù)來分析響應(yīng):

>>> response = sr1(request) 
Begin emission: 
......Finished to send 1 packets. 
....*
Received 11 packets, got 1 answers, remaining 0 packets 
>>> response.display() 
###[ IP ]###  
    version= 4L  
    ihl= 5L  
    tos= 0xc0  
    len= 56  
    id= 63687  
    flags=   
    frag= 0L  
    ttl= 64  
    proto= icmp  
    chksum= 0xdfe1  
    src= 172.16.36.135  
    dst= 172.16.36.180  
    \options\ 
###[ ICMP ]###     
    type= dest-unreach     
    code= port-unreachable     
    chksum= 0x9e72     
    unused= 0 
###[ IP in ICMP ]###        
    version= 4L        
    ihl= 5L        
    tos= 0x0        
    len= 28        
    id= 1        
    flags=         
    frag= 0L        
    ttl= 64        
    proto= udp        
    chksum= 0xd974        
    src= 172.16.36.180        
    dst= 172.16.36.135        
    \options\
###[ UDP in ICMP ]###           
    sport= domain           
    dport= ntp           
    len= 8           
    chksum= 0x5dd2 

相同的請求可以不通過構(gòu)建和堆疊每一層來執(zhí)行伟骨。反之饮潦,我們使用單獨的一條命令,通過直接調(diào)用函數(shù)并傳遞合適的參數(shù):

>>> sr1(IP(dst="172.16.36.135")/UDP(dport=123)) 
..Begin emission: 
...*Finished to send 1 packets.

Received 6 packets, got 1 answers, remaining 0 packets 
<IP  version=4L ihl=5L tos=0xc0 len=56 id=63689 flags= frag=0L ttl=64 proto=icmp chksum=0xdfdf src=172.16.36.135 dst=172.16.36.180 options=[] |<ICMP  type=dest-unreach code=port-unreachable chksum=0x9e72 unused=0 |<IPerror  version=4L ihl=5L tos=0x0 len=28 id=1 flags= frag=0L ttl=64 proto=udp chksum=0xd974 src=172.16.36.180 dst=172.16.36.135 options=[] |<UDPerror  sport=domain dport=ntp len=8 chksum=0x5dd2 |>>>>

要注意這些請求的響應(yīng)包括 ICMP 封包携狭,它的type表示主機(jī)不可達(dá)继蜡,它的code表示端口不可達(dá)。這個響應(yīng)通常在 UDP 端口關(guān)閉時返回」渫龋現(xiàn)在壹瘟,我們應(yīng)該嘗試修改請求,使其發(fā)送到對應(yīng)遠(yuǎn)程系統(tǒng)上的真正服務(wù)的目標(biāo)端口鳄逾。為了實現(xiàn)它,我們將目標(biāo)端口修改會53灵莲,之后再次發(fā)送請求雕凹,像這樣:

>>> response = sr1(IP(dst="172.16.36.135")/UDP(dport=53),timeout=1,verbo se=1) 
Begin emission: 
Finished to send 1 packets.

Received 8 packets, got 0 answers, remaining 1 packets

當(dāng)相同請求發(fā)送到真正的服務(wù)時,沒有收到回復(fù)政冻。這是因為 DNS 服務(wù)運行在系統(tǒng)的 UDP 端口 53 上枚抵,僅僅響應(yīng)服務(wù)特定的請求。這一差異可以用于掃描 ICMP 不可達(dá)響應(yīng)明场,我們可以通過掃描無響應(yīng)的端口來確定潛在的服務(wù):

#!/usr/bin/python

import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)

from scapy.all import * 
import time 
import sys

if len(sys.argv) != 4:   
    print "Usage - ./udp_scan.py [Target-IP] [First Port] [Last Port]"   
    print "Example - ./udp_scan.py 10.0.0.5 1 100"   
    print "Example will UDP port scan ports 1 through 100 on 10.0.0.5" 
sys.exit()

ip = sys.argv[1] 
start = int(sys.argv[2]) 
end = int(sys.argv[3])

for port in range(start,end):   
    ans = sr1(IP(dst=ip)/UDP(dport=port),timeout=5,verbose=0)   
    time.sleep(1)   
    if ans == None:      
        print port   
    else:      
        pass 

上面的 Python 腳本向序列中前一百個端口中的每個端口發(fā)送 UDP 請求汽摹。這里沒有接受到任何響應(yīng),端口可以認(rèn)為是開放的苦锨。通過運行這個腳本逼泣,我們可以識別所有不返回 ICMP 不可達(dá)響應(yīng)的端口:

root@KaliLinux:~# chmod 777 udp_scan.py 
root@KaliLinux:~# ./udp_scan.py 
Usage - ./udp_scan.py [Target-IP] [First Port] [Last Port] 
Example - ./udp_scan.py 10.0.0.5 1 100 
Example will UDP port scan ports 1 through 100 on 10.0.0.5 
root@KaliLinux:~ # ./udp_scan.py 172.16.36.135 1 100 
53 
68 
69

超時為5秒用于接受受到 ICMP 不可達(dá)速率限制的響應(yīng)。即使擁有了更大的響應(yīng)接收窗口舟舒,這種方式的掃描仍然有時不可靠拉庶。這就是 UDP 探測掃描是更加高效的替代方案的原因。

工作原理

這個秘籍中秃励,UDP 掃描通過識別不回復(fù) ICMP 端口不可達(dá)響應(yīng)的端口來識別氏仗。這個過程非常耗費時間,因為 ICMP 端口不可達(dá)響應(yīng)通常有速率限制夺鲜。有時候皆尔,對于不生成這種響應(yīng)的系統(tǒng),這種方式會不可靠币励,并且 ICMP 通常會被防火墻過濾慷蠕。替代方式就是使用服務(wù)特定的探針來請求正面的響應(yīng)。這個技巧會在下面的兩個秘籍中展示食呻。

3.4 Nmap UDP 掃描

Nmap 擁有可以執(zhí)行遠(yuǎn)程系統(tǒng)上的 UDP 掃描的選項。Nmap 的 UDP 掃描方式更加復(fù)雜浪感,它通過注入服務(wù)特定的譚澤請求影兽,來請求正面的響應(yīng),用于確認(rèn)指定服務(wù)的存在讹开,來識別活動服務(wù)旦万。這個秘籍演示了如何使用 Nmap UDP 掃描來掃描單一端口镶蹋,多個端口贺归,甚至多個系統(tǒng)。

準(zhǔn)備

為了使用 Nmap 執(zhí)行 UDP 掃描秋冰,你需要一個運行 UDP 網(wǎng)絡(luò)服務(wù)的遠(yuǎn)程服務(wù)器婶熬。這個例子中我們使用 Metasploitable2 實例來執(zhí)行任務(wù)赵颅。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍。

操作步驟

UDP 掃描通常由挑戰(zhàn)性洲赵,消耗時間叠萍,非常麻煩绪商。許多系統(tǒng)會限制 ICMp 主機(jī)不可達(dá)響應(yīng)格郁,并且增加掃描大量端口或系統(tǒng)所需的時間總數(shù)独悴。幸運的是刻炒,Nmap 的開發(fā)者擁有更加復(fù)雜和高效的工具來識別遠(yuǎn)程系統(tǒng)上的 UDP 服務(wù)自沧。為了使用 Nmap 執(zhí)行 UDP 掃描拇厢,需要使用-sU選項,并帶上需要掃描的主機(jī) IP 地址访敌。

root@KaliLinux:~# nmap -sU 172.16.36.135

Starting Nmap 6.25 ( http://nmap.org ) at 2013-12-17 21:04 EST
Nmap scan report for 172.16.36.135 
Host is up (0.0016s latency). 
Not shown: 993 closed ports 
PORT     STATE         SERVICE 
53/udp   open          domain
68/udp   open|filtered dhcpc 
69/udp   open|filtered tftp 
111/udp  open          rpcbind 
137/udp  open          netbios-ns 
138/udp  open|filtered netbios-dgm 
2049/udp open          nfs 
MAC Address: 00:0C:29:3D:84:32 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 1043.91 seconds

雖然 Nmap 使用針對多種服務(wù)的自定義載荷來請求 UDP 端口的響應(yīng)寺旺。在沒有使用其它參數(shù)來指定目標(biāo)端口時,它仍舊需要大量時間來掃描默認(rèn)的 1000 個端口废赞。你可以從掃描元數(shù)據(jù)中看到唉地,默認(rèn)的掃描需要將近 20 分鐘來完成耘沼。作為替代,我們可以縮短所需的掃描時間菠隆,通過使用下列名Ingles執(zhí)行針對性掃描:

root@KaliLinux:~# nmap 172.16.36.135 -sU -p 53


Starting Nmap 6.25 ( http://nmap.org ) at 2013-12-17 21:05 EST 
Nmap scan report for 172.16.36.135 
Host is up (0.0010s latency). 
PORT   STATE SERVICE 53/udp open  
domain MAC Address: 00:0C:29:3D:84:32 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 13.09 seconds 

如果我們指定了需要掃描的特定端口骇径,執(zhí)行 UDP 掃描所需的的時間總量可以極大江少者春。這可以通過執(zhí)行 UDP 掃描并且使用-p選項指定端口來實現(xiàn)钱烟。在下面的例子中,我們僅僅在53端口上執(zhí)行掃描曙博,來嘗試識別 DNS 服務(wù)卦方。也可以在多個指定的端口上指定掃描盼砍,像這樣:

root@KaliLinux:~# nmap 172.16.36.135 -sU -p 1-100

Starting Nmap 6.25 ( http://nmap.org ) at 2013-12-17 21:06 EST 
Nmap scan report for 172.16.36.135 
Host is up (0.00054s latency). 
Not shown: 85 open|filtered ports
PORT   STATE  SERVICE 
8/udp  closed unknown 
15/udp closed unknown 
28/udp closed unknown 
37/udp closed time 
45/udp closed mpm 
49/udp closed tacacs 
53/udp open   domain 
56/udp closed xns-auth 
70/udp closed gopher 
71/udp closed netrjs-1 
74/udp closed netrjs-4 
89/udp closed su-mit-tg 
90/udp closed dnsix 
95/udp closed supdup 
96/udp closed dixie 
MAC Address: 00:0C:29:3D:84:32 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 23.56 seconds 

在這個例子中睬捶,掃描在前 100 個端口上執(zhí)行近刘。這通過使用破折號符號觉渴,并指定要掃描的第一個和最后一個端口來完成案淋。Nmap 之后啟動多個進(jìn)程,會同時掃描這兩個值之間的多有端口誉碴。在一些情況下黔帕,UDP 分析需要在多個系統(tǒng)上執(zhí)行成黄】可以使用破折號符號弧腥,并且定義最后一個 IP 段的值的范圍管搪,來掃描范圍內(nèi)的主機(jī)。

root@KaliLinux:~# nmap 172.16.36.0-255 -sU -p 53

Starting Nmap 6.25 ( http://nmap.org ) at 2013-12-17 21:08 EST 
Nmap scan report for 172.16.36.1 
Host is up (0.00020s latency). 
PORT   STATE  SERVICE 
53/udp closed domain 
MAC Address: 00:50:56:C0:00:08 (VMware)

Nmap scan report for 172.16.36.2 
Host is up (0.039s latency).
PORT   STATE  SERVICE 
53/udp closed domain 
MAC Address: 00:50:56:FF:2A:8E (VMware)

Nmap scan report for 172.16.36.132 
Host is up (0.00065s latency). 
PORT   STATE  SERVICE 
53/udp closed domain 
MAC Address: 00:0C:29:65:FC:D2 (VMware)

Nmap scan report for 172.16.36.135 
Host is up (0.00028s latency). 
PORT   STATE SERVICE 
53/udp open  domain 
MAC Address: 00:0C:29:3D:84:32 (VMware)

Nmap done: 256 IP addresses (6 hosts up) scanned in 42.81 seconds

這個例子中奇钞,掃描對172.16.36.0/24中所有活動主機(jī)執(zhí)行景埃。每個主機(jī)都被掃描來識別是否在 53 端口上運行了 DNS 服務(wù)谷徙。另一個用于掃描多個主機(jī)替代選項完慧,就是使用 IP 地址輸入列表屈尼。為了這樣做拴孤,使用-iL選項演熟,并且應(yīng)該傳入相同目錄下的文件名稱绽媒,或者單獨目錄下的完成文件路徑是辕。前者的例子如下:

root@KaliLinux:~# nmap -iL iplist.txt -sU -p 123

Starting Nmap 6.25 ( http://nmap.org ) at 2013-12-17 21:16 EST 
Nmap scan report for 172.16.36.1 
Host is up (0.00017s latency). 
PORT    STATE SERVICE 
123/udp open  ntp 
MAC Address: 00:50:56:C0:00:08 (VMware)

Nmap scan report for 172.16.36.2 
Host is up (0.00025s latency). 
PORT    STATE         SERVICE 
123/udp open|filtered ntp
MAC Address: 00:50:56:FF:2A:8E (VMware)

Nmap scan report for 172.16.36.132 
Host is up (0.00040s latency). 
PORT    STATE  SERVICE 
123/udp closed ntp 
MAC Address: 00:0C:29:65:FC:D2 (VMware)

Nmap scan report for 172.16.36.135 
Host is up (0.00031s latency). 
PORT    STATE  SERVICE 
123/udp closed ntp 
MAC Address: 00:0C:29:3D:84:32 (VMware)

Nmap done: 4 IP addresses (4 hosts up) scanned in 13.27 seconds

這個例子中获三,執(zhí)行了掃描來判斷 NTP 服務(wù)是否運行在當(dāng)前執(zhí)行目錄中的iplist.txt文件內(nèi)的任何系統(tǒng)的 123 端口上疙教。

工作原理

雖然 Nmap 仍然含有許多和 UDP 掃描相關(guān)的相同挑戰(zhàn)贞谓,它仍舊是個極其高效的解決方案裸弦,因為它使用最高效和快速的技巧組合來識別活動服務(wù)理疙。

3.5 Metasploit UDP 掃描

Metasploit 擁有一個輔助模塊窖贤,可以用于掃描特定的常用 UDP 端口赃梧。這個秘籍展示了如何使用這個輔助模塊來掃描運行 UDP 服務(wù)的單個系統(tǒng)或多個系統(tǒng)槽奕。

準(zhǔn)備

為了使用 Metasploit 執(zhí)行 UDP 掃描粤攒,你需要一個運行 UDP 網(wǎng)絡(luò)服務(wù)的遠(yuǎn)程服務(wù)器。這個例子中我們使用 Metasploitable2 實例來執(zhí)行任務(wù)焕济。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍晴弃。

操作步驟

在定義所運行的模塊之前上鞠,需要打開 Metasploit芍阎。為了在 Kali 中打開它,我們在終端會話中執(zhí)行msfconsole命令缨恒。

root@KaliLinux:~# msfconsole 
# cowsay++
 ____________
 < metasploit >
 -----------
        \   ,__,       
         \  (oo)____           
            (__)    )\           
               ||--|| *

Large pentest? List, sort, group, tag and search your hosts and services in Metasploit Pro -- type 'go_pro' to launch it now.
       
       =[ metasploit v4.6.0-dev [core:4.6 api:1.0] 
+ -- --=[ 1053 exploits - 590 auxiliary - 174 post 
+ -- --=[ 275 payloads - 28 encoders - 8 nops

msf > use auxiliary/scanner/discovery/udp_sweep 
msf  auxiliary(udp_sweep) > show options

Module options (auxiliary/scanner/discovery/udp_sweep):
   
    Name       Current Setting  Required  Description   
    ----       ---------------  --------  ----------   
    BATCHSIZE  256              yes       The number of hosts to probe in each set   
    CHOST                       no        The local client address   
    RHOSTS                      yes       The target address range or CIDR identifier   
    THREADS    1                yes       The number of concurrent threads

為了在 Metasploit 中運行 UDP 掃描模塊骗露,我們以模塊的相對路徑調(diào)用use命令萧锉。一旦選擇了模塊叶洞,可以使用show options命令來確認(rèn)或更改掃描配置京办。這個命令會展示四個列的表格惭婿,包括name财饥、current settings沾瓦、requireddescription贯莺。name列標(biāo)出了每個可配置變量的名稱缕探。current settings列列出了任何給定變量的現(xiàn)有配置。required列標(biāo)出對于任何給定變量潭兽,值是否是必須的。description列描述了每個變量的功能怒坯。任何給定變量的值可以使用set命令,并且將新的值作為參數(shù)來修改。

msf  auxiliary(udp_sweep) > set RHOSTS 172.16.36.135 
RHOSTS => 172.16.36.135 
msf  auxiliary(udp_sweep) > set THREADS 20 
THREADS => 20 
msf  auxiliary(udp_sweep) > show options

Module options (auxiliary/scanner/discovery/udp_sweep):

    Name       Current Setting  Required  Description   
    ----       ---------------  --------  ----------   
    BATCHSIZE  256              yes       The number of hosts to probe in each set   
    CHOST                       no        The local client address   
    RHOSTS     172.16.36.135    yes       The target address range or CIDR identifier   
    THREADS    20               yes       The number of concurrent threads

在上面的例子中汪茧,RHOSTS值修改為我們打算掃描的遠(yuǎn)程系統(tǒng)的 IP 地址舱污。地外,線程數(shù)量修改為 20珠插。THREADS的值定位了在后臺執(zhí)行的當(dāng)前任務(wù)數(shù)量。確定線程數(shù)量涉及到尋找一個平衡顾患,既能提升任務(wù)速度,又不會過度消耗系統(tǒng)資源膘流。對于多數(shù)系統(tǒng),20 個線程可以足夠快彭谁,并且相當(dāng)合理。修改了必要的變量之后狭园,可以再次使用show options命令來驗證。一旦所需配置驗證完畢绎谦,就可以執(zhí)行掃描了包个。

msf  auxiliary(udp_sweep) > run

[*] Sending 12 probes to 172.16.36.135->172.16.36.135 (1 hosts) 
[*] Discovered Portmap on 172.16.36.135:111 (100000 v2 TCP(111), 100000 v2 UDP(111), 100024 v1 UDP(36429), 100024 v1 TCP(56375), 100003 v2 UDP(2049), 100003 v3 UDP(2049), 100003 v4 UDP(2049), 100021 v1 UDP(34241), 100021 v3 UDP(34241), 100021 v4 UDP(34241), 100003 v2 TCP(2049), 100003 v3 TCP(2049), 100003 v4 TCP(2049), 100021 v1 TCP(50333), 100021 v3 TCP(50333), 100021 v4 TCP(50333), 100005 v1 UDP(47083), 100005 v1 TCP(57385), 100005 v2 UDP(47083), 100005 v2 TCP(57385), 100005 v3 UDP(47083), 100005 v3 TCP(57385)) 
[*] Discovered NetBIOS on 172.16.36.135:137 (METASPLOITABLE:<00>:U :METASPLOITABLE:<03>:U :METASPLOITABLE:<20>:U :__MSBROWSE__:<01>:G :WORKGROUP:<00>:G :WORKGROUP:<1d>:U :WORKGROUP:<1e>:G :00:00:00:00:00:00) 
[*] Discovered DNS on 172.16.36.135:53 (BIND 9.4.2) 
[*] Scanned 1 of 1 hosts (100% complete) 
[*] Auxiliary module execution completed

Metasploit 中所使用的run命令用于執(zhí)行所選的輔助模塊搀菩。在上面的例子中歧蒋,run命令對指定的 IP 地址執(zhí)行 UDP 掃描。udp_sweep模塊也可以使用破折號符號,對地址序列執(zhí)行掃描实束。

msf  auxiliary(udp_sweep) > set RHOSTS 172.16.36.1-10 
RHOSTS => 172.16.36.1-10 
msf  auxiliary(udp_sweep) > show options

Module options (auxiliary/scanner/discovery/udp_sweep):

    Name       Current Setting  Required  Description   
    ----       ---------------  --------  ----------   
    BATCHSIZE  256              yes       The number of hosts to probe in each set   
    CHOST                       no        The local client address   
    RHOSTS     172.16.36.1-10   yes       The target address range or CIDR identifier   
    THREADS    20               yes       The number of concurrent threads

msf  auxiliary(udp_sweep) > run

[*] Sending 12 probes to 172.16.36.1->172.16.36.10 (10 hosts) 
[*] Discovered NetBIOS on 172.16.36.1:137 (MACBOOKPRO-3E0F:<00>:U :00:50:56:c0:00:08) 
[*] Discovered NTP on 172.16.36.1:123 (NTP v4 (unsynchronized)) 
[*] Discovered DNS on 172.16.36.2:53 (BIND 9.3.6-P1-RedHat-9.3.6-20. P1.el5_8.6)
[*] Scanned 10 of 10 hosts (100% complete) 
[*] Auxiliary module execution completed

在上面的例子中避矢,UDP 掃描對 10 個主機(jī)地址執(zhí)行,它們由RHOSTS變量指定。與之相似,RHOSTS可以使用CIDR記法來定義網(wǎng)絡(luò)范圍,像這樣:

msf  auxiliary(udp_sweep) > set RHOSTS 172.16.36.0/24 
RHOSTS => 172.16.36.0/24 
msf  auxiliary(udp_sweep) > show options

Module options (auxiliary/scanner/discovery/udp_sweep):

   Name       Current Setting  Required  Description   
   ----       ---------------  --------  ----------   
   BATCHSIZE  256              yes       The number of hosts to probe in each set   
   CHOST                       no        The local client address   
   RHOSTS     172.16.36.0/24   yes       The target address range or CIDR identifier   
   THREADS    20               yes       The number of concurrent threads

msf  auxiliary(udp_sweep) > run

[*] Sending 12 probes to 172.16.36.0->172.16.36.255 (256 hosts) 
[*] Discovered Portmap on 172.16.36.135:111 (100000 v2 TCP(111), 100000 v2 UDP(111), 100024 v1 UDP(36429), 100024 v1 TCP(56375), 100003 v2 UDP(2049), 100003 v3 UDP(2049), 100003 v4 UDP(2049), 100021 v1 UDP(34241), 100021 v3 UDP(34241), 100021 v4 UDP(34241), 100003 v2 TCP(2049), 100003 v3 TCP(2049), 100003 v4 TCP(2049), 100021 v1 TCP(50333), 100021 v3 TCP(50333), 100021 v4 TCP(50333), 100005 v1 UDP(47083), 100005 v1 TCP(57385), 100005 v2 UDP(47083), 100005 v2 TCP(57385), 100005 v3 UDP(47083), 100005 v3 TCP(57385)) 
[*] Discovered NetBIOS on 172.16.36.135:137 (METASPLOITABLE:<00>:U :METASPLOITABLE:<03>:U :METASPLOITABLE:<20>:U :__MSBROWSE__:<01>:G :WORKGROUP:<00>:G :WORKGROUP:<1d>:U :WORKGROUP:<1e>:G :00:00:00:00:00:00) 
[*] Discovered NTP on 172.16.36.1:123 (NTP v4 (unsynchronized)) 
[*] Discovered NetBIOS on 172.16.36.1:137 (MACBOOKPRO-3E0F:<00>:U :00:50:56:c0:00:08) [*] Discovered DNS on 172.16.36.0:53 (BIND 9.3.6-P1-RedHat-9.3.6-20. P1.el5_8.6)

[*] Discovered DNS on 172.16.36.2:53 (BIND 9.3.6-P1-RedHat-9.3.6-20. P1.el5_8.6) 
[*] Discovered DNS on 172.16.36.135:53 (BIND 9.4.2) 
[*] Discovered DNS on 172.16.36.255:53 (BIND 9.3.6-P1-RedHat-9.3.6-20. P1.el5_8.6) 
[*] Scanned 256 of 256 hosts (100% complete) 
[*] Auxiliary module execution completed

工作原理

Metasploit 輔助模塊中的 UDP 掃描比起 Nmap 更加簡單。它僅僅針對有限的服務(wù)數(shù)量椭赋,但是在識別端口上的活動服務(wù)方面更加高效向抢,并且比其它可用的 UDP 掃描器更快。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡榕暇,警方通過查閱死者的電腦和手機(jī)筒饰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事∏葑鳎” “怎么了爆侣?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵乎赴,是天一觀的道長饿序。 經(jīng)常有香客問我度宦,道長划鸽,這世上最難降的妖魔是什么嫂用? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮丈冬,結(jié)果婚禮上嘱函,老公的妹妹穿的比我還像新娘。我一直安慰自己埂蕊,他們只是感情好往弓,可當(dāng)我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蓄氧,像睡著了一般函似。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上喉童,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天撇寞,我揣著相機(jī)與錄音,去河邊找鬼堂氯。 笑死重抖,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的祖灰。 我是一名探鬼主播钟沛,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼局扶!你這毒婦竟也來了恨统?” 一聲冷哼從身側(cè)響起叁扫,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎畜埋,沒想到半個月后莫绣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡悠鞍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年对室,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咖祭。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡掩宜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出么翰,到底是詐尸還是另有隱情牺汤,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布浩嫌,位于F島的核電站檐迟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏码耐。R本人自食惡果不足惜追迟,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望骚腥。 院中可真熱鬧敦间,春花似錦、人聲如沸桦沉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纯露。三九已至剿骨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間埠褪,已是汗流浹背浓利。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留钞速,地道東北人贷掖。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像渴语,于是被迫代替她去往敵國和親苹威。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容