【PortScan】nmap
主機發現
ip 掃描 (主機發現)
# ARP掃描 sudo nmap -PR -sn MACHINE_IP/24
# ICMP echo掃描 sudo nmap -PE -sn MACHINE_IP/24
# ICMP 時間戳掃描 sudo nmap -PP -sn MACHINE_IP/24
# ICMP 位址遮罩掃描 sudo nmap -PM -sn MACHINE_IP/24
# TCP SYN Ping 掃描 sudo nmap -PS22,80,443 -sn MACHINE_IP/30
# TCP ACK Ping 掃描 sudo nmap -PA22,80,443 -sn MACHINE_IP/30
# UDP Ping 掃描 sudo nmap -PU53,161,162 -sn MACHINE_IP/30
# -n 沒有DNS查找
# -R 所有主機的反向 DNS 查找
# -sn 僅主機發現(不掃描port)
## 列出網段內機器的ip
# -Pn Treat all hosts as online -- skip host discovery 掃描全網段,停用主機發現
# -sn Ping Scan - disable port scan(與 -sV互斥 )
# -n 不使用dns解析
# -oG console ouput 配合 - 輸出 原輸出 Host: 192.168.202.255 () Status: Up => 使用awk 取出ip
# > ip.txt 輸出成文字檔
# -oN {filename} 輸出到檔案
# -sL 列出要掃描的ip
nmap -sn -n 192.168.202.0/24 -oG - | grep Up |awk '{prin $2}' > ips.txt
nmap -Pn -n 192.168.202.0/24 -oG - | grep Up |cut -d ‘ ‘ -f2 > ips.txt
nmap -Pn -n 192.168.202.0/24 -oN namp_192.168.202.log
## 列出ips.txt 主機有開 tcp/25 的主機
# -p port
# sS 掃描
# -iL 從檔案讀取要掃描的主機
# --open 只列出開啟(up)的結果
sudo nmap -p 25 -sS --open 192.168.202.255 -iL ips.txt -oG -
# result
Host: 192.168.202.23 () Status: Up
Host: 192.168.202.23 () Ports: 25/filtered/tcp//smtp///
# -sL 只列出要掃描的主機(不掃描)
# -n 不進行dns反解
#nmap -n -sL 10.10.12.13/29
Starting Nmap 7.60 ( https://nmap.org ) at 2024-02-28 10:39 GMT
Nmap scan report for 10.10.12.8
Nmap scan report for 10.10.12.9
Nmap scan report for 10.10.12.10
Nmap scan report for 10.10.12.11
Nmap scan report for 10.10.12.12
Nmap scan report for 10.10.12.13
Nmap scan report for 10.10.12.14
Nmap scan report for 10.10.12.15
Nmap done: 8 IP addresses (0 hosts up) scanned in 0.00 seconds
arp scan
arp-scan wiki https://www.royhills.co.uk/wiki/index.php/Arp-scan_Documentation
# -PR 使用arp掃描
# -sn 只掃描ip,不掃描port
$ sudo nmap -PR -sn 10.10.210.6/24
Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-02 07:12 BST
Nmap scan report for ip-10-10-210-75.eu-west-1.compute.internal (10.10.210.75)
Host is up (0.00013s latency).
MAC Address: 02:83:75:3A:F2:89 (Unknown)
Nmap scan report for ip-10-10-210-100.eu-west-1.compute.internal (10.10.210.100)
Host is up (-0.100s latency).
MAC Address: 02:63:D0:1B:2D:CD (Unknown)
Nmap scan report for ip-10-10-210-165.eu-west-1.compute.internal (10.10.210.165)
Host is up (0.00025s latency).
MAC Address: 02:59:79:4F:17:B7 (Unknown)
Nmap scan report for ip-10-10-210-6.eu-west-1.compute.internal (10.10.210.6)
Host is up.
Nmap done: 256 IP addresses (4 hosts up) scanned in 3.12 seconds
# arp-scan
$ sudo arp-scan 10.10.210.6/24
Interface: eth0, datalink type: EN10MB (Ethernet)
WARNING: host part of 10.10.210.6/24 is non-zero
Starting arp-scan 1.9 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
10.10.210.75 02:83:75:3a:f2:89 (Unknown)
10.10.210.100 02:63:d0:1b:2d:cd (Unknown)
10.10.210.165 02:59:79:4f:17:b7 (Unknown)
4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9: 256 hosts scanned in 2.726 seconds (93.91 hosts/sec). 3 responded
icmp scan
icmp 類型 https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml
# icmp 類型 https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml
# -PE 使用icmp 掃描
# ICMP 類型 8 Echo -> ICMP 類型 0 Echo Reply 回應
# -sn 不進行port掃描
$ sudo nmap -PE -sn 10.10.68.220/24
Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-02 10:16 BST
Nmap scan report for ip-10-10-68-50.eu-west-1.compute.internal (10.10.68.50)
Host is up (0.00017s latency).
MAC Address: 02:95:36:71:5B:87 (Unknown)
...
Nmap done: 256 IP addresses (8 hosts up) scanned in 2.11 seconds
# -PP 使用icmp 時間戳記掃描
# ICMP 類型 13 時間戳記請求 -> ICMP 類型 14 時間戳記請求回應
$ sudo nmap -PP -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 12:06 EEST
Nmap scan report for 10.10.68.50
Host is up (0.13s latency).
...
Nmap done: 256 IP addresses (8 hosts up) scanned in 10.93 seconds
# -PM 使用icmp 遮罩掃描
# 位址遮罩查詢Address Mask Request(ICMP 類型 17)並檢查是否獲得位址遮罩回覆Address Mask Reply(ICMP 類型 18)
$ sudo nmap -PM -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 12:13 EEST
Nmap done: 256 IP addresses (0 hosts up) scanned in 52.17 seconds
TCP scan
# TCP SYN 掃描
# -PS 使用tcp sync scan (預設80 port,可設定特殊port 如-PS22,80,8080)
# -sn 不執行port掃描
$ sudo nmap -PS -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:45 EEST
Nmap scan report for 10.10.68.52
Host is up (0.10s latency)
...
Nmap done: 256 IP addresses (5 hosts up) scanned in 17.38 seconds
# TCP ACK scan
# -PA TCP ACK scan
# -sn 不執行port掃描
# 特權使用者(root 和 sudoers)才可以用 ack scan
$ sudo nmap -PA -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:46 EEST
Nmap scan report for 10.10.68.52
Host is up (0.11s latency).
...
Nmap done: 256 IP addresses (5 hosts up) scanned in 29.89 seconds
UDP scan
# -PU udp scan
# -sn 不執行port掃描
$ sudo nmap -PU -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:45 EEST
Nmap scan report for 10.10.68.52
Host is up (0.10s latency).
...
Nmap done: 256 IP addresses (5 hosts up) scanned in 9.20 seconds
dns 反解
# -n 不使用dns反解(此選項與下面互斥)
$ sudo nmap -n -sn 192.168.100.10/24
# -R 使用DNS查詢(一般不用加,會使用預設dns)
# --dns-servers {DNS_SERVER} 使用特定dns
port 掃描
我們可以將連接埠分為兩種狀態:
- 開啟連接埠表示有某個服務正在偵聽該連接埠。
但在實際情況中,我們需要考慮防火牆的影響。例如,連接埠可能是開放的,但防火牆可能會阻止資料包。因此,Nmap考慮以下六種狀態:
- Open:表示有服務正在監聽指定連接埠。
-sA。
Open|Filtered :這意味著Nmap無法確定連接埠是開放的還是已過濾的。
Closed|Filtered :這表示Nmap無法決定連接埠是關閉還是過濾。
Nmap支援不同類型的 TCP 連接埠掃描。要了解這些連接埠掃描之間的差異,我們需要查看 TCP 標頭。TCP 標頭是 TCP 段的前 24 個位元組。下圖顯示了RFC 793中定義的 TCP 標頭。這個人物乍看之下很精緻,但實際上卻很複雜。然而,它很容易理解。在第一行中,我們有來源 TCP 連接埠號碼和目標連接埠號碼。我們可以看到連接埠號碼分配了16位元(2個位元組)。在第二行和第三行中,我們有序號和確認號。每行分配 32 位元(4 位元組),總共 6 行,組成 24 位元組。
特別是,我們需要關注Nmap可以設定或取消設定的標誌。我們用紅色突出顯示了 TCP 標誌。設定標誌位意味著將其值設為1。從左到右,TCP頭標誌是:
- URG :緊急標誌表示提交的緊急指針是重要的。緊急指針指示傳入資料緊急,並且立即處理設定了 URG 標誌的TCP分段,而無需考慮必須等待先前發送的 TCP 分段。
# ip 清單
nmap 192.168.203.* -sn -oG - | grep Up | cut -d ‘ ’ -f2 > ip_list.txt (ip清單)
-sn 只掃ip 不掃port
-oG: output can grep
-: console out put
namp 預設 top 1000(/usr/share/nmap/nmap-servicese)
namp 192.168.203.151
等於
namp 192.168.203.151 —top 1000
sudo + nmap =>多 ICMP type:8, type:13
# 全掃
namp 192.168.203.151 -p 1-65535
等於 namp 192.168.203.151 -p -
等於 namp 192.168.203.151 -p 1-
1- : 1以後
等於 namp 192.168.203.151 -p -65535
-65535: 65535 以前
以下是Nmap 7.94的說明及參數翻譯:
Nmap 7.94(https://nmap.org)
用法:nmap [掃描類型] [選項] {目標指定}
目標指定:
可傳遞主機名、IP地址、網絡等等。
例如:scanme.nmap.org、microsoft.com/24、192.168.0.1; 10.0.0-255.1-254
-iL <輸入文件名>:從主機/網絡列表輸入
-iR <主機數量>:選擇隨機目標
--exclude <主機1[,主機2][,主機3],...>:排除主機/網絡
--excludefile <排除文件>:從文件排除列表
主機發現:
-sL:列表掃描 - 簡單列出要掃描的目標
-sn:Ping掃描 - 停用端口掃描
-Pn:將所有主機視為在線 - 跳過主機發現
-PS/PA/PU/PY<端口列表>:TCP SYN/ACK、UDP或SCTP發現到指定端口
-PE/PP/PM:ICMP echo、timestamp和netmask請求發現探針
-PO[協議列表]:IP協議Ping
-n/-R:永不執行DNS解析/總是解析 [默認:有時]
--dns-servers <伺服器1[,伺服器2],...>:指定自定義DNS伺服器
--system-dns:使用作業系統的DNS解析器
--traceroute:追蹤到每個主機的跳躍路徑
掃描技術:
-sS/sT/sA/sW/sM:TCP SYN/Connect()/ACK/Window/Maimon掃描
-sU:UDP掃描
-sN/sF/sX:TCP Null、FIN和Xmas掃描
--scanflags <標誌>:自定義TCP掃描標誌
-sI <殭屍主機[:探針端口]>:閒置掃描
-sY/sZ:SCTP INIT/COOKIE-ECHO掃描
-sO:IP協議掃描
-b <FTP中繼主機>:FTP彈跳掃描
端口指定和掃描順序:
-p <端口範圍>:僅掃描指定的端口
例如:-p22;-p1-65535;-p U:53,111,137,T:21-25,80,139,8080,S:9
--exclude-ports <端口範圍>:排除掃描指定的端口
-F:快速模式 - 掃描比默認更少的端口
-r:按順序掃描端口 - 不隨機化
--top-ports <數量>:掃描最常見的<數量>個端口
--port-ratio <比率>:掃描比<比率>常見的端口
服務/版本檢測:
-sV:探測打開的端口以確定服務/版本信息
--version-intensity <級別>:設置從0(輕)到9(嘗試所有探針)的級別
--version-light:限制最可能的探針(級別2)
--version-all:嘗試每個單獨的探針(級別9)
--version-trace:顯示詳細的版本掃描活動(用於調試)
腳本掃描:
-sC:等同於 --script=default
--script=<Lua腳本>: <Lua腳本> 是目錄、腳本文件或腳本類別的逗號分隔列表
--script-args=<n1=v1,[
n2=v2,...]>:提供給腳本的參數
--script-args-file=文件名:在文件中提供NSE腳本參數
--script-trace:顯示發送和接收的所有數據
--script-updatedb:更新腳本數據庫
--script-help=<Lua腳本>:顯示有關腳本的幫助
<Lua腳本> 是腳本文件或腳本類別的逗號分隔列表
OS檢測:
-O:啟用OS檢測
--osscan-limit:限制OS檢測對有希望的目標
--osscan-guess:更積極地猜測OS
時間和性能:
需要 <時間> 的選項以秒為單位,或在值后附加 'ms'(毫秒)、's'(秒)、'm'(分鐘)或'h'(小時)(例如 30m)。
-T<0-5>:設置時間模板(較高表示更快)
--min-hostgroup/max-hostgroup <大小>:平行主機掃描組大小
--min-parallelism/max-parallelism <探針數量>:探針並行
--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <時間>:指定探針往返時間
--max-retries <嘗試次數>:限制端口掃描探針的重發次數
--host-timeout <時間>:在此時間后放棄對目標的掃描
--scan-delay/--max-scan-delay <時間>:調整探針之間的延遲
--min-rate <數量>:每秒發送的封包數不低於<數量>
--max-rate <數量>:每秒發送的封包數不高於<數量>
防火牆/入侵檢測和欺騙:
-f; --mtu <值>:分段封包(可選附帶MTU)
-D <欺騙主機1,欺騙主機2[,自己],...>:用欺騙主機偽裝掃描
-S <IP地址>:偽造源地址
-e <接口>:使用指定的接口
-g/--source-port <端口號>:使用指定的端口號
--proxies <URL1,[URL2],...>:通過HTTP/SOCKS4代理中繼連接
--data <十六進制字符串>:附加自定義有效載荷到發送的封包
--data-string <字符串>:附加自定義ASCII字符串到發送的封包
--data-length <數量>:附加隨機數據到發送的封包
--ip-options <選項>:發送指定IP選項的封包
--ttl <值>:設置IP生存時間字段
--spoof-mac <MAC地址/前綴/供應商名稱>:偽造MAC地址
--badsum:發送具有虛偽的TCP/UDP/SCTP校驗和的封包
輸出:
-oN/-oX/-oS/-oG <文件>:將掃描輸出到正常、XML、s|<rIpt kIddi3和Grepable格式,分別到指定的文件名
-oA <基本名>:一次以三種主要格式輸出
-v:增加詳細程度(使用 -vv 或更多以獲得更大效果)
-d:增加調試程度(使用 -dd 或更多以獲得更大效果)
--reason:顯示端口處於特定狀態的原因
--open:僅顯示打開(或可能打開)的端口
--packet-trace:顯示發送和接收的所有封包
--iflist:打印主機接口和路由(用於調試)
--append-output:附加到指定的輸出文件而不是覆蓋它
--resume <文件名>:恢復中斷的掃描
--noninteractive:禁用通過鍵盤的運行時交互
--stylesheet <路徑/URL>:XSL樣式表以將XML輸出轉換為HTML
--webxml:從Nmap.Org引用樣式表以實現更具可移植性的XML
--no-stylesheet:防止將XSL樣式表與XML輸出關聯
其他:
-6:啟用IPv6掃描
-A:啟用OS檢測、版本檢測、腳本掃描和路由跟蹤
--datadir <目錄名>:指定自定義Nmap數據文件位置
--send-eth/--send-ip:使用原始以太網幀或IP封包發送
--privileged:假定用戶具有完全特權
--unprivileged:假定用戶缺乏原始套接字特權
-V:打印版本號
-h:打印此幫助摘要頁。
範例:
nmap -v -A scanme.nmap.org
nmap -v -sn 192.168.0.0/16 10.0.0.0/8
nmap -v -iR 10000 -Pn -p 80
# 不帶參數掃描常用port
kali@kali:~$ nmap 192.168.50.149
Starting Nmap 7.92 ( https://nmap.org ) at 2022-03-09 05:12 EST
Nmap scan report for 192.168.50.149
Host is up (0.10s latency).
Not shown: 989 closed tcp ports (conn-refused)
PORT STATE SERVICE
53/tcp open domain
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
Nmap done: 1 IP address (1 host up) scanned in 10.95 seconds
SYN掃描是一種TCP埠口掃描方法,涉及向目標主機上的各個埠口發送SYN數據包,而不完成TCP握手。如果TCP埠口是開放的,目標主機應該發送一個SYN-ACK,通知我們該埠口是開放的。此時,埠口掃描器不會繼續發送最終的ACK來完成三向握手。
kali@kali:~$ sudo nmap -sS 192.168.50.149
Starting Nmap 7.92 ( https://nmap.org ) at 2022-03-09 06:31 EST
Nmap scan report for 192.168.50.149
Host is up (0.11s latency).
Not shown: 989 closed tcp ports (reset)
PORT STATE SERVICE
53/tcp open domain
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
...
因為三向握手從未完成,所以信息不會傳遞到應用層,因此不會出現在任何應用程序日誌中。SYN掃描也更快速和高效,因為發送和接收的數據包更少。
kali@kali:~$ nmap -sT 192.168.50.149
Starting Nmap 7.92 ( https://nmap.org ) at 2022-03-09 06:44 EST
Nmap scan report for 192.168.50.149
Host is up (0.11s latency).
Not shown: 989 closed tcp ports (conn-refused)
PORT STATE SERVICE
53/tcp open domain
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
...
SMB 掃描
NetBIOS服務聽取TCP端口139,以及多個UDP端口。需要注意的是,SMB(TCP端口445)和NetBIOS是兩個獨立的協議。NetBIOS是一個獨立的會話層協議和服務,允許本地網絡上的計算機彼此通信。雖然現代SMB的實現可以在沒有NetBIOS的情況下運行,但為了向後兼容性,通常一起啟用NetBIOS over TCP(NBT)。這也意味著這兩個服務的列舉通常是相互關聯的。可以使用類似以下語法的工具,如nmap,來掃描這些服務:
kali@kali:~$ nmap -v -p 139,445 -oG smb.txt 192.168.50.1-254
kali@kali:~$ cat smb.txt
# Nmap 7.92 scan initiated Thu Mar 17 06:03:12 2022 as: nmap -v -p 139,445 -oG smb.txt 192.168.50.1-254
# Ports scanned: TCP(2;139,445) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Host: 192.168.50.1 () Status: Down
...
Host: 192.168.50.21 () Status: Up
Host: 192.168.50.21 () Ports: 139/closed/tcp//netbios-ssn///, 445/closed/tcp//microsoft-ds///
...
Host: 192.168.50.217 () Status: Up
Host: 192.168.50.217 () Ports: 139/closed/tcp//netbios-ssn///, 445/closed/tcp//microsoft-ds///
# Nmap done at Thu Mar 17 06:03:18 2022 -- 254 IP addresses (15 hosts up) scanned in 6.17 seconds
Nmap還提供了許多有用的NSE腳本,我們可以使用它們來發現和列舉SMB服務。這些腳本位於/usr/share/nmap/scripts目錄中。
kali@kali:~$ ls -1 /usr/share/nmap/scripts/smb*
/usr/share/nmap/scripts/smb2-capabilities.nse
/usr/share/nmap/scripts/smb2-security-mode.nse
/usr/share/nmap/scripts/smb2-time.nse
/usr/share/nmap/scripts/smb2-vuln-uptime.nse
/usr/share/nmap/scripts/smb-brute.nse
/usr/share/nmap/scripts/smb-double-pulsar-backdoor.nse
/usr/share/nmap/scripts/smb-enum-domains.nse
/usr/share/nmap/scripts/smb-enum-groups.nse
/usr/share/nmap/scripts/smb-enum-processes.nse
/usr/share/nmap/scripts/smb-enum-sessions.nse
/usr/share/nmap/scripts/smb-enum-shares.nse
/usr/share/nmap/scripts/smb-enum-users.nse
/usr/share/nmap/scripts/smb-os-discovery.nse
...
我們找到了一些有趣的Nmap SMB NSE腳本,可以通過SMB執行各種任務,如OS發現和枚舉。
SMB發現腳本僅在目標上啟用了SMBv1時才能工作,這在現代Windows版本中不是默認情況。然而,仍然有很多遺留系統運行著SMBv1,我們已經在Windows主機上啟用了這個特定版本,以模擬這種情況。
讓我們在Windows 11客戶端上嘗試smb-os-discovery模塊。
kali@kali:~$ nmap -v -p 139,445 --script smb-os-discovery 192.168.50.152
...
PORT STATE SERVICE REASON
139/tcp open netbios-ssn syn-ack
445/tcp open microsoft-ds syn-ack
Host script results:
| smb-os-discovery:
| OS: Windows 10 Pro 22000 (Windows 10 Pro 6.3)
| OS CPE: cpe:/o:microsoft:windows_10::-
| Computer name: client01
| NetBIOS computer name: CLIENT01\x00
| Domain name: megacorptwo.com
| Forest name: megacorptwo.com
| FQDN: client01.megacorptwo.com
|_ System time: 2022-03-17T11:54:20-07:00
...
SNMP 掃描
要掃描開放的SNMP端口,我們可以運行nmap,使用-sU選項進行UDP掃描,並使用--open選項限制輸出,僅顯示已打開的端口。這將幫助我們識別正在運行SNMP服務的設備。
kali@kali:~$ sudo nmap -sU --open -p 161 192.168.50.1-254 -oG open-snmp.txt
Starting Nmap 7.92 ( https://nmap.org ) at 2022-03-14 06:02 EDT
Nmap scan report for 192.168.50.151
Host is up (0.10s latency).
PORT STATE SERVICE
161/udp open snmp
Nmap done: 1 IP address (1 host up) scanned in 0.49 seconds
...










