跳到主內容

【PortScan】nmap

## 列出網段內機器的ip
# -Pn 掃描全網段,疼用主機發現
# -sn ping scan 不掃描 port
# -oG console ouput 配合 - 輸出
# 原輸出 Host: 192.168.202.255 ()        Status: Up => 使用awk 取出ip
# > ip.txt 輸出成文字檔
nmap -Pn -sn -n 192.168.202.0/24 -oG - | grep Up |awk '{prin $2}' > ips.txt

## 列出ips.txt 主機有開 tcp/25 的主機
# -p port
# sS 掃描
# -iL 從檔案讀取要掃描的主機
# --open 只列出開啟(up)的結果
sudo nmap -p 25 -sS 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///
# 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
...