前言
在打靶場(chǎng)的過(guò)程中使用Nmap時(shí)發(fā)現(xiàn)點(diǎn)小問(wèn)題,借此機(jī)會(huì)詳細(xì)分析下情況,于是有了這篇文章。
本文包含以下內(nèi)容:
- 1. Nmap抓包分析
- 2. 內(nèi)網(wǎng)下繞過(guò)windows防火墻掃描存活主機(jī)
這里主要是針對(duì)Nmap進(jìn)行討論,實(shí)戰(zhàn)中當(dāng)然哪個(gè)快用哪個(gè)。不過(guò)萬(wàn)變不離其宗,哪怕稍微了解下其原理都受益無(wú)窮。
防火墻
這里的防火墻值得是Windows server自帶的防火墻,主要繞過(guò)其兩個(gè)防御規(guī)則:
1.禁止ICMP回顯
2.隱藏模式
具體見(jiàn) Stealth Mode in Windows Firewall with Advanced Security,大意為:不會(huì)使用ICMP不可達(dá)響應(yīng)UDP查詢(xún),不使用RST響應(yīng)TCP查詢(xún)。默認(rèn)開(kāi)啟。
https://shamsher-khan-404.medium.com/understanding-nmap-scan-with-wireshark-5144d68059f7
Nmap抓包分析 拓?fù)鋱D-sn :禁用端口掃描
-P* 用于選擇不同的PING方法,用于存活掃描
關(guān)閉防火墻便于查看數(shù)據(jù)包
主機(jī)發(fā)現(xiàn)(Ping) -PS (TCP SYN)
TCP SYN Ping:發(fā)送單個(gè)TCP SYN包到指定端口檢測(cè)主機(jī)是否存活,默認(rèn)80端口。該掃描就是經(jīng)典的半開(kāi)放掃描。
請(qǐng)求局域網(wǎng)主機(jī)135端口(開(kāi)啟)
nmap -sn -PS135 172.16.1.128-vvv -n --disable-arp-ping
#-n 禁用DNS解析
注意nmap掃局域網(wǎng)存活主機(jī)都會(huì)預(yù)先進(jìn)行arp掃描,在這里禁用了端口掃描,意味著nmap只會(huì)進(jìn)行存活掃描,當(dāng)nmap進(jìn)行arp掃描后發(fā)現(xiàn)主機(jī)存活就不會(huì)進(jìn)行后續(xù)操作,wireshark也就抓不到包,所以使用 --disable-arp-ping 禁用arp掃描。
image image
image
請(qǐng)求局域網(wǎng)主機(jī)666端口(關(guān)閉)
nmap -sn -PS666 172.16.1.128-vvv -n --disable-arp-ping
image image
image
請(qǐng)求遠(yuǎn)程主機(jī)135端口(開(kāi)啟):
還是這里會(huì)發(fā)現(xiàn),和掃局域網(wǎng)比起來(lái)多了很多包,為什么和掃局域網(wǎng)情況不一樣?
還是fofa隨便找個(gè)開(kāi)啟135端口的IP:
image
image
這里會(huì)發(fā)現(xiàn),和掃局域網(wǎng)比起來(lái)多了很多包。
image
請(qǐng)求遠(yuǎn)程主機(jī)6666端口(關(guān)閉):
image
奇怪的是,明明遠(yuǎn)程主機(jī)返回了RST/ACK包,但nmap沒(méi)有接收到。
image
為什么會(huì)有這樣的差別?翻了翻nmap官方文檔,其中有這樣一句話(huà):
The RST packet is sent by the kernel of the machine running Nmap in response to the unexpected SYN/ACK, not by Nmap itself
RST報(bào)文是運(yùn)行Nmap的機(jī)器的內(nèi)核為響應(yīng)意外的SYN/ACK而發(fā)送的,而不是Nmap本身。
突然想到,我的kali是放在vmware,以nat形式接入網(wǎng)絡(luò),這樣偶爾會(huì)出現(xiàn)點(diǎn)小問(wèn)題。
于是我在windows上裝了個(gè)nmap再進(jìn)行測(cè)試:
image
再看下抓包
image
image
發(fā)現(xiàn)這里沒(méi)發(fā)RST包
image
關(guān)掉防火墻再試,還一下發(fā)倆RST……
image
接下來(lái)將vmware網(wǎng)絡(luò)模式換為橋接,發(fā)現(xiàn)正常了。說(shuō)明是NAT網(wǎng)絡(luò)的問(wèn)題。
-PA (TCP ACK)
TCP ACK Ping:發(fā)送單個(gè)TCP ACK包到指定端口檢測(cè)主機(jī)是否存活,默認(rèn)80端口
請(qǐng)求局域網(wǎng)主機(jī)135端口(開(kāi)啟)
一般ACK包是雙方建立起連接發(fā)送的,但實(shí)際上不存在連接,無(wú)論端口是否開(kāi)啟,遠(yuǎn)程主機(jī)都會(huì)用RST包來(lái)回應(yīng),以此來(lái)判斷主機(jī)存活。當(dāng)然很多防御策略都會(huì)丟棄無(wú)效包防止被檢測(cè)。
nmap -sn -PA135 172.16.1.128-vvv -n --disable-arp-ping
image image
image
請(qǐng)求局域網(wǎng)主機(jī)666端口(關(guān)閉)
nmap -sn -PA666 172.16.1.128-vvv -n --disable-arp-ping
image image -PU (UDP)
UDP Ping:發(fā)送UDP包到指定端口檢測(cè)主機(jī)是否存活,默認(rèn)40125端口。特定端口會(huì)發(fā)送特定的UDP包以便于獲取更好的響應(yīng)。
按照最新官方文檔解釋?zhuān)摪l(fā)送大概有以下幾種情況:
- 1. 端口關(guān)閉->返回ICMP端口不可達(dá)包->判斷主機(jī)存活。
- 2. 返回其他ICMP錯(cuò)誤,如主機(jī)/網(wǎng)絡(luò)不可達(dá)或TTL超標(biāo)等->判斷停機(jī)。
- 3. 端口開(kāi)啟且該服務(wù)不響應(yīng)—>nmap未接收到返回包->判斷停機(jī)。
- 4. 端口關(guān)閉且協(xié)議不匹配->返回ICMP端口不可達(dá)包->判斷主機(jī)存活。
這就是為什么默認(rèn)要用40125這么冷門(mén)的端口,避免有服務(wù)使用該端口。
nmap -sn -PA135 172.16.1.128-vvv -n --disable-arp-ping
返回ICMP端口不可達(dá),仍舊判斷出主機(jī)存活。
image image
局域網(wǎng)沒(méi)什么問(wèn)題,掃外網(wǎng)的話(huà)同樣有前文說(shuō)的Vmware Nat網(wǎng)絡(luò)問(wèn)題,注意一下就好。
-PY (SCTP INIT)
SCTP INIT Ping:發(fā)送包含最小INIT塊的SCTP包到指定端口檢測(cè)主機(jī)是否存活,默認(rèn)80端口。SCTP可看做TCP協(xié)議的改版。
nmap -sn -PY135 172.16.1.128-vvv -n --disable-arp-ping
返回協(xié)議不可達(dá),以此判斷出主機(jī)存活。
image image -PR (ARP)
ARP Ping:ARP掃描,Nmap掃內(nèi)網(wǎng)最常用的方式。
nmap -sn -PR 172.16.1.128-vvv -n
接收到arp返回包,判斷主機(jī)存活。
image image -PE/PP/PM (ICMP)
ICMP Ping:三種ICMP標(biāo)準(zhǔn)請(qǐng)求,如果防火墻關(guān)掉ICMP回顯則收不到reply。
第一個(gè)就是常說(shuō)的Ping。
image
第二個(gè)是時(shí)間戳請(qǐng)求
image
第三個(gè)是地址掩碼請(qǐng)求
image
ICMP標(biāo)準(zhǔn)還有個(gè)信息請(qǐng)求,但目前未被廣泛支持,所以Nmap沒(méi)有做相關(guān)功能。
-PO (IP Protocol)
IP Protocol Ping:默認(rèn)發(fā)送ICMP(協(xié)議1)、IGMP(協(xié)議2)和IP-in-IP(協(xié)議4),更改協(xié)議需要改nmap.h文件中的 DEFAULT_PROTO_PROBE_PORT_SPEC 。目前意義不大。
nmap -sn -PO -vv 172.16.1.128-n --disable-arp-ping
image image 端口掃描(Scan)
其實(shí)端口掃描(Scan)很多參數(shù)和主機(jī)發(fā)現(xiàn)(Ping)的前期抓包情況是一樣的。Ping相當(dāng)于點(diǎn)到為止,根據(jù)回顯發(fā)現(xiàn)主機(jī)存活即可,而Scan還需要進(jìn)一步分析,判斷端口是否開(kāi)啟、判斷什么服務(wù)等。
由于大部分Scan參數(shù)與Ping參數(shù)請(qǐng)求包一致,而部分Scan參數(shù)在本文中并未體現(xiàn),所以暫且貼出三個(gè)參數(shù)抓包情況。
-sS (TCP SYN)
TCP SYN scan:經(jīng)典的半開(kāi)放掃描。
nmap -Pn-sS -p 135-vvv 172.16.1.128-n
image
可見(jiàn)發(fā)送的請(qǐng)求包和 -PS 是一樣的,至于Nmap如何判斷如何分析,這里就不關(guān)心了。
image -sT (TCP connect)
TCP connect scan:TCP連接掃描,三次握手確認(rèn)目標(biāo)后直接發(fā)送RST結(jié)束當(dāng)前連接,跳過(guò)四次揮手階段。
端口開(kāi)啟
nmap -Pn-sT -p 135172.16.1.128-vvv -n --disable-arp-ping
# -Pn 不進(jìn)行主機(jī)存活探測(cè)
image image
image
端口關(guān)閉
image image
image
可以發(fā)現(xiàn), -sT 和 -PS 兩個(gè)掃描的抓包情況十分接近,只有收到SYN/ACK返回包后應(yīng)答的不同,這也是 -PS 被稱(chēng)為半開(kāi)放掃描的原理。
-sU (UDP)
UDP scans:發(fā)送UDP包進(jìn)行掃描
nmap -Pn-sU -p 135172.16.1.128-vvv -n --disable-arp-ping
這里顯示 open|filtered ,為什么呢?
因?yàn)閁DP包請(qǐng)求到開(kāi)放的端口,經(jīng)常沒(méi)有回顯。而且這里使用 -Pn 跳過(guò)了主機(jī)存活探測(cè),默認(rèn)主機(jī)存活,又因?yàn)槭詹坏交仫@,所以nmap無(wú)法判斷該端口是開(kāi)啟還是被防御規(guī)則過(guò)濾。
image
抓包情況和 -PU 基本一致:
image 繞防火墻測(cè)試 拓?fù)鋱D
測(cè)試 nmap -sn -PS135 172.16.1.128-vvv -n --disable-arp-ping
未收到[SYN, ACK]返回包,判斷主機(jī)離線(xiàn)。
nmap -sn -PA135 172.16.1.128-vvv -n --disable-arp-ping
未收到[RST, ACK]返回包,判斷主機(jī)離線(xiàn)。
nmap -sn -PU135 172.16.1.128-vvv -n --disable-arp-pingnmap -sn -PY135 172.16.1.128-vvv -n --disable-arp-ping
nmap -sn -PR 172.16.1.128-vvv -n
成功收到ARP回顯,判斷主機(jī)存活:
這樣一圈測(cè)試下來(lái),發(fā)現(xiàn)只有ARP掃描可以。原因也很簡(jiǎn)單,ARP掃描不會(huì)走靶機(jī)防火墻,而是以廣播的形式進(jìn)行掃描;而其他參數(shù)不是被禁ICMP回顯規(guī)則攔截就是被隱身模式過(guò)濾。
后面又嘗試了常用的nbt掃描、smb掃描、以及Nmap其他參數(shù),仍然繞不過(guò)防火墻。
WINRM
難道就止步于此了嗎?突然想到,之前用Ladon插件掃的時(shí)候,沒(méi)見(jiàn)什么防火墻攔截。
于是拿Ladon測(cè)試了下,選多協(xié)議探測(cè)存活主機(jī),一掃,果真有:
WIMRM,很熟悉,這也能拿來(lái)掃內(nèi)網(wǎng)?
簡(jiǎn)單概述下:WIMRM是windows自帶的服務(wù),開(kāi)啟服務(wù)后防火墻默認(rèn)放心5985(HTTP)/5986(HTTPS)端口,平常拿來(lái)橫向移動(dòng)。
由于沒(méi)搜到Ladon源碼怎么實(shí)現(xiàn)該掃描,谷歌找了找WINRM的文章: WinRM P.NETration Testing
其中有一行代碼:
test-wsman-computername"172.16.1.128"
很快就有回顯:
隨便輸了個(gè)其他IP,報(bào)錯(cuò):
顯然,使用該服務(wù)也可以繞過(guò)Windows防火墻進(jìn)行存活主機(jī)掃描。
結(jié)語(yǔ)
總結(jié)一下:
- 1. arp掃描可以使用工具,但到了掃內(nèi)網(wǎng)的情況,都是拿shell了,所以直接cmd命令: arp/a 即可。
- 2. WINRM test - wsman - computername "172.16.1.128"
至于如何繞防火墻進(jìn)行端口掃描,留到以后再說(shuō)吧。