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 掃描技術叫做殭屍掃描。殭屍掃描的目的是對映遠端系統上的所有開放埠,而不會產生任何和系統互動過的痕跡。殭屍掃描背後的工作原理十分複雜。執行殭屍掃描過程需要遵循以下步驟:
將某個遠端系統看做你的殭屍。這個系統應該擁有如下特徵:
- 這個系統是限制的,並且和網路上其它系統沒有通訊。
- 這個系統使用遞增的 IPID 序列。
給殭屍主機發送 SYN+ACK 封包並記錄初始 IPID 值。
將封包的 IP 源地址偽造成殭屍主機的 IP 地址,並將其傳送給目標系統。
取決於掃描目標的埠狀態,會發生下列事情之一:
- 如果埠開放,掃描目標會向殭屍主機返回 SYN+ACK 封包,它相信殭屍主機發送了之前的 SYN 請求。這裡,殭屍主機會以 RST 封包回覆這個帶路不明的 SYN+ACK 封包,並且將 IPID 值增加 1。
- 如果埠關閉,掃描目標會將 RST 響應返回給殭屍主機, 它相信殭屍主機發送了之前的 SYN 請求。如果這個值增加了 1,那麼之後掃描目標上的埠關閉,。如果這個值增加了 2,那麼掃描目標的埠開放。
向殭屍主機發送另一個 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
命令來確認或更改掃描配置。這個命令會展示四個列的表格,包括name
、current settings
、required
和description
。name
列標出了每個可配置變數的名稱。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 程式設計 第三章讀書筆記(上)
孃的,今天晚上在陽臺做飯把水管一腳踢爆了,水流到下面的住戶的陽臺,讓個老孃們把我罵了一頓,本著做錯事的原則,我裝的很紳士還說了個對不起,擦,真是條純漢子,能屈能伸。
記憶體池——第三章 關於TcMalloc(2)
週末抽空看了一下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