1. 程式人生 > >Kali Linux 網路掃描祕籍 第三章 埠掃描(一)

Kali Linux 網路掃描祕籍 第三章 埠掃描(一)

第三章 埠掃描(一)

作者:Justin Hutchens

譯者:飛龍

3.1 UDP埠掃描

由於 TCP 是更加常用的傳輸層協議,使用 UDP 的服務常常被人遺忘。雖然 UDP 服務本質上擁有被忽視的趨勢,這些服務可以列舉,用來完全理解任何給定目標的工具面,這相當關鍵。UDP 掃描通常由挑戰性,麻煩,並且消耗時間。這一章的前三個祕籍會涉及如何在 Kali 中使用不同工具執行 UDP 掃描。理解 UDP 掃描可以用兩種不同的方式執行相當重要。一種技巧會在第一個祕籍中強調,它僅僅依賴於 ICMP 埠不可達響應。這型別的掃描依賴於任何沒有繫結某個服務的 UDP 埠都會返回 ICP 埠不可達響應的假設。所以不返回這種響應就代表擁有服務。雖然這種方法在某些情況下十分高效,在主機不生成埠不可達響應,或者埠不可達響應存在速率限制或被防火牆過濾的情況下,它也會返回不精確的結果。一種替代方式會在第二個和第三個祕籍中講解,是使用服務特定的探針來嘗試請求響應,以表明所預期的服務執行在目標埠上。這個方法非常高效,也非常消耗時間。

3.2 TCP 掃描

這一章中,會提及幾個不同的 TCP 掃描方式。這些技巧包含隱祕掃描、連線掃描和殭屍掃描。為了理解這些掃描技巧的原理,理解 TCP 如何建立以及維護連線十分重要。TCP 是面向連線的協議,只有連線在兩個系統之間建立之後,資料才可以通過 TCP 傳輸。這個和建立 TCP 連線的過程通常使用三次握手指代。這個內容暗指連線過程涉及的三個步驟。下圖展示了這個過程:

TCP SYN 封包從想要建立連線的裝置傳送,並帶有想要連線的裝置埠。如果和接收埠關聯的服務接收了這個連線,它會向請求系統返回 TCP 封包,其中 SYN 和 ACK 位都是啟用的。連線僅僅在請求系統傳送 TCP ACK 響應的情況下建立。這個三步過程在兩個系統之間建立了 TCP 會話。所有 TCP 埠掃描機制都會執行這個過程的不同變種,來識別遠端主機上的活動服務。

連線掃描和隱祕掃描都非常易於理解。連線掃描會為每個掃描埠建立完整的 TCP 連線。這就是說,對於每個掃描的埠,會完成三次握手。如果連線成功建立,埠可以判斷為開啟的。作為替代,隱祕掃描不建立完整的連線。隱祕掃描也指代 SYN 掃描或半開放掃描。對於每個掃描的埠,指向目標埠傳送單個 SYN 封包,所有回覆 SYN+ACK 封包的埠假設為執行活動服務。由於初始系統沒有傳送最後的 ACK,連線只開啟了左半邊。這用於指代隱祕掃描,是因為日誌系統只會記錄建立的連結,不會記錄任何這種掃描的痕跡。

這一章要討論的最後一種 TCP 掃描技術叫做殭屍掃描。殭屍掃描的目的是對映遠端系統上的所有開放埠,而不會產生任何和系統互動過的痕跡。殭屍掃描背後的工作原理十分複雜。執行殭屍掃描過程需要遵循以下步驟:

  1. 將某個遠端系統看做你的殭屍。這個系統應該擁有如下特徵:

    • 這個系統是限制的,並且和網路上其它系統沒有通訊。
    • 這個系統使用遞增的 IPID 序列。
  2. 給殭屍主機發送 SYN+ACK 封包並記錄初始 IPID 值。

  3. 將封包的 IP 源地址偽造成殭屍主機的 IP 地址,並將其傳送給目標系統。

  4. 取決於掃描目標的埠狀態,會發生下列事情之一:

    • 如果埠開放,掃描目標會向殭屍主機返回 SYN+ACK 封包,它相信殭屍主機發送了之前的 SYN 請求。這裡,殭屍主機會以 RST 封包回覆這個帶路不明的 SYN+ACK 封包,並且將 IPID 值增加 1。
    • 如果埠關閉,掃描目標會將 RST 響應返回給殭屍主機, 它相信殭屍主機發送了之前的 SYN 請求。如果這個值增加了 1,那麼之後掃描目標上的埠關閉,。如果這個值增加了 2,那麼掃描目標的埠開放。
  5. 向殭屍主機發送另一個 SYN+ACK 封包,並求出所返回的 RST 響應中的最後的 IPID 值。如果這個值增加了 1,那麼掃描目標上的埠關閉。如果增加了 2,那麼掃描目標上的埠開放。

下面的圖展示了當殭屍主機用於掃描開放埠時,所產生的互動。

為了執行殭屍掃描,初始的 SYN+SCK 請求應該發給殭屍系統來判斷返回 RST 封包中的當前 IPID 值。之後,將偽造的 SYN 封包發往目標咪表,帶有殭屍主機的源 IP 地址。如果埠開放,掃描目標會將 SYN+ACK 響應發回殭屍主機。由於將是主機並沒有實際傳送之前的 SYN 請求,它會將 SYN+ACK 響應看做來路不明,並將 RST 請求傳送回目標主機,因此 IPID 會增加 1。最後,應該向殭屍主機發送另一個 SYN+ACK 封包,這會返回 RST 封包並再次增加 IPID。增加 2 的 IPID 表示所有這些事件都發生了,目標埠是開放的。反之,如果掃描目標的埠是關閉的,會發生一系列不同的事件,這會導致 RST 響應的 IPID 僅僅增加 1。

下面的圖展示了當殭屍主機用於掃描關閉埠時,所產生的互動。

如果目標埠關閉,發往殭屍系統的 RST 封包是之前偽造的 SYN 封包的響應。由於 RST 封包沒有手造恢復,殭屍系統的 IPID 值不會增加。因此,返回給掃描系統的最後的 RST 封包的 IPID 值只會增加 1。這個過程可以對每個想要掃描的埠執行,它可以用於對映遠端系統的開放埠,而不需要留下掃描系統執行了掃描的痕跡。

3.3 Scapy UDP 掃描

Scapy 可以用於向網路構造和注入自定義封包。在這個祕籍中,Scapy 會用於掃描活動的 UDP 服務。這可以通過傳送空的 UDP 封包給目標埠,之後識別沒有回覆 ICMP 不可達響應的埠來實現。

準備

為了使用 Scapy 執行 UDP 掃描,你需要一個執行 UDP 網路服務的遠端伺服器。這個例子中我們使用 Metasploitable2 例項來執行任務。配置 Metasploitable2 的更多資訊請參考第一章中的“安裝 Metasploitable2”祕籍。

此外,這一節也需要編寫指令碼的更多資訊,請參考第一章中的“使用文字編輯器*VIM 和 Nano)。

操作步驟

使用 Scapy,我們就可以快速理解 UDP 掃描原理背後的底層規則。為了確認任何給定埠上是否存在 UDP 服務,我們需要讓伺服器產生響應。這個證明十分困難,因為許多 UDP 服務都只回復服務特定的請求。任何特定服務的知識都會使正面識別該服務變得容易。但是,有一些通常技巧可以用於判斷服務是否運行於給定的 UDP 埠,並且準確率還不錯。我們將要使用 Scapy 操作的這種技巧是識別關閉的埠的 ICMP 不可達響應。為了向任何給定埠傳送 UDP 請求,我們首先需要構建這個請求的一些層面,我們需要構建的第一層就是 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\ 

為了構建請求的 IP 層,我們需要將IP物件賦給變數i。通過呼叫display函式,我們可以確定物件的屬性配置。通常,傳送和接受地址都設為回送地址,127.0.0.1。這些值可以通過修改目標地址來修改,也就是設定i.dst為想要掃描的地址的字串值。通過再次呼叫dislay函式,我們看到不僅僅更新的目標地址,也自動更新了和預設介面相關的源 IP 地址。現在我們構建了請求的 IP 層,我們可以構建 UDP 層了。

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

為了構建請求的 UDP 層,我們使用和 IP 層相同的技巧。在這個立即中,UDP物件賦給了u變數。像之前提到的那樣,預設的配置可以通過呼叫display函式來確定。這裡,我們可以看到來源和目標埠的預設值都是domain。你可能已經猜到了,它表示和埠 53 相關的 DNS 服務。DNS 是個常見服務,通常能在網路系統上發現。為了確認它,我們可以通過引用變數名稱和數量直接呼叫該值。之後,可以通過將屬性設定為新的目標埠值來修改。

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

在上面的例子中,目標埠設為123,這是 NTP 的埠。既然我們建立了 IP 和 UDP 層,我們需要通過疊放這些層來構造請求。

>>> 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 層。這些層面之後賦給了新的變數,它代表整個請求。我們之後可以呼叫dispaly函式來檢視請求的配置。一旦構建了請求,可以將其傳遞給sr1函式來分析響應:

>>> 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 

相同的請求可以不通過構建和堆疊每一層來執行。反之,我們使用單獨的一條命令,通過直接呼叫函式並傳遞合適的引數:

>>> 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 |>>>>

要注意這些請求的響應包括 ICMP 封包,它的type表示主機不可達,它的code表示埠不可達。這個響應通常在 UDP 埠關閉時返回。現在,我們應該嘗試修改請求,使其傳送到對應遠端系統上的真正服務的目標埠。為了實現它,我們將目標埠修改會53,之後再次傳送請求,像這樣:

>>> 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

當相同請求傳送到真正的服務時,沒有收到回覆。這是因為 DNS 服務執行在系統的 UDP 埠 53 上,僅僅響應服務特定的請求。這一差異可以用於掃描 ICMP 不可達響應,我們可以通過掃描無響應的埠來確定潛在的服務:

#!/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 指令碼向序列中前一百個埠中的每個埠傳送 UDP 請求。這裡沒有接受到任何響應,埠可以認為是開放的。通過執行這個指令碼,我們可以識別所有不返回 ICMP 不可達響應的埠:

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 不可達速率限制的響應。即使擁有了更大的響應接收視窗,這種方式的掃描仍然有時不可靠。這就是 UDP 探測掃描是更加高效的替代方案的原因。

工作原理

這個祕籍中,UDP 掃描通過識別不回覆 ICMP 埠不可達響應的埠來識別。這個過程非常耗費時間,因為 ICMP 埠不可達響應通常有速率限制。有時候,對於不生成這種響應的系統,這種方式會不可靠,並且 ICMP 通常會被防火牆過濾。替代方式就是使用服務特定的探針來請求正面的響應。這個技巧會在下面的兩個祕籍中展示。

3.4 Nmap UDP 掃描

Nmap 擁有可以執行遠端系統上的 UDP 掃描的選項。Nmap 的 UDP 掃描方式更加複雜,它通過注入服務特定的譚澤請求,來請求正面的響應,用於確認指定服務的存在,來識別活動服務。這個祕籍演示瞭如何使用 Nmap UDP 掃描來掃描單一埠,多個埠,甚至多個系統。

準備

為了使用 Nmap 執行 UDP 掃描,你需要一個執行 UDP 網路服務的遠端伺服器。這個例子中我們使用 Metasploitable2 例項來執行任務。配置 Metasploitable2 的更多資訊請參考第一章中的“安裝 Metasploitable2”祕籍。

操作步驟

UDP 掃描通常由挑戰性,消耗時間,非常麻煩。許多系統會限制 ICMp 主機不可達響應,並且增加掃描大量埠或系統所需的時間總數。幸運的是,Nmap 的開發者擁有更加複雜和高效的工具來識別遠端系統上的 UDP 服務。為了使用 Nmap 執行 UDP 掃描,需要使用-sU選項,並帶上需要掃描的主機 IP 地址。

[email protected]:~# 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 使用針對多種服務的自定義載荷來請求 UDP 埠的響應。在沒有使用其它引數來指定目標埠時,它仍舊需要大量時間來掃描預設的 1000 個埠。你可以從掃描元資料中看到,預設的掃描需要將近 20 分鐘來完成。作為替代,我們可以縮短所需的掃描時間,通過使用下列名Ingles執行鍼對性掃描:

[email protected]:~# 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 

如果我們指定了需要掃描的特定埠,執行 UDP 掃描所需的的時間總量可以極大江少。這可以通過執行 UDP 掃描並且使用-p選項指定埠來實現。在下面的例子中,我們僅僅在53埠上執行掃描,來嘗試識別 DNS 服務。也可以在多個指定的埠上指定掃描,像這樣:

[email protected]:~# 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 個埠上執行。這通過使用破折號符號,並指定要掃描的第一個和最後一個埠來完成。Nmap 之後啟動多個程序,會同時掃描這兩個值之間的多有埠。在一些情況下,UDP 分析需要在多個系統上執行。可以使用破折號符號,並且定義最後一個 IP 段的值的範圍,來掃描範圍內的主機。

[email protected]:~# 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中所有活動主機執行。每個主機都被掃描來識別是否在 53 埠上運行了 DNS 服務。另一個用於掃描多個主機替代選項,就是使用 IP 地址輸入列表。為了這樣做,使用-iL選項,並且應該傳入相同目錄下的檔名稱,或者單獨目錄下的完成檔案路徑。前者的例子如下:

[email protected]:~# 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

這個例子中,執行了掃描來判斷 NTP 服務是否執行在當前執行目錄中的iplist.txt檔案內的任何系統的 123 埠上。

工作原理

雖然 Nmap 仍然含有許多和 UDP 掃描相關的相同挑戰,它仍舊是個極其高效的解決方案,因為它使用最高效和快速的技巧組合來識別活動服務。

3.5 Metasploit UDP 掃描

Metasploit 擁有一個輔助模組,可以用於掃描特定的常用 UDP 埠。這個祕籍展示瞭如何使用這個輔助模組來掃描執行 UDP 服務的單個系統或多個系統。

準備

為了使用 Metasploit 執行 UDP 掃描,你需要一個執行 UDP 網路服務的遠端伺服器。這個例子中我們使用 Metasploitable2 例項來執行任務。配置 Metasploitable2 的更多資訊請參考第一章中的“安裝 Metasploitable2”祕籍。

操作步驟

在定義所執行的模組之前,需要開啟 Metasploit。為了在 Kali 中開啟它,我們在終端會話中執行msfconsole命令。

[email protected]:~# 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 掃描模組,我們以模組的相對路徑呼叫use命令。一旦選擇了模組,可以使用show options命令來確認或更改掃描配置。這個命令會展示四個列的表格,包括namecurrent settingsrequireddescriptionname列標出了每個可配置變數的名稱。current settings列列出了任何給定變數的現有配置。required列標出對於任何給定變數,值是否是必須的。description列描述了每個變數的功能。任何給定變數的值可以使用set命令,並且將新的值作為引數來修改。

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值修改為我們打算掃描的遠端系統的 IP 地址。地外,執行緒數量修改為 20。THREADS的值定位了在後臺執行的當前任務數量。確定執行緒數量涉及到尋找一個平衡,既能提升任務速度,又不會過度消耗系統資源。對於多數系統,20 個執行緒可以足夠快,並且相當合理。修改了必要的變數之後,可以再次使用show options命令來驗證。一旦所需配置驗證完畢,就可以執行掃描了。

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命令用於執行所選的輔助模組。在上面的例子中,run命令對指定的 IP 地址執行 UDP 掃描。udp_sweep模組也可以使用破折號符號,對地址序列執行掃描。

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 個主機地址執行,它們由RHOSTS變數指定。與之相似,RHOSTS可以使用CIDR記法來定義網路範圍,像這樣:

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 更加簡單。它僅僅針對有限的服務數量,但是在識別埠上的活動服務方面更加高效,並且比其它可用的 UDP 掃描器更快。

相關推薦

Kali Linux 網路掃描祕籍 掃描

第三章 埠掃描(一) 作者:Justin Hutchens 譯者:飛龍 3.1 UDP埠掃描 由於 TCP 是更加常用的傳輸層協議,使用 UDP 的服務常常被人遺忘。雖然 UDP 服務本質上擁有被忽視的趨勢,這些服務可以列舉,

Kali Linux 網路掃描祕籍 掃描

第三章 埠掃描(二) 作者:Justin Hutchens 譯者:飛龍 3.6 Scapy 隱祕掃描 執行 TCP 埠掃描的一種方式就是執行一部分。目標埠上的 TCP 三次握手用於識別埠是否接受連線。這一型別的掃描指代隱祕掃描

選擇結構

一、boolean 型別: 值只有兩個:true(真)和false(假) 二、常用的關係符: > < >= <= != == 作用:用來比較運算結果,值是boolean型別。. 三、if選擇結構的語法: if(boolean){ 程式碼塊 } 含義:如果boole

編譯原理 詞法分析

3.1.1 為什麼編譯器要把詞法分析和語法分析分開 3.1.2 詞法單元、模式和詞素(重要)   例:   3.1.3 詞法單元的屬性(重要)   詞法單元的屬性是用來記錄相對應的詞素的一些相關屬性資訊。 例: int x = 10 + 20

編譯原理 詞法分析

3.6 有窮自動機(非常重要) 3.6.1 不確定的有窮自動機(重要) 例:  狀態0是開始狀態, 在狀態0上輸入符號b會進入狀態0,輸入a可能進去狀態0也有可能進入狀態1。所以對於狀態0來說一個確定的輸入符號a他有兩種離開狀態,這就是一種不確定的狀態。   &nbs

windows 程式設計 讀書筆記

     孃的,今天晚上在陽臺做飯把水管一腳踢爆了,水流到下面的住戶的陽臺,讓個老孃們把我罵了一頓,本著做錯事的原則,我裝的很紳士還說了個對不起,擦,真是條純漢子,能屈能伸。    

記憶體池—— 關於TcMalloc2

週末抽空看了一下tcmalloc,瞭解了個大概。下面記錄一下。 一. 原理 tcmalloc就是一個記憶體分配器,管理堆記憶體,主要影響malloc和free,用於降低頻繁分配、釋放記憶體造成的效能損耗,並且有效地控制記憶體碎片。glibc中的記憶體分配器是ptmall

重讀《學習JavaScript資料結構與演算法-版》- 6 連結串列

定場詩 傷情最是晚涼天,憔悴廝人不堪言; 邀酒摧腸三杯醉.尋香驚夢五更寒。 釵頭鳳斜卿有淚,荼蘼花了我無緣; 小樓寂寞新雨月.也難如鉤也難圓。 前言 本章為重讀《學習JavaScript資料結構與演算法》的系列文章,該章節主要講述資料結構-連結串列,以及實現連結串列的過程和原理。 連結串列 連結串列,為什麼要

Windows核心編程之核心總結 進程2018.6.8)

Windows核心編程之核心總結學習目標 第四章進程的學習可謂是任重而道遠,雖然不難,但知識量很多,也比較零散,需要多總結,腦海裏才有進程的框架。所以,我把本章分為幾個小節來講完。我還是一如既往的添加輔助性內容,希望對於小白有所幫助。而比我流弊的大有人在,大神們可以跳過輔助性內容。本小節的學習目標如下:1.C

檔案管理——檔案和檔案系統

**資料項:**描述物件某種屬性的字符集;是資料組織中可以命名的最小邏輯資料單位。 **記錄:**一組相關資料項集合,描述物件某方面的屬性; **關鍵字:**一個記錄中的一個或幾個資料項的集合,用於唯一的標識一個記錄。 檔案:由建立者定義的、具有檔名的一組相關元素的集合。 有結構:由相關記錄

儲存器管理

4.1 儲存器的層次結構 1.計算機的儲存層次:最高層為CPU暫存器,中間為主存,最底層是輔存。 2.根據功能劃分:暫存器、快取記憶體、主儲存器、磁碟快取、固定磁碟、可移動儲存介質等6層。 暫存器、快取記憶體、主儲存器和磁碟快取均屬於作業系統儲存管理的管轄範疇,掉電後儲存的資訊不

使用者管理

  今天,我們來做介面。    首先我們可以找官方介紹,把程式碼貼到User.vue中。看看有沒有正常顯示出來    1 2 3 <template> 4 <div > 5 <el-table 6

迴圈結構

一、while迴圈: 1.語法:while(迴圈條件){ //迴圈操作 } 2.迴圈條件是一個bolean型別的結果。 3.特點:先判斷,後執行! 二、程式除錯: 1.步驟: 設定斷點 單步執行 觀察變數 三、 1.i+=2 等價於i=i+2; 2.i++ 等價於i=i+1; 3.sum

福州天——資料結構

    第三天了,我們學了程式設計的最基礎之一——資料結構。一個程式由兩部分組成(引用山楂猹老師的話),其中有一部分就是難懂的演算法,另一種就是噁心的資料結構。所以說,資料結構也是OI中非常重要的一塊。我們平常所學的,大多數都是演算法。當然,演算法是我們一生都要學習的,所謂

FPGA定點小數計算Verilog版篇——除法運算

更多精彩內容,請微信搜尋“FPGAer俱樂部”關注我們。 定點小數除法運算,相比加法和乘法來說要複雜很多了,但是演算法的基本思想還是很簡單的。和整數除法類似,演算法的核心思想就是,將除法運算轉換為移位和減法運算。從具體實現的角度來看,一般有兩種方式: 一種是除數不變,擴充

《利用python進行資料分析》 時間序列

stamp = ts.index[2] print ts[stamp],'\n' #還有更方便的用法,傳入可以被解釋為日期的字串 print ts['1/10/2011'] print ts['20110110'],'\n' #對於較長的時間序列,只需傳入“年”或“年月”即可輕鬆選取資料切片 long_ts

Kali Linux 網路掃描祕籍 自動化 Kali 工具

第八章 自動化 Kali 工具 作者:Justin Hutchens 譯者:飛龍 Kali Linux 滲透測試平臺提供了大量高效的工具,來完成企業滲透測試中所需的大多數常見任務。 然而,有時單個工具不足以完成給定的任務。 與構

Kali Linux Web 滲透測試祕籍 自動化掃描

第五章 自動化掃描 作者:Gilberto Najera-Gutierrez 譯者:飛龍 簡介 幾乎每個滲透測試專案都需要遵循嚴格的日程,多數由客戶的需求或開發交談日期決定。對於滲透測試者,擁有一種工具,它可以在很短的時間

Unix-Linux 程式設計實踐教程 小結

Linux下一切皆檔案,所以目錄也只是一種特殊的檔案,可以同文件一樣open,read,close,只是函式換成了opendir(),readdir(),closedir() 用於讀取目錄檔案的資料結構---struct dirent #include <dirent.h>

忍者祕籍---學習筆記

瀏覽器的事件輪詢: 在觸發一個事件的時候,它會先進入一個事件佇列【FIFO】然後瀏覽器將呼叫為這些程式建立好的處理程式。 函式宣告: 一個函式的宣告分為函式宣告與函式表示式,不管是哪一種只要是有函式名的就會在window.name屬性上新增相應的名字;如果是匿名函式也會有window.n