Nmap 筆記
轉自:https://vxhly.github.io/2016/09/usage-of-nmap/
又補充了點東西。
Contents
Nmap 在滲透測試中經常用到,它不僅可以用來確定目標網路上計算機的存活狀態,而且可以掃描各個計算機的作業系統、開放埠、服務,還有可能獲得使用者的證書。熟練掌握 Nmap 的用法,可以極大的提高滲透測試技術。
Nmap命令結構
Scanning Format:
nmap -[option] [IP or domain] -oN [fileName.txt]
Nmap 使用解釋
識別系統
Scanning Format:
nmap -O -Pn [IP or domain]
使用 -O 選項,可以獲取到被掃描的主機的系統。 -Pn 選項禁用 Nmap 網路發現功能,假定所有系統都是活動的。
完整全面的掃描
如果希望對某臺主機進行完整全面的掃描,那麼可以使用nmap內建的-A選項。使用了該選項,nmap對目標主機進行主機發現、埠掃描、應用程式與版本偵測、作業系統偵測及呼叫預設NSE指令碼掃描。
nmap –T4 –A –v targethost
其中-A選項用於使用進攻性(Aggressive)方式掃描;-T4指定掃描過程使用的時序(Timing),總有6個級別(0-5),級別越高,掃描速度越快,但也容易被防火牆或IDS檢測並遮蔽掉,在網路通訊狀況良好的情況推薦使用T4;-v表示顯示冗餘(verbosity)資訊,在掃描過程中顯示掃描的細節,從而讓使用者瞭解當前的掃描狀態。
Timing 模板
timing
引數可以指定 nmap 掃描的速度。其中各個選項如下:
* T0 => paranoid 慢速網路掃描,序列掃描,兩次掃描間隔 5 分鐘。掃描速度極慢。
* T1 => Sneky 慢速網路掃描,序列掃描,兩次掃描間隔 15 秒,掃描速度較慢。
* T2 => Polite 中速網路掃描,序列掃描,兩次掃描間隔 400 毫秒,掃描速度慢。
* T3 => Normal 中速網路掃描,並行掃描,兩次掃描間隔 0 秒,掃描速度正常。
* T4 => Aggressive 快速網路掃描,並行掃描,兩次掃描間隔 0 秒,掃描速度較快。
* T5 => Normal 快速網路掃描,並行掃描,兩次掃描間隔 0 秒,掃描速度極快。
Scanning Format:
nmap -T[0-5] [IP or domain]
掃描方式
TCP掃描
埠掃描中最穩定的,利用的是 TCP 三次握手。TCP 掃描通常用於收集有關目標的更多資訊,但是會和目標主機建立一個完成的 TCP 連線。
nmap -sT -Pn [IP or domain]
-sT TCP 連線掃描(s ==> 哪種型別掃描;T ==> TCP 型別)
SYN掃描
TCP 兩次握手(隱藏掃描,速度快,nmap 預設引數)
nmap -sS -Pn [IP or domain]
-sS SYN 連線掃描(s ==> 哪種型別掃描;S ==> SYN 型別)
ACK 掃描
ACK 掃描,用於確定 TCP 埠是否被防火牆過濾。
nmap -sA -Pn [IP or domain]
-sA ACK 連線掃描(s ==> 哪種型別掃描;A ==> ACK 型別)
UDP 掃描
DHCP,DNS,SNMP,TFTP 等都使用了 UDP 協議;UDP 掃描會評估目標系統上的 UDP 埠,可以確認 UDP 埠是開放還是被防火牆過濾。
nmap -sU -Pn [IP or domain]
-sU UDP 連線掃描(s ==> 哪種型別掃描;U ==> UDP 型別)
-sV UDP 掃描中新增版本掃描資訊(V ==> 版本資訊)
不存在 -Pn 引數(從 UDP 協議去理解,你發了就 ok 管他收沒收到)
掃描IP段
For Example:
nmap 192.168.1.1-255# 掃描 192.168.1.1-192.168.1.255 所有 IP nmap 192.168.1.1/24# 掃描 192.168.1.1-192.168.1.255 所有 IP nmap -iL IPL.txt# 掃描 IPL.txt 中儲存的所有 IP
輸出儲存選項
* -oN => 儲存為文字檔案
* -oX => 儲存為 XML 檔案
* -oG => 儲存為 GREPable 輸出
* -oS => 指令碼輸出
其他更詳細的掃描
主機發現
-sL: List Scan 列表掃描,僅將指定的目標的IP列舉出來,不進行主機發現。 -sn: Ping Scan 只進行主機發現,不進行埠掃描。 -Pn: 將所有指定的主機視作開啟的,跳過主機發現的過程。 -PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式進行發現。 -PE/PP/PM: 使用ICMP echo, timestamp, and netmask 請求包發現主機。-PO[protocollist]: 使用IP協議包探測對方主機是否開啟。 -n/-R: -n表示不進行DNS解析;-R表示總是進行DNS解析。 --dns-servers <serv1[,serv2],...>: 指定DNS伺服器。 --system-dns: 指定使用系統的DNS伺服器 --traceroute: 追蹤每個路由節點
Nmap 掃描策略
# 適用所有大小網路最好的 nmap 掃描策略 # 主機發現,生成存活主機列表 nmap -sn -T4 -oG Discovery.gnmap 192.168.56.0/24 grep "Status: Up" Discovery.gnmap | cut -f 2 -d ' ' > LiveHosts.txt # 埠發現,發現大部分常用埠 # https//nmap.org/presentations/BHDC08/bhdc08-slides-fyodor.pdf nmap -sS -T4 -Pn -oG TopTCP -iL LiveHosts.txt nmap -sU -T4 -Pn -oN TopUDP -iL LiveHosts.txt nmap -sS -T4 -Pn --top-ports 3674 -oG 3674 -iL LiveHosts.txt # 埠發現,發現全部埠,但 UDP 埠的掃描會非常慢 nmap -sS -T4 -Pn -p 0-65535 -oN FullTCP -iL LiveHosts.txt nmap -sU -T4 -Pn -p 0-65535 -oN FullUDP -iL LiveHosts.txt # 顯示 TCP\UDP 埠 grep "open" FullTCP|cut -f 1 -d ' ' | sort -nu | cut -f 1 -d '/' |xargs | sed 's/ /,/g'|awk '{print "T:"$0}' grep "open" FullUDP|cut -f 1 -d ' ' | sort -nu | cut -f 1 -d '/' |xargs | sed 's/ /,/g'|awk '{print "U:"$0}' # 偵測服務版本 nmap -sV -T4 -Pn -oG ServiceDetect -iL LiveHosts.txt # 掃做系統掃描 nmap -O -T4 -Pn -oG OSDetect -iL LiveHosts.txt # 系統和服務檢測 nmap -O -sV -T4 -Pn -p U:53,111,137,T:21-25,80,139,8080 -oG OS_Service_Detect -iL LiveHosts.txt # 掃描 B 段的存活主機 nmap -v -sn -PE -n --min-hostgroup 1024 --min-parallelism 1024 172.16.0.0/16 | grep -v down | grep "172.16."
Nmap 躲避防火牆
# 分段 nmap -f # 修改預設 MTU 大小,但必須為 8 的倍數(8,16,24,32 等等) nmap --mtu 24 # 生成隨機數量的欺騙 nmap -D RND:10 [target] # 手動指定欺騙使用的 IP nmap -D decoy1,decoy2,decoy3 etc. # 殭屍網路掃描, 首先需要找到殭屍網路的IP nmap -sI [Zombie IP] [Target IP] # 指定源埠號 nmap --source-port 80 IP # 在每個掃描資料包後追加隨機數量的資料 nmap --data-length 25 IP # MAC 地址欺騙,可以生成不同主機的 MAC 地址 nmap --spoof-mac Dell/Apple/3Com IP
Nmap 進行 Web 漏洞掃描
cd /usr/share/nmap/scripts/ wget https://www.computec.ch/projekte/vulscan/download/nmap_nse_vulscan-2.0.tar.gz && tar xzf nmap_nse_vulscan-2.0.tar.gz nmap -sS -sV --script=vulscan/vulscan.nse target nmap -sS -sV --script=vulscan/vulscan.nse –script-args vulscandb=scipvuldb.csv target nmap -sS -sV --script=vulscan/vulscan.nse –script-args vulscandb=scipvuldb.csv -p80 target nmap -PN -sS -sV --script=vulscan –script-args vulscancorrelation=1 -p80 target nmap -sV --script=vuln target nmap -PN -sS -sV --script=all –script-args vulscancorrelation=1 target
Nmap 埠掃描
# 使用誘餌隱蔽掃描 nmap -D RND:10 [target] (生成隨機數量的誘餌) # fargement # data packed – like orginal one not scan packet # 使用 auxiliary/scanner/ip/ipidseq 來在殭屍網路中查詢IP並使用這些IP進行掃描 — nmap -sI ip target # nmap –source-port 53 target nmap -sS -sV -D IP1,IP2,IP3,IP4,IP5 -f –mtu=24 –data-length=1337 -T2 target (隨機使用不同的IP進行掃描) nmap -Pn -T2 -sV –randomize-hosts IP1,IP2 nmap –script smb-check-vulns.nse -p445 target (使用 NSE 指令碼) nmap -sU -P0 -T Aggressive -p123 target (攻擊式掃描 T1-T5) nmap -sA -PN -sN target nmap -sS -sV -T5 -F -A -O target (版本檢測) nmap -sU -v target (Udp) nmap -sU -P0 (Udp) nmap -sC 192.168.31.10-12 (全部使用預設配置)
Nmap引數
# 目標說明 `-iL` 從已有的ip列表檔案中讀取並掃描 `-iR+掃描數量` 隨機選擇目標進行掃描 `--exclude+ip` 不掃描此ip # 主機發現 `-sL` 列出要掃描的ip `-sn` 不進行埠掃描 `-Pn` 將所有主機都預設為線上,跳過主機發現 `-PS/PA/PU/PY` 使用TCP、SYN/ACK、UDP或SCTP協議去發現埠 `-PE/PP/PM`:使用ICMP響應(echo)、時間戳或子網掩碼請求來發現探測 `-PO` 使用IP協議的ping `-n` 不做DNS解析 `-R` 總是做DNS反向解析 `--dns-servers`指定自定義的DNS伺服器 `--system-dns` 使用作業系統的DNS `--traceroute` 追蹤每臺主機的跳轉路徑 # 掃描技術 `-sS/sT/sA/sW/sM`:使用SYN、TCP、全連線Connect()、ACK、Window、Maimon來進行掃描 `-sU` UDP掃描 `-sN/sF/sX` 使用TCP Null(無flag)、FIN、Xmas(FIN+Push+Urgent)掃描 `--scanflags +flags` 自定義TCP掃描的flags `-sI` 殭屍機掃描 `-sY/sZ` 使用SCTP協議的INIT/COOKIE-ECHO掃描 `-sO` 進行IP協議掃描 `-b <FTP relay host>`:指定FTP中繼主機進行FTP反彈掃描 埠說明和掃描規則 `-p` 只掃描指定的埠 `--exclude-ports` 不對此埠進行掃描 `-F` 快速模式,掃描比預設埠數量更少的埠 `-r` 有序地掃描埠而不是隨機地掃描 `--top-ports <number>` 掃描排名指定的數字前幾位的最常用的埠 `--port-ratio <ratio>` 掃描比輸入的比例更常用的埠 # 服務、版本探測 `-sV`:探測開啟的埠來獲取服務、版本資訊 `--version-intensity <level>`:設定探測服務、版本資訊的強度 `--version-light`:強度為2的探測強度 `--version-all`:強度為9的探測強度 `--version-trace`:將掃描的具體過程顯示出來 # 指令碼掃描 `-sC`:等同於–script=default `--script=<Lua scripts>`:指定使用Lua指令碼進行掃描 `--script-args=<n1=v1,[n2=v2,...]>`:指定指令碼的引數 `--script-args-file=filename`:指定提供指令碼引數的檔案 `--script-trace`:顯示全部發送和收到的資料 `--script-updatedb`:更新指令碼的資料庫 `--script-help=<Lua scripts>`:顯示指令碼的相關資訊 # 系統探測 `-O`:進行系統探測 `--osscan-limit`:限制系統探測的目標,如只探測[Linux系統](https://www.baidu.com/s?wd=Linux%E7%B3%BB%E7%BB%9F&tn=24004469_oem_dg&rsv_dl=gh_pl_sl_csd) `--osscan-guess`:更侵略性地猜測系統 # 定時和效能 `-T<0-5>`:設定時序模組,越高越快 `--min-hostgroup/max-hostgroup <size>`:指定最小、最大的並行主機掃描組大小 `--min-parallelism/max-parallelism <numprobes>`:指定最小、最大並行探測數量 `--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <time>`:指定最小、最大的掃描往返時間 `--max-retries <tries>`:指定最大的重發掃描包的次數 `--host-timeout <time>`:指定超時時間 `--scan-delay/--max-scan-delay <time>`:指定每次探測延遲多長時間,即兩次探測之間間隔多少時間 `--min-rate <number>`:最小的發包速率 `--max-rate <number>`:最大的發包速率 # 防火牆、IDS繞過和欺騙 `-f; --mtu <val>`:設定MTU最大傳輸單元 `-D <decoy1,decoy2[,ME],...>`:偽造多個IP地址和源地址一同傳送包,從而隱藏在眾多的IP地址中而不易被發現 `-S <IP_Address>`:偽造源地址 `-e <iface>`:使用指定的介面 `-g/--source-port <portnum>`:使用指定的源埠 `--proxies <url1,[url2],...>`:指定代理伺服器進行掃描 `--data <hex string>`:在傳送包的資料欄位中追加自定義的十六進位制字串 `--data-string <string>`:在傳送包的資料欄位中追加自定義的ASCII字串 `--data-length <num>`:在傳送包的資料欄位中追加隨機的資料 `--ip-options <options>`:使用指定的IP選項傳送包 `--ttl <val>`:設定TTL值 `--spoof-[mac](https://www.baidu.com/s?wd=mac&tn=24004469_oem_dg&rsv_dl=gh_pl_sl_csd) <mac address/prefix/vendor name>`:偽造源Mac地址 `--badsum`:傳送偽造TCP/UDP/SCTP校驗和Checksum的資料包 # 輸出 `-oN/-oX/-oS/-oG <file>`:分別輸出正常、XML、s| # 雜項 `-6`:掃描IPv6的地址 `-A`:一次掃描包含系統探測、版本探測、指令碼掃描和跟蹤掃描 `--datadir <dirname>`:指定自定義的[nmap](https://www.baidu.com/s?wd=nmap&tn=24004469_oem_dg&rsv_dl=gh_pl_sl_csd)資料檔案位置 `--send-eth/--send-ip`:使用原始乙太網幀或IP資料包傳送 `--privileged`:假設使用者有全部許可權 `--unprivileged`:假設使用者缺少原始套接字許可權 `-V`:輸出版本號 `-h`:輸出幫助資訊