【PortScan】nmap
## 列出網段內機器的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
# -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
# 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
...