主要拿來掃網路

主要語法

nmap <掃描方> <> <>

掃描方式

預設為TCP-SYN-sS,會傳送帶有SYN的封包,因此永遠不會完成三次握手
root狀態下預設掃前1000個port

結果判斷

如果收到SYN-ACK代表port以開啟
如果收到的封包帶有RST代表port沒開
如果沒收到封包就是被過濾掉了

掃描選項

選項含義參數
-p定義掃描範圍1,2,3,4 或1-4
-p-掃所有端口
--top-ports掃nmap資料庫中最常用的n個端口=數量
-F掃大約100個最常見端口,快速掃描
-sSTCP-SYN,更隱蔽
-sT完整TCP掃描,經歷完三次握手
-sUUDP掃描
-sn不掃port
-n不解析DNS
-iL從文件讀取ip<文件名>.lst
-oA輸出的文件名稱<文件名>
-PE發ICMP請求(Ping)
-Pn不發ICMP請求(Ping)
-sV掃描服務
--packet-trace顯示所有收發的封包
--reason顯示該結果的原因
--disable-arp-ping取消arp ping
--stats-every隔一段時間就顯示狀態=<數字>s/m
-v/-vv增加詳細程度
-A執行服務偵測、作業系統偵測、traceroute,並使用預設腳本
效能
-T5-T4-T3-T2-T1-T0

主機掃描

判斷機器是否在線最有效的方法就是發ICMP

指令範例

sudo nmap 10.129.2.0/24 -sn -oA tnet | grep for | cut -d" " -f5

其中10.129.2.0/24是目標網段
-sn代表不掃port
只有防火牆允許時這樣掃才有用

掃文件提供的IP

如果有一個.lst提供IP列表,nmap可以讀文件內容

sudo nmap -sn -oA tnet -iL hosts.lst | grep for | cut -d" " -f5

-iL host.lst代表從該文件讀出目標IP

掃多個IP

可以用0-128的方式掃IP範圍

sudo nmap -sn -oA tnet 10.129.2.18-20| grep for | cut -d" " -f5

掃單IP

在禁用端口掃描-sn下,nmap會自動發ICMP-PE請求,但是在發ICMP之前會先發ARP ping,而產生ARP reply

作業系統判斷

TTL為128的時後系統是Windows
為64的時候是Unix/Linux

回傳結果

沒有列出的IP不代表沒開,有可能是==濾掉ICMP而已==。

額外閱讀

端口掃描

確認端口狀態時會獲得幾種狀態

狀態解釋
open已建立連接
closed因爲收到RST所以代表關閉
filtered沒收到封包所以不確定
unfilteredTCP-ACK時可訪問但不確定狀態
open∣filtered特定端口沒回應,可能被防火牆檔下
closed∣filteredIP空間掃描時無法確定端口被檔

服務掃描

有些時後 nmap 能給的資訊不夠多
就需要靠TcpdumpNc攔截

Nmap Script Engine

NSE
透過 Lua 腳本與服務互動

類別

類別說明
auth
broadcast
brute
default-sC
discovery
dos
exploit
external
fuzzer
instrusive
malware
version
vuln

預設腳本

sudo nmap <target> -sC

特定腳本

sudo nmap <target> --script <category>

已定義腳本

sudo nmap <target> --script <script-name>,<script-name>

指定腳本

sudo nmap 10.129.2.28 -p 25 --script banner,smtp-commands

辨識目標 Linux 的 distro

smtp-commands

顯示可以與目標 SMTP 伺服器使用的指令

弱點評估

sudo nmap 10.129.2.28 -p 80 -sV --script vuln 

vuln 的 script 找出所有已知漏洞