第三章 端口掃描(三)
作者:Justin Hutchens
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0
3.13 Dmitry 連接掃描
另一個可以對遠程系統(tǒng)執(zhí)行 TCP 連接掃描的 替代工具就是 Dmitry虫给。不像 Nmap 和 Metasploit廓旬,Dmitry 是個非常簡單的工具辛友,我們可以使用它來執(zhí)行簡單快速的掃描抱既,而不需要任何配置。這個秘籍展示了如何使用 Dmitry 來自執(zhí)行 TCP 連接掃描捧挺。
準備
為了使用 Dmitry 執(zhí)行 TCP 連接掃描虑绵,你需要一個運行 TCP 網(wǎng)絡(luò)服務(wù)的遠程服務(wù)器。這個例子中我們使用 Metasploitable2 實例來執(zhí)行任務(wù)闽烙。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍翅睛。
操作步驟
Dmitry 是個多用途的工具,可以用于執(zhí)行目標系統(tǒng)上的 TCP 掃描黑竞。它的功能十分有限捕发,但是它是個簡單的工具很魂,快速而高效扎酷。為了查看 Dmitry 的可用選項遏匆,我們在終端中不帶任何參數(shù)來啟動這個程序:
root@KaliLinux:~# dmitry
Deepmagic Information Gathering Tool
"There be some deep magic going on"
Usage: dmitry [-winsepfb] [-t 0-9] [-o %host.txt] host
-o Save output to %host.txt or to file specified by -o file
-i Perform a whois lookup on the IP address of a host
-w Perform a whois lookup on the domain name of a host
-n Retrieve Netcraft.com information on a host
-s Perform a search for possible subdomains
-e Perform a search for possible email addresses
-p Perform a TCP port scan on a host
* -f Perform a TCP port scan on a host showing output reporting filtered ports
* -b Read in the banner received from the scanned port
* -t 0-9 Set the TTL in seconds when scanning a TCP port ( Default 2 )
*Requires the -p flagged to be passed
就像輸出中所說的那樣帝蒿,-p
選項用于執(zhí)行 TCP 端口掃描。為了實現(xiàn)它陵叽,我們以被掃描系統(tǒng)的 IP 地址來使用這個選項巩掺。Dmitry 擁有 150 個常用的預(yù)配置端口,它會掃描這些页畦。在這些端口中胖替,它會展示任何發(fā)現(xiàn)的開放端口≡ビВ考慮下面的例子:
root@KaliLinux:~# dmitry -p 172.16.36.135
Deepmagic Information Gathering
Tool "There be some deep magic going on"
ERROR: Unable to locate Host Name for 172.16.36.135
Continuing with limited modules
HostIP:172.16.36.135
HostName:
Gathered TCP Port information for 172.16.36.135
--------------------------------
Port State
21/tcp open
22/tcp open
23/tcp open
25/tcp open
53/tcp open
80/tcp open
111/tcp open
139/tcp open
Portscan Finished: Scanned 150 ports, 141 ports were in state closed
Dmitry 中的 TCP 端口掃描并不能自定義独令。但是它是個簡單高效的方法來訪問單個主機上的常用服務(wù)。我們也可以使用-o
選項好芭,并通過指定文件名稱燃箭,將 DMitry 掃描結(jié)果輸出到文本文件中。
root@KaliLinux:~# dmitry -p 172.16.36.135 -o output
root@KaliLinux:~# ls Desktop output.txt
root@KaliLinux:~# cat output.txt
ERROR: Unable to locate
Host Name for 172.16.36.135
Continuing with limited modules
HostIP:172.16.36.135
HostName:
Gathered TCP Port information for 172.16.36.135
--------------------------------
Port State
21/tcp open
22/tcp open
23/tcp open
25/tcp open
53/tcp open
80/tcp open
111/tcp open
139/tcp open
Portscan Finished: Scanned 150 ports, 141 ports were in state closed
工作原理
定義如何執(zhí)行 TCP 連接掃描的底層機制和之前討論的其它工具一樣舍败。和其他工具相比招狸,Dmitry 的使用性主要源于簡潔敬拓,并不需要管理多個配置項,像我們使用 Nmap 和 Metasploit 那樣裙戏。我們可以輕易通過指定響應(yīng)模式乘凸,以及將 IP 地址傳遞給他來啟動 Dmitry。它能夠快讀掃描常用的 150 個端口累榜,以及其中所有開放端口的值营勤。
Netcat TCP 端口掃描
由于 Netcat 是個網(wǎng)路哦套接字連接和管理工具,它可以輕易轉(zhuǎn)換為 TCP 端口掃描工具壹罚。這個秘籍展示了如何使用 Netcat 執(zhí)行 TCP 連接掃描葛作。
準備
為了使用 Netcat 執(zhí)行 TCP 連接掃描,你需要一個運行 TCP 網(wǎng)絡(luò)服務(wù)的遠程服務(wù)器渔嚷。這個例子中我們使用 Metasploitable2 實例來執(zhí)行任務(wù)进鸠。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍。
操作步驟
Netcat 是個非常易用形病,功能多樣的網(wǎng)絡(luò)工具客年,可以用于多種目的。Netcat 的一種非常高效的使用方式就是執(zhí)行端口掃描漠吻。為了確定使用選項量瓜,nc
應(yīng)該以-h
選項調(diào)用,像這樣:
root@KaliLinux:~# nc -h
[v1.10-40]
connect to somewhere: nc [-options] hostname port[s] [ports] ...
listen for inbound: nc -l -p port [-options] [hostname] [port]
options:
-c shell commands as `-e'; use /bin/sh to exec [dangerous!!]
-e filename program to exec after connect [dangerous!!]
-b allow broadcasts
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h this cruft
-i secs delay interval for lines sent, ports scanned
-k set keepalive option on socket
-l listen mode, for inbound connects
-n numeric-only IP addresses, no DNS
-o file hex dump of traffic -p port local port number
-r randomize local and remote ports
-q secs quit after EOF on stdin and delay of secs
-s addr local source address
-T tos set Type Of Service
-t answer TELNET negotiation
-u UDP mode
-v verbose [use twice to be more verbose]
-w secs timeout for connects and final net reads
-z zero-I/O mode [used for scanning]
port numbers can be individual or ranges: lo-hi [inclusive]; hyphens in port names must be backslash escaped (e.g. 'ftp\-data').
正如輸出所表示的那樣途乃,-z
選項可以高效用于掃描绍傲。為了掃描目標系統(tǒng)上的 TCP 80 端口,我們使用-n
選項來表明所使用的 IP 地址耍共,-v
選項用于詳細輸出烫饼,-z
選項用于掃描,像這樣:
root@KaliLinux:~# nc -nvz 172.16.36.135 80
(UNKNOWN) [172.16.36.135] 80 (http) open
root@KaliLinux:~# nc -nvz 172.16.36.135 443
(UNKNOWN) [172.16.36.135] 443 (https) : Connection refused
開放端口上的掃描嘗試執(zhí)行會返回 IP 地址试读,端口地址杠纵,以及端口狀態(tài)。對活動主機的關(guān)閉端口執(zhí)行相同掃描會顯式簡介被拒絕钩骇。我們可以在尋呼哪種自動化這個過程比藻,像這樣:
root@KaliLinux:~# for x in $(seq 20 30); do nc -nvz 172.16.36.135 $x; done
(UNKNOWN) [172.16.36.135] 20 (ftp-data) : Connection refused
(UNKNOWN) [172.16.36.135] 21 (ftp) open
(UNKNOWN) [172.16.36.135] 22 (ssh) open
(UNKNOWN) [172.16.36.135] 23 (telnet) open
(UNKNOWN) [172.16.36.135] 24 (?) : Connection refused
(UNKNOWN) [172.16.36.135] 25 (smtp) open
(UNKNOWN) [172.16.36.135] 26 (?) : Connection refused
(UNKNOWN) [172.16.36.135] 27 (?) : Connection refused
(UNKNOWN) [172.16.36.135] 28 (?) : Connection refused
(UNKNOWN) [172.16.36.135] 29 (?) : Connection refused
(UNKNOWN) [172.16.36.135] 30 (?) : Connection refused
通過將輸出傳遞給STDOUT
,之后過濾輸出倘屹,我們能夠分離出提供開放端口細節(jié)的行银亲。我們甚至可以更加簡明,通過僅僅提取我們需要的信息纽匙。如果單個主機被掃描了务蝠,我們可能能夠利用第三和第四個字段;
root@KaliLinux:~# for x in $(seq 20 30); do nc -nvz 172.16.36.135 $x; done 2>&1 | grep open | cut -d " " -f 3-4
21 (ftp)
22 (ssh)
23 (telnet)
25 (smtp)
通過從輸出提取這些字段烛缔,cut
函數(shù)可以用于以空格分隔符请梢,之后通過指定要輸出的字段分離這些行赠尾。但是,還有另一種高效的方法毅弧,就是在 Netcat 中指定端口范圍气嫁,而不需要將工具傳遞金循環(huán)中。通過向nc
中傳入端口地址值的序列够坐,Netcat 會自動展示其中的開放端口:
root@KaliLinux:~# nc 172.16.36.135 -nvz 20-30
(UNKNOWN) [172.16.36.135] 25 (smtp) open
(UNKNOWN) [172.16.36.135] 23 (telnet) open
(UNKNOWN) [172.16.36.135] 22 (ssh) open
(UNKNOWN) [172.16.36.135] 21 (ftp) open
但是寸宵,像之前那樣,我們需要將它的輸出傳給STDOUT
元咙,以便將其傳遞給cut
函數(shù)梯影。通過展示 2 到 4 的字段,我們可以限制 IP 地址庶香、端口號以及相關(guān)服務(wù)的輸出甲棍,像這樣:
root@KaliLinux:~# nc 172.16.36.135 -nvz 20-30 2>&1 | cut -d " " -f 2-4
[172.16.36.135] 25 (smtp)
[172.16.36.135] 23 (telnet)
[172.16.36.135] 22 (ssh)
[172.16.36.135] 21 (ftp)
我們可以在 bash 中使用loop
函數(shù)來使用 Netcat 掃描多個主機地址序列,之后提取相同的細節(jié)來確定不同的被掃描 IP 地址中赶掖,哪個端口是開著的感猛。
root@KaliLinux:~# for x in $(seq 0 255); do nc 172.16.36.$x -nvz 80 2>&1 | grep open | cut -d " " -f 2-4; done
[172.16.36.135] 80 (http)
[172.16.36.180] 80 (http)
工作原理
執(zhí)行 TCP 連接掃描的同居通過執(zhí)行完整的三次握手,和遠程系統(tǒng)的所有被掃描端口建立連接奢赂。端口的狀態(tài)取決于連接是否成功建立陪白。如果連接建立,端口被認為是開放的膳灶,如果連接不能成功建立咱士,端口被認為是關(guān)閉的。
3.15 Scapy 僵尸掃描
我們可以識別目標系統(tǒng)的開放端口轧钓,而不留下和系統(tǒng)交互的證據(jù)序厉。這種機器隱蔽的掃描形式就是僵尸掃描,并且只能在網(wǎng)絡(luò)中存在其他擁有少量網(wǎng)絡(luò)服務(wù)和遞增 IPID 序列的主機時執(zhí)行毕箍。這個秘籍展示了如何使用 Scapy 執(zhí)行僵尸掃描弛房。
準備
為了使用 Scapy 執(zhí)行僵尸掃描,你需要擁有運行 TCP 服務(wù)的遠程系統(tǒng)霉晕,以及另一個擁有 IPID 遞增序列的遠程系統(tǒng)。在所提供的例子中捞奕,Metasploitable2 用作掃描目標牺堰,WindowsXP 用作 IPID 遞增的僵尸。關(guān)于如何在本地實驗環(huán)境下配置系統(tǒng)的更多信息颅围,請參考第一章的“安裝 Metasploitable2”和“安裝 Windows 服務(wù)器”秘籍伟葫。此外,這一節(jié)也需要使用文本編輯器將腳本寫到文件系統(tǒng)院促,例如 VIM 或 Nano筏养。如何編寫腳本的更多信息斧抱,請參考第一章中的“使用文本編輯器(VIM 或 Nano)”秘籍。
操作步驟
所有 IP 封包中都存在的值是 ID 號渐溶。取決于系統(tǒng)辉浦,ID 號會隨機生成,可能始終從零開始茎辐,或者可能在每個發(fā)送的 IP 封包中都遞增 1宪郊。如果發(fā)現(xiàn)了 IPID 遞增的主機,并且這個主機并不和其它網(wǎng)路系統(tǒng)交互拖陆,它就可以用作識別其它系統(tǒng)上開放端口的手段弛槐。我們可以通過發(fā)送一系列 IP 封包,并分析響應(yīng)依啰,來識別遠程系統(tǒng)的 IPID 序列模式乎串。
>>> reply1 = sr1(IP(dst="172.16.36.134")/TCP(flags="SA"),timeout=2,verbo se=0)
>>> reply2 = sr1(IP(dst="172.16.36.134")/TCP(flags="SA"),timeout=2,verbo se=0)
>>> reply1.display()
###[ IP ]###
version= 4L
ihl= 5L
tos= 0x0
len= 40
id= 61
flags=
frag= 0L
ttl= 128
proto= tcp
chksum= 0x9938
src= 172.16.36.134
dst= 172.16.36.180
\options\
###[ TCP ]###
sport= http
dport= ftp_data
seq= 0
ack= 0
dataofs= 5L
reserved= 0L
flags= R
window= 0
chksum= 0xe22
urgptr= 0
options= {}
###[ Padding ]###
load= '\x00\x00\x00\x00\x00\x00'
>>> reply2.display()
###[ IP ]###
version= 4L
ihl= 5L
tos= 0x0
len= 40
id= 62
flags=
frag= 0L
ttl= 128
proto= tcp
chksum= 0x992d
src= 172.16.36.134
dst= 172.16.36.180
\options\
###[ TCP ]###
sport= http
dport= ftp_data
seq= 0
ack= 0
dataofs= 5L
reserved= 0L
flags= R
window= 0
chksum= 0xe22
urgptr= 0
options= {}
###[ Padding ]###
load= '\x00\x00\x00\x00\x00\x00'
如果我們向 Windows 獨立系統(tǒng)發(fā)送兩個 IP 封包,我們可以檢測響應(yīng)中的 ID 屬性的整數(shù)值速警。要注意第一個請求的回復(fù)的 ID 是 61叹誉,第二個是 62。這個主機確實存在遞增的 IPID 序列坏瞄,并假設(shè)它保持獨立桂对。它可以用作高效的僵尸,來進行僵尸掃描鸠匀。為了執(zhí)行僵尸掃描蕉斜,必須向僵尸系統(tǒng)發(fā)送初始的 SYN+ACK 請求,來判斷返回的 RST 中的當前 IPID 值缀棍。之后宅此,向掃描目標發(fā)送偽造的 SYN 掃描,帶有僵尸系統(tǒng)的 IP 原地址爬范。如果端口是打開的父腕,掃描目標會發(fā)送 SYN+ACK 響應(yīng)給僵尸。由于僵尸沒有實際發(fā)送初始的 SYN 請求青瀑,它會將 SYN+ACK 解釋為來路不明璧亮,并且項目表發(fā)送 RST 封包。因此將 IPID 增加 1斥难。最后枝嘶,應(yīng)該向僵尸發(fā)送另一個 SYN+ACK 封包,它會返回 RST 封包并將 IPID 再次增加 1哑诊。IPID 比起初始響應(yīng)增加了 2群扶,折表示所有這些時間都發(fā)生了,并且被掃描系統(tǒng)的目標端口是開放的。
反之竞阐,如果端口是關(guān)閉的缴饭,會發(fā)生不同的系列時間,這僅僅會導(dǎo)致最后的 RST 響應(yīng)早呢更加 1骆莹。如果被掃描系統(tǒng)的目標端口是關(guān)閉的颗搂,RST 封包會發(fā)給僵尸系統(tǒng),作為初始的偽造的 SYN 封包的響應(yīng)汪疮。由于 RST 封包沒有任何回應(yīng)峭火,僵尸系統(tǒng)的 IPID 值無變化。所以智嚷,作為 SYN+ACK 封包的響應(yīng)卖丸,返回給掃描系統(tǒng)的最后的 RST 封包的 IPID 值只會增加 1。
為了簡化這個過程盏道,下面的腳本以 Python 編寫稍浆,它能識別可用僵尸系統(tǒng),也對掃描目標執(zhí)行了僵尸掃描猜嘱。
#!/usr/bin/python
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
def ipid(zombie):
reply1 = sr1(IP(dst=zombie)/TCP(flags="SA"),timeout=2,verbose=0)
send(IP(dst=zombie)/TCP(flags="SA"),verbose=0)
reply2 = sr1(IP(dst=zombie)/TCP(flags="SA"),timeout=2,verbose=0)
if reply2[IP].id == (reply1[IP].id + 2):
print "IPID sequence is incremental and target appears to be idle. ZOMBIE LOCATED"
response = raw_input("Do you want to use this zombie to perform a scan? (Y or N): ")
if response == "Y":
target = raw_input("Enter the IP address of the target system: ")
zombiescan(target,zombie)
else:
print "Either the IPID sequence is not incremental or the target is not idle. NOT A GOOD ZOMBIE"
def zombiescan(target,zombie):
print "\nScanning target " + target + " with zombie " + zombie print "\n---------Open Ports on Target--------\n"
for port in range(1,100):
try:
start_val = sr1(IP(dst=zombie)/TCP(flags="SA",dport=port),tim eout=2,verbose=0)
send(IP(src=zombie,dst=target)/TCP(flags="S",dport=port),verbose=0)
end_val = sr1(IP(dst=zombie)/TCP(flags="SA"),timeout=2,verbo se=0)
if end_val[IP].id == (start_val[IP].id + 2):
print port
except:
pass
print "-----------Zombie Scan Suite------------\n"
print "1 - Identify Zombie Host\n"
print "2 - Perform Zombie Scan\n" ans = raw_input("Select an Option (1 or 2): ")
if ans == "1":
zombie = raw_input("Enter IP address to test IPID sequence: ")
ipid(zombie)
else:
if ans == "2":
zombie = raw_input("Enter IP address for zombie system: ")
target = raw_input("Enter IP address for scan target: ")
zombiescan(target,zombie)
在執(zhí)行腳本過程中衅枫,用戶會收到量個選項的提示。通過選項選項 1朗伶,我們可以掃描或評估目標的 IPID 序列來判斷是否主機是個可用的僵尸弦撩。假設(shè)主機是獨立的,并擁有遞增的 IPID 序列论皆,主機就可以用作僵尸益楼。并且用戶會被詢問是否使用僵尸來執(zhí)行掃描。如果執(zhí)行了掃描点晴,會對 TCP 端口前 100 個地址的每個地址執(zhí)行前面討論的過程感凤。像這樣:
root@KaliLinux:~# ./zombie.py
-----------Zombie Scan Suite-----------
1 - Identify Zombie Host
2 - Perform Zombie Scan
Select an Option (1 or 2): 1
Enter IP address to test IPID sequence: 172.16.36.134
IPID sequence is incremental and target appears to be idle. ZOMBIE LOCATED
Do you want to use this zombie to perform a scan? (Y or N): Y
Enter the IP address of the target system: 172.16.36.135
Scanning target 172.16.36.135 with zombie 172.16.36.134
---------Open Ports on Target-------
21
22
23
25
53
80
工作原理
僵尸掃描是個枚舉目標系統(tǒng)開放端口的隱秘方式,不需要留下任何交互的痕跡粒督。將偽造請求的組合發(fā)給目標系統(tǒng)陪竿,以及將正常請求發(fā)給僵尸系統(tǒng),我們就可以通過評估僵尸系統(tǒng)的響應(yīng)的 IPID 值來映射目標系統(tǒng)的開放端口屠橄。
3.18 Nmap 僵尸掃描
就像上一個秘籍,在編程自定義腳本對于理解僵尸掃描背后的工作原理很有幫助族跛。Nmap 中還有另一種高效的掃描模式,可以用于執(zhí)行僵尸掃描锐墙。這個秘籍展示了如何使用 Nmap 執(zhí)行僵尸掃描礁哄。
準備
為了使用 Nmap 執(zhí)行僵尸掃描,你需要擁有運行 TCP 服務(wù)的遠程系統(tǒng)贮匕,以及另一個擁有 IPID 遞增序列的遠程系統(tǒng)姐仅。在所提供的例子中花枫,Metasploitable2 用作掃描目標刻盐,WindowsXP 用作 IPID 遞增的僵尸掏膏。關(guān)于如何在本地實驗環(huán)境下配置系統(tǒng)的更多信息,請參考第一章的“安裝 Metasploitable2”和“安裝 Windows 服務(wù)器”秘籍敦锌。此外馒疹,這一節(jié)也需要使用文本編輯器將腳本寫到文件系統(tǒng),例如 VIM 或 Nano乙墙。如何編寫腳本的更多信息颖变,請參考第一章中的“使用文本編輯器(VIM 或 Nano)”秘籍。
操作步驟
僵尸掃描可以在 Nmap 中帶參數(shù)執(zhí)行听想。但是腥刹,我們可以使用 Metasploit 快速發(fā)現(xiàn)任何可用的僵尸候選項,通過掃描整個地址范圍和評估 PIPD 序列汉买,而不是使用 Nmap 僵尸掃描衔峰。為了這樣做,我們需要使用msfconsole
命令打開 Metasploit蛙粘,并選項 IPID 序列輔助模塊垫卤,像這樣:
root@KaliLinux:~# msfconsole
+-------------------------------------------------------+
| METASPLOIT by Rapid7 |
+---------------------------+---------------------------+
| __________________ | |
| ==c(______(o(______(_() | |""""""""""""|======[*** |
| )=\ | | EXPLOIT \ |
| // \\ | |_____________\_______ |
| // \\ | |==[msf >]============\ |
| // \\ | |______________________\ |
| // RECON \\ | \(@)(@)(@)(@)(@)(@)(@)/ |
| // \\ | ********************* |
+---------------------------+---------------------------+
| o O o | \'\/\/\/'/ |
| o O | )======( |
| o | .' LOOT '. |
| |^^^^^^^^^^^^^^|l___ | / _||__ \ |
| | PAYLOAD |""\___, | / (_||_ \ |
| |________________|__|)__| | | __||_) | |
| |(@)(@)"""**|(@)(@)**|(@) | " || " |
| = = = = = = = = = = = = | '--------------' |
+---------------------------+---------------------------+
Using notepad to track pentests? Have Metasploit Pro report on hosts, services, sessions and evidence -- 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/ip/ipidseq
msf auxiliary(ipidseq) > show options
Module options (auxiliary/scanner/ip/ipidseq):
Name Current Setting Required Description
---- --------------- -------- ----------
INTERFACE no The name of the interface
RHOSTS yes The target address range or CIDR identifier
RPORT 80 yes The target port
SNAPLEN 65535 yes The number of bytes to capture
THREADS 1 yes The number of concurrent threads
TIMEOUT 500 yes The reply read timeout in milliseconds
這個輔助模塊可以用于在主機地址序列或網(wǎng)絡(luò)范圍中執(zhí)行掃描,可以使用 CIDR 記法來定義出牧。為了使掃描速度增加穴肘,我們可以將THREADS
變量設(shè)為合理的并發(fā)任務(wù)數(shù)量,像這樣:
msf auxiliary(ipidseq) > set RHOSTS 172.16.36.0/24
RHOSTS => 172.16.36.0/24
msf auxiliary(ipidseq) > set THREADS 25
THREADS => 25
msf auxiliary(ipidseq) > show options
Module options (auxiliary/scanner/ip/ipidseq):
Name Current Setting Required Description
---- --------------- -------- ---------- INTERFACE no The name of the interface
RHOSTS 172.16.36.0/24 yes The target address range or CIDR identifier
RPORT 80 yes The target port
SNAPLEN 65535 yes The number of bytes to capture
THREADS 25 yes The number of concurrent threads
TIMEOUT 500 yes The reply read timeout in milliseconds
一旦為所需變量設(shè)置了合理的值舔痕,我們可以使用show options
來再次驗證掃描配置评抚。IPID 序列掃描之后可以使用run
命令來執(zhí)行。
msf auxiliary(ipidseq) > run
[*] 172.16.36.1's IPID sequence class: Randomized
[*] 172.16.36.2's IPID sequence class: Incremental!
[*] Scanned 026 of 256 hosts (010% complete)
[*] Scanned 052 of 256 hosts (020% complete)
[*] Scanned 077 of 256 hosts (030% complete)
[*] Scanned 103 of 256 hosts (040% complete)
[*] Scanned 128 of 256 hosts (050% complete)
[*] 172.16.36.134's IPID sequence class: Incremental!
[*] 172.16.36.135's IPID sequence class: All zeros
[*] Scanned 154 of 256 hosts (060% complete)
[*] Scanned 180 of 256 hosts (070% complete)
[*] Scanned 205 of 256 hosts (080% complete)
[*] Scanned 231 of 256 hosts (090% complete)
[*] Scanned 256 of 256 hosts (100% complete)
[*] Auxiliary module execution completed
由于 IPID 序列掃描模塊會遍歷所提供的網(wǎng)絡(luò)范圍赵讯,它會識別被發(fā)現(xiàn)主機的 IPID 序列模式盈咳,并且表示出哪些是 0,隨機或遞增的边翼。用于僵尸掃描的理想候選項必須擁有遞增的 IPID鱼响,并且不會被網(wǎng)絡(luò)上的其它主機嚴重影響鹰贵。一旦識別了遞增的獨立主機醋拧,我們可以在 Nmap 中使用-sI
選項并且傳入僵尸主機的 IP 地址來執(zhí)行僵尸掃描。
root@KaliLinux:~# nmap 172.16.36.135 -sI 172.16.36.134 -Pn -p 0-100
Starting Nmap 6.25 ( http://nmap.org ) at 2014-01-26 14:05 CST I
dle scan using zombie 172.16.36.134 (172.16.36.134:80); Class: Incremental
Nmap scan report for 172.16.36.135
Host is up (0.045s latency).
Not shown: 95 closed|filtered ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
53/tcp open domain
80/tcp open
http MAC Address: 00:0C:29:3D:84:32 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 2.75 seconds
上面的例子中惠拭,僵尸掃描執(zhí)行在掃描目標172.16.36.135
的前 100 個 TCP 端口上债鸡。獨立主機172.16.36.134
用作僵尸江滨,-Pn
選項用于阻止 Nmap 嘗試 ping 掃描目標。這個示例中厌均,我們識別并枚舉了所有列出的開放端口唬滑,而不會直接和被掃描主機交互。反之,偽造了來源的封包會發(fā)給掃描目標晶密,并且只有掃描系統(tǒng)和僵尸主機之間才有直接的交互擒悬。
工作原理
僵尸掃描的底層機制和上一個秘籍中討論過的 Scapy 的例子相同。但是稻艰,使用 Nmap 僵尸掃描模式使我們能夠使用知名的集成工具來快速執(zhí)行此類工具懂牧。