Nmap

nmap(Network exploration tool and security scanner)
主要用途:掃描主機的資訊
ex:
查localhost的資訊
nmap localhost

refer
http://insecure.org/nmap/
http://nmap.org/man/zh/index.html


用法
nmap [Scan Types掃瞄類型] [Options掃瞄參數] {target specification指定目標}


target specification(指定目標):
多台單一機器用空格分開 ex192.168.0.155 192.168.0.177
-表示範圍ex 192.168.1-200.50-100
星號表示範圍ex 192.168.*.155(意思就是 192.168.0.155,192.168.1.155⋯192.168.2.255⋯)
netmask表示範圍ex192.168.0.0/24 203.71.166/24
-iL :掃描檔案中指定的目標
-iR : 隨機選擇被掃描的主機數量
–exclude : 要排除的目標
–excludefile : 排除文件中目標
ps:指定的文件格式大致如下
192.168.0.*
203.71.166.20-80
www.xxx.com
www.yyy.com/24
20.0-20.50-100.*


HOST DISCOVERY(偵測目標方式):
-sL: 只列出要掃描的主機列表,不做真正的掃描
-sP: 使用ping和ack掃描,預設選項
-P0: 不偵測目標主機狀態,直接進行掃描
-PS [portlist]: 利用TCP SYN ping
-PA [portlist]: 利用TCP ACK ping
-PU [portlist]: 利用UDP ping
-PE/PP/PM: 使用ICMP ping類型,分別為echo, timestamp,netmask request
-PR : 利用ARP ping
-n :不對ip進行dns解析
-R: 對ip進行dns解析
ps:預設是有時會執行-R選項
ex:
使用ping掃瞄子網路內的所有IP,並列出有回應的IP,但不作進一步測試
nmap -sP 192.168.1.0/24
列出子網路所有IP及對應的主機名稱,但不作ping 及通訊埠偵測
nmap -sL 192.168.1.0/24
利用tcp syn ping偵測遠端主機是否已開啟22,23,80,25通訊埠
nmap -PS22,23,80,25 192.168.1.1
使用UDP協定ping 遠端的主機
nmap -PU 192.168.1.0/24

-sP畫面大致如下:
Host 10.1.2.7 appears to be up.
MAC Address: 00:01:3C:D0:A9:8A (TIW Systems)
Host 10.1.2.9 appears to be up.
MAC Address: 00:11:6B:97:18:22 (Accton Technology)
Nmap finished: 256 IP addresses (2 hosts up) scanned in 16.455 seconds 




SCAN TECHNIQUES(掃描方式):
-sS 使用tcp syn掃描,此為半開放的掃瞄方式,速度較快也較常被用,並可列出有回應的遠端主機已開啟的網路服務埠
-sU 使用udp掃描
-sT 使用tcp Connect()掃描,若-sS掃瞄無效會自動改用此掃描方式
-sA 使用tcp ACK掃描
-sW 使用tcp windows掃描
-sM 使用tcp Maimon掃描
-sN 使用TCP Null掃描
-sF 使用TCP FIN掃描
-sX 使用TCP Xmas掃描
–scanflags : 自訂TCP flags掃描,flags有syn,ack,psh,urg,fin,rst
-sI : 匿名掃描
-sO: 使用IP protocol掃描
-b : 利用遠端ftp主機掃描
ex:
使用TCP SYN掃瞄遠端主機群
nmap -sS 192.168.1.0/24
用UDP協定掃瞄遠端主機群
nmap -sU 192.168.1.0/24
偵測遠端主機已開啟哪些通訊協定 TCP,UDP,ICMP,…
nmap -sO 192.168.1.19

執行-sO時,目標主機tcpdump會類似以下
20:18:01.016785 IP 10.1.2.26 > 10.1.2.25: ip-proto-245 0
20:18:02.018842 IP 10.1.2.26 > 10.1.2.25: pnni 0
20:18:03.020868 IP 10.1.2.26 > 10.1.2.25: stp 0
20:18:04.022906 IP 10.1.2.26 > 10.1.2.25: ip-proto-249 0
20:18:05.024947 IP 10.1.2.26 > 10.1.2.25: idpr-cmtp 0
20:18:06.026991 IP 10.1.2.26 > 10.1.2.25: ip-proto-239 0


PORT SPECIFICATION AND SCAN ORDER(指定port及掃描順序):
預設會掃描1-1024間的所有port,和nmap-services文件指定的port
-p : 指定要掃描的port
ex: -p 22; -p 1-65535; -p U:53,111,137,T:21-25,80,139,8080
ps: -p 1024- 是大於1024的意思
-F: 根據nmap-services文件指定的port掃描
-r: 有順序的掃描port,預設是無順序


SERVICE/VERSION DETECTION(偵測服務版本):
-sV: 啟用伺服器服務版本偵測功能
–version-light: 僅提供少數訊息
–version-all: 顯示全部訊息
–version-trace: 顯示詳細訊息
OS DETECTION(偵測作業系統):
-O: 啟動作業系統偵測
–osscan-limit: 只偵測指定目標
–osscan-guess: 推測作業系統類型

TIMING AND PERFORMANCE(時間和效能):
-T <0-6> 設定timing template(速度調整模板),預設是3,0是最慢但最不容易被發現
–min-hostgroup/max-hostgroup : Parallel host scan group sizes
–min-parallelism/max-parallelism : Probe parallelization
–min_rtt_timeout/max-rtt-timeout/initial-rtt-timeout : Specifies
probe round trip time.
–host-timeout : Give up on target after this long
–scan-delay/–max_scan-delay : Adjust delay between probes

FIREWALL/IDS EVASION AND SPOOFING:
-f; –mtu : fragment packets (optionally w/given MTU)
-D : Cloak a scan with decoys
-S : Spoof source address
-e : Use specified interface
-g/–source-port : Use given port number
–data-length : Append random data to sent packets
–ttl : Set IP time-to-live field
–spoof-mac : Spoof your MAC address

OUTPUT(輸出結果):
-oN 將輸出直接寫在指定的文件上
-oX 輸出成XML格式
-oS 輸出成s|
-oG 輸出成grep格式
-oA : 輸出成以上四種格式
-v:提高輸出結果的詳細度
-d[level]: 設定debug時輸出的詳細度
–open :僅顯示state為open的主機
–packet-trace: 顯示所有傳送和接收的封包
–iflist: 顯示主機介面或路由
–append-output: 將本次掃描結果寫入另一個掃描結果文件後面,不支援xml
–resume : 繼續上次被中斷的掃描,不支援xml
–stylesheet : 指定xsl樣式將xml轉換成html
–no_stylesheet: 不要將xml轉換成html

MISC:
-6: 啟用ipv6掃描
-A: 執行全部選項,包括作業系統和伺服器服務偵測
–datadir :指定nmap參數檔位置
–send-eth 要求使用訊框傳送
–send-ip: 要求使用封包傳送
–privileged: Assume that the user is fully privileged
-V: 顯示版本
-h: 顯示簡短操作說明


網路上的其他範例

偵測遠端主機的作業系統類型
nmap -O 192.168.1.19
nmap -A 192.168.1.19

掃瞄遠端主機,並列出相關詳細的資訊。
nmap -v scanme.nmap.org

以SYN秘密掃瞄網域為scanme.nmap.org所屬 C 子網段的所有存在的主機作業系統類型。
nmap -sS -O scanme.nmap.org/24

進行主機列表及TCP掃瞄特定網路服務,遠端主機的網路含括 198.116.(0-255).(1-127) 網段下。
nmap -sV -p 22,53,110,143,4564 198.116.0-255.1-127

隨機選擇100000台主機,偵測是否開啟 Web 服務,由於此掃瞄較耗時,所以加上-P0 不作主機列表。
nmap -v -iR 100000 -P0 -p 80

對 www.target.com 底下所屬網域進行 TCP Stealth Scan ,掃描的 port 僅限於 FTP,SSH,TELNET,SMTP,POP3
nmap -sS -p 21,22,23,25,110 www.target.com/24

掃描 tcp 與 udp port ,範圍從 1-65535,目標是www.example.com,注意, 如果該機器有防火牆保護著或是微軟主機,這項掃描將會失敗
nmap -sF -sU -p 1-65535 www.example.com


–script vuln 可列出弱點

──(kali㉿kali)-[~]
└─$ sudo nmap -Pn -sS -sV --script vuln 192.168.75.159
Starting Nmap 7.93 ( https://nmap.org ) at 2023-01-22 19:34 EST
Nmap scan report for 192.168.75.159
Host is up (0.00016s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| vulners: 
|   cpe:/a:openbsd:openssh:8.2p1: 
|       CVE-2020-15778  6.8     https://vulners.com/cve/CVE-2020-15778
|       C94132FD-1FA5-5342-B6EE-0DAF45EEFFE3    6.8    https://vulners.com/githubexploit/C94132FD-1FA5-5342-B6EE-0DAF45EEFFE3   *EXPLOIT*
|       10213DBE-F683-58BB-B6D3-353173626207    6.8    https://vulners.com/githubexploit/10213DBE-F683-58BB-B6D3-353173626207   *EXPLOIT*
|       CVE-2020-12062  5.0     https://vulners.com/cve/CVE-2020-12062
|       CVE-2021-28041  4.6     https://vulners.com/cve/CVE-2021-28041
|       CVE-2021-41617  4.4     https://vulners.com/cve/CVE-2021-41617
|       CVE-2020-14145  4.3     https://vulners.com/cve/CVE-2020-14145
|       CVE-2016-20012  4.3     https://vulners.com/cve/CVE-2016-20012
|_      CVE-2021-36368  2.6     https://vulners.com/cve/CVE-2021-36368
...omit...

–script=ssh-brute 可使用ssh爆力密碼破解

# nmap -p 22 --script=ssh-brute --script-args userdb=user.txt,passdb=pw.txt 192.168.1.100
...omit...
NSE: [ssh-brute] Trying username/password pair: root:aaaaaa
...omit...
PORT   STATE SERVICE
22/tcp open  ssh
| ssh-brute:
|   Accounts:
| 	root:123456 - Valid credentials

Nmap done: 1 IP address (1 host up) scanned in 902.61 seconds