網路安全(一):資訊收集之玩轉nmap(理論篇)

更新時間

2022年09月06日16:20:10

  • 完成nmap介紹,目標選擇,主機發現部分

2022年10月28日21:19:20

  • 完成最基本的內容,埠掃描,版本和系統探測,安全其他等
  • 打算的更新計劃:更多案例和圖片,導出xml文件轉為Excel分析(周末先休息一下吧)

nmap

nmap(Network Mapper)是免費、開源的網路發現和安全審計工具,通常我們用於收集網路中的比如主機和埠等資訊,從而為下一步的攻擊提供突破口,制定攻擊的計劃。也可為網路管理員使用,從而針對性修復可能暴露的安全漏洞。

具體的功能介紹可以登錄官網//nmap.org,來獲取軟體包和官方教程。

  • 當我們下載好nmap後在命令行中會多出這些命令:
  • nmap,集成了:
    • 主機發現(Host Discovery)
    • 埠掃描(Port Scanning)
    • 版本偵測(Version Detection)
    • 作業系統偵測(Operating System Detection)
  • zenmap,zenmap為nmap的影像化版本。
  • ncat,可進行靈活的數據傳輸,重定向。
  • ndiff,對比掃描結果的工具。
  • nping,包生成和響應工具。

圖1.Windows查看nmap提供的可執行文件

nmap命令

nmap發現的原理無非就是,發送數據包到目標主機,依據響應報文來識別已經開放的埠等資訊等,屬於主動攻擊。

  • nmap的命令基本上可以分為有「三要素」,其中掃描的目標是必選的。掃描類型默認使用-sT。
    • nmap [ <掃描類型> …] [ <選項> ] { <掃描目標說明> }

  • 可以使用-h參數或者無參數,以輸出幫助資訊。
  • 一下介紹的主機發現、埠掃描的方式都可以排列組合來使用。

下面的篇幅較長,如果是忘記了命令,可以只看這部分即可,我在這裡翻譯了nmap -h原文,並做了小總結。時間寶貴,頭髮也寶貴呢。

Nmap 7.93 (https://nmap.org)

用法:nmap [掃描類型] [選項] {要掃描的目標}

掃描的目標:
    可以是 主機名、IP 地址、網路等。
#(可以使用逗號,指定不連續的ip段 減號-指定連續ip段 斜杠/指定掩碼 星號*代表全部) 例如:scanme.nmap.org、microsoft.com
/24192.168.0.1; 10.0.0-255.1-254 -iL <inputfilename>: 從文件中讀取要掃描的主機列表 -iR <主機數量>: 選擇隨機目標 #0為無限生成 --exclude <host1[,host2][,host3],...>:要排除的 主機/網路 --excludefile <exclude_file>: 從文件中選擇要排除的主機列表 主機發現: -sL: 列表掃描 - 列印主機的列表(對域名進行掃描時,可以得到IP列表 ) -sn: Ping 掃描,同時禁用埠掃描,用來檢查主機存活狀態。 -Pn: 禁用 Ping 掃描,默認所有主機都是存活狀態 -PS/PA/PU/PY[埠列表]:對指定的埠通過 TCP SYN/ACK、UDP 或 SCTP 掃描來發現主機 -PE/PP/PM: 對指定的埠通過 ICMP、時間戳和網路掩碼請求發現和探測主機 -PO[協議列表]: IP 協議 Ping -n/-R: 不進行DNS解析/ 進行DNS解析 [默認] --dns-servers <serv1[,serv2],...>: 指定自定義 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 <flags>: 自定義 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 <number>: 掃描<number>個最常用的埠 --port-ratio <ratio>: 掃描比<ratio>更常見的埠 服務/版本檢測: -sV: 探測開放埠以確定服務/版本資訊 --version-intensity <level>:設置從 0(輕)到 9(嘗試所有探針) --version-light: 限制最可能的探測(強度 2--version-all: 嘗試每一個探測(強度 9--version-trace: 顯示詳細的版本掃描活動(用於調試) 腳本掃描: -sC: 相當於--script=default --script=<Lua scripts>: 使用腳本進行掃描,多個腳本時用逗號分隔,支援通配符。 --script-args=<n1=v1,[n2=v2,...]>: 為腳本提供參數 --script-args-file=filename: 從文件中提供 NSE 腳本參數 --script-trace: 顯示所有發送和接收的數據 --script-updatedb: 更新腳本資料庫。 --script-help=<Lua 腳本>: 顯示有關腳本的幫助。 作業系統檢測: -O: 啟用作業系統檢測 --osscan-limit: 將作業系統檢測限制為有希望的目標 --osscan-guess: 更積極地猜測作業系統 時間和性能: 默認是秒,也可以 「ms」(毫秒),'s'(秒)、'm'(分鐘)或 'h'(小時)到值(例如 30m)。 -T<0-5>: 設置時序模板(越高掃描速度越快,但是準確性降低) --min-hostgroup/max-hostgroup <size>: 並行主機掃描組大小 --min-parallelism/max-parallelism <numrobes>:探針並行化 --min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <時間>: 指定探測往返時間。 --max-retries <tries>: 限制埠掃描探測重傳的次數。 --host-timeout <time>: 多長時間後放棄目標 --scan-delay/--max-scan-delay <time>:調整探針之間的延遲 --min-rate <number>: 每秒發送數據包不低於 <number> --max-rate <number>: 每秒發送數據包的速度不超過 <number> 防火牆/IDS 逃避和欺騙: -f; --mtu <val>: 分片數據包(可選地 w/給定的 MTU) -D <誘餌IP1,誘餌IP2[,本機IP],...>:使用誘餌隱藏掃描。即發送參雜著假ip的數據包檢測 -S <IP 地址>: 欺騙源地址。就是偽造源主機IP地址。 -e <網路介面>: 指定從哪個網卡發送和接收數據包。 -g/--source-port <portnum>: 使用給定的埠號。針對防火牆只允許的源埠 --proxies <url1,[url2],...>: 通過 HTTP/SOCKS4 代理中繼連接 --data <hex string>: 將自定義有效負載附加到發送的數據包 --data-string <string>: 將自定義 ASCII 字元串附加到發送的數據包中 --data-length <num>: 將隨機數據附加到發送的數據包中。 改變發生數據包的默認的長度,防止被識別出來。 --ip-options <options>: 發送帶有指定ip選項的數據包 --ttl <val>: 設置 IP 生存時間欄位 --spoof-mac <mac地址/前綴/供應商名稱>: 欺騙你的MAC地址 --badsum: 發送帶有虛假 TCP/UDP/SCTP 校驗和的數據包 輸出: -oN/-oX/-oS/-oG <file>: 掃描結果寫入到文件。 正常,XML,s|<rIpt kIddi3,Grepable 格式, -oA <basename>: 一次輸出三種主要格式 -v: 增加詳細程度(使用 -vv 或更多以獲得更好的效果) -d: 增加調試級別(使用 -dd 或更多以獲得更好的效果) --reason: 顯示埠處於特定狀態的原因 --open: 僅顯示打開(或可能打開)的埠 --packet-trace: 顯示所有發送和接收的數據包 --iflist: 列印主機介面和路由(用於調試) --append-output: 附加到而不是破壞指定的輸出文件 --resume <文件名>: 恢復中止的掃描 --noninteractive: 通過鍵盤禁用運行時交互 --stylesheet <path/URL>:將 XML 輸出轉換為 HTML 的 XSL 樣式表 --webxml: 參考 Nmap.Org 的樣式表以獲得更隨身的 XML --no-stylesheet: 防止 XSL 樣式表與 XML 輸出相關聯 雜項: -6: 啟用 IPv6 掃描 -A: 也叫全面掃描。作業系統檢測、版本檢測、腳本掃描和跟蹤路由。 --datadir <dirname>: 指定自定義 Nmap 數據文件位置 --send-eth/--send-ip:使用原始乙太網幀或 IP 數據包發送 --privileged: 假設用戶擁有完全特權 --unprivileged: 假設用戶缺乏原始套接字許可權 -V:列印版本號 -h:列印此幫助摘要頁。 有關更多選項和示例,請參見手冊頁 (https://nmap.org/book/man.html)

掃描目標

/,-*符號

nmap命令中掃描的目標是不可省略的參數,可以使用/,-*符號來確認目標範圍。當然這三種都可以混合使用。

# 直接單台主機ip,當然直接使用域名也可以,就是不怎麼靈活而已
nmap 192.168.1.1

# 直接使用/掩碼,掃描網段內全部ip
nmap 192.168.1.1/24

# 使用,指定對象,一般針對於不連續的網段
nmap 192.168.2.1,10,172,192,254

# 使用-選擇連續的範圍
nmap 192.168.3.1-255

# 使用*選擇本段全部,和0-255一樣
nmap 192.168.4.*
# ,/-*四者可以任意結合起來使用 nmap
192.168.1,2,3.* nmap 192.168.1-192,240.1/24

–exclude排除host

# 比如你指定了大範圍內的ip,但是某些ip你又想排除,後面可以無限寫
nmap 192.168.1.1/24 --exclude 192.168.1.1 192.168.1.100

-iL從文件中導入和–excludefile排除

有時候從dhcp伺服器中導出了在線的ip,可以使用文件來批量的選擇掃描的目標,比如某公司禁止公司內部電腦開啟web服務等,使用文件導入的方法,可以跳過離線主機進行的掃描。

  • -iL  <目標ip的文件路徑>
  • --excludefile <排除ip的文件路徑>

文件格式中ip之間可以使用換行(\n),同時也支援,/-語法。

-iR隨機掃描

  • -iR <隨機生成ip數量>
    • -iR 0  # 0代表無限次

以下是我使用nmap -iR 2後的抓包,可以看到ip是隨機的,默認的

圖2.默認掃描發送的報文

掃描類型可以省略,預設時使用-sT參數,即TCP連接掃描,預設情況下發送三個報文

  • ICMP  Echo Request
  • TCP SYN 80和443

埠模式

nmap將埠分成六個狀態:

  • open(開放)
    • 有回顯
  • closed(關閉)
    • 無回顯,可能是關閉了,也可能是防火牆設置為drop(丟棄而不做回應)。
  • filtered(被過濾)
    • 在掃描者和被掃描著之間,此埠可能在防火牆、設備上的伺服器、交換機路由器acl等過濾了。返回拒絕訪問。
  • unfiltered(未被過濾)
    • 可以訪問埠,但是無法確認埠是否開放,一般情況只在TCP ACK掃描中出現。
  • open|filtered(開放或者被過濾)
    • 當無法確定埠是開放還是被過濾的,可能是開放的埠不響應也可能返回目標埠報文在中途被防火牆、acl過濾了或者網路丟包了
  • closed|filtered(關閉或者被過濾)
    • 和上面open|filtered類似,不知道是關閉還是被過濾了。

主機發現

針對於不同的設備和網路環境,不同的掃描方式會有著截然不同的效果。

  • 大體上分為這幾種:
    • ICMP發現主機
      • sP,發送ICMP echo-Request報文
    • TCP埠連接發現主機
      • PS,發送SYN握手包
      • PA,發送ACK確認包
    • UDP埠連接發現主機
      • PU
    • DNS反向解析
      • sL通過向DNS伺服器反向解析(當然不要加上-n)

-sL(列表掃描)

其實這個參數不會對目標進行掃描操作,但因為nmap默認情況下是會對本機設置的所有DNS伺服器反向解析其IP,即獲取hostname,所以使用起來可以起到獲取目標IP域名的效果。

 圖3.sL掃描會向本機DNS依據IP反解析hostname

我的本機默認的DNS是192.168.24.8和223.5.5.5。話說對公網的DNS伺服器反向解析內網的IP的hostname,是不是有點太搞笑了。

  • -dns-servers <DNS Server> 指定DNS伺服器
  • -n 不解析DNS,那就真的只是列出IP地址而已了
  • -R 強制解析DNS
┌──(kali㉿kali)-[~]
└─$ nmap -sL 192.168.24.1/30 -dbs-servers 192.168.28.8
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-26 22:39 EDT
Nmap scan report for 192.168.24.0
Nmap scan report for redmiAX6(192.168.1.1)
Nmap scan report for xiaomi10s(192.168.24.2)
Nmap scan report for 192.168.24.3Nmap done: 4 IP addresses (2 hosts up) scanned in 0.01 seconds

-sP(Ping掃描)

只使用Ping的方式判斷主機存活。就和使用ping命令判斷主機在線一樣,如果有icmp回顯那麼nmap就認為其是存活的。

  • 只發送icmp  echo-request
    • 有icmp echo-reply(icmp回顯)就在線

 圖4.sP方式掃描

┌──(kali㉿kali)-[~]
└─$ nmap -sP 192.168.24.1-100
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-26 23:14 EDT
Nmap scan report for 192.168.24.1
Host is up (0.0034s latency).
Nmap scan report for 192.168.24.4
Host is up (0.0021s latency).
Nmap scan report for 192.168.24.6
Host is up (0.0026s latency).
Nmap scan report for 192.168.24.9
Host is up (0.0027s latency).
Nmap scan report for 192.168.24.10
Host is up (0.0033s latency).
Nmap scan report for 192.168.24.15
Host is up (0.0025s latency).
...省略

-P0 (無ping)、-Pn

如果對方關閉了icmp回顯的功能,那麼nmap會判斷本主機不在線,同時後續的埠掃描等也不會進行,會給掃描結果帶來干擾。

Windows下開關回顯:

 圖5.Windows系統可在防火牆規則開關icmp回顯

 Linux關閉回顯:

#臨時關閉
echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all

#永久
echo net.ipv4.icmp_echo_ignore_all=0 >> /etc/sysctl.conf
sysctl -p

 圖6.ping測試下的icmp開關效果

 所以為了排除干擾,可以加上-P0參數,這樣後續的埠掃描等操作也不會被干擾。請注意,P0雖然可以更徹底的掃描,但是代價是如果該地址本就真的不存在設備或者設備不在線,那麼將花費大量的時間做無用功。

Windows主機上開啟smb文件共享,確認開啟445埠。並且是關閉的icmp回顯。

圖7.使用netstat查看埠監聽情況

對於關閉icmp回顯的設備,加不加-P0參數對掃描的結果有很大的影響。 

 圖8.使用nmap 添加和不添加-P0的測試

 -PS[portlist] (TCP SYN Ping)

向目標主機的常用埠發送標誌SYN=1的TCP握手報文,默認-PS不加參數時候會向常用的TCP埠發送SYN報文,並不需要建立TCP連接,只要有回應那麼就說明主機在線的。在判斷主機存活時候隨便還探測了開放的TCP埠。

  • 這個常用的TCP埠官方說默認的目標埠是80,但是實際上抓包發現其實都有很多,因為默認情況下自帶了對TCP1660個常用埠的掃描。

圖9.PS抓取報文的效果

#PS不帶參數
nmap -PS 192.168.5.1/24

#如果需要添加指定埠,比如你發現目標喜歡使用65522作為ssh埠,或者65000到65535這些都有可能,可以添加到掃描列表中,默認情況下預設的TCP埠也依舊會掃描

nmap -PS65522,65000-65535 192.168.5.1/24

-PA[portlist] (TCP ACK Ping)

-PA和PS其實是類似的,向目標主機的常用埠發送TCP報文,只不過這次是ACK=1的TCP確認報文。主要是用於通過一些有防火牆防火牆,因為防火牆會依據SYN報文來識別TCP連接,比較容易暴露自己。

一般情況ACK和SYN一起發送效果比較好。

nmap -PS -PA 192.168.5.1/24

-PU[portlist] (UDP Ping)

前面-PS和PA都是基於TCP掃描,PU使則是使用UDP掃描,如果網路中TCP的SYN和ACK都被防火牆隔離了,那就使用UDP。 

nmap -PU 192.168.5.1/24

 -PR (ARP Ping)

TCP和UDP這些都是基於IP掃描,如果只需要掃描區域網內(同網段,不跨越網關),可以使用ARP掃描,往往都不容易被察覺也比網路層掃描更可靠,當廣播詢問IP的對應MAC地址時候,當有回應那麼就認為主機在線。

nmap -PR 192.168.5.1/24

-n (不用域名解析)

  • nmap會對目標的IP地址進行反向域名解析。注意如果和-sL一起使用那就真的是只列出IP地址。

-R (為所有目標解析域名)

  • 強制nmap對目標IP地址進行反向域名解析。 一般只有當發現機器正在運行時才進行這項操作。

埠掃描

-p <port ranges>指定目標埠

如果使用-p自定義範圍。

  • -p和主機發現類似的用法,可以使用,-來選擇範圍。
nmap -sS -p 1-1024,3389,3306 192.168.5.1/24
  • 也可以使用U:和T:來選擇UDP埠、TCP埠範圍。
nmap -sS -sU -p U:53,67,68,T:1-1024,3389,3306 192.168.5.1/24

-F和–top-ports快速掃描

默認是使用常見的1000個埠作為目標,如果覺得不夠快也可以使用-F將使用最常見的100個埠作為目標。使用–top-ports也可以規定前幾的埠為目標,-F相當於–top-ports 100的情況。

# 使用-F掃描最常用的100埠
nmap -F 192.168.5.1

# 使用--top-ports 自定義掃描最長用的埠,比如最常用的500個埠
nmap --top-ports 500 192.168.5.1

-r順序埠掃描

一個小參數,設置了可以按順序掃描埠,默認情況是先掃常用埠再掃用戶自定義的埠,其實意義不是那麼大。

-sS (TCP SYN掃描)

此模式需要管理員(administrator或root)許可權。

sS是最常用的掃描方式,不會建立完整的TCP連接,只發送SYN連接請求,所以速度很快,而且通常不會被掃描目標記錄。

  • 發送SYN,返回SYN/ACK->open開放
  • 發送SYN,返回RST->closed關閉
  • 發送SYN,等待超時,發送SYN,等待超時->filtered被過濾
  • 發送SYN,返回ICMP不可達->filtered被過濾 
nmap -sS -p 1-65535 192.168.5.1

-sT (TCP connect()掃描)

sT需要建立完整的TCP連接,即三次握手。所以判斷埠開放更可靠,但是很有可能會被記錄下連接的日誌。

默認情況下不加參數都是使用此方法作為埠掃描。

nmap -sT 192.168.5.1

-sU (UDP掃描)

此模式需要管理員(administrator或root)許可權。

對UDP埠進行掃描,使用-sT、-sS都不掃描UDP埠,所以如果有需要掃描UDP那就務必加上此。當然也可以結合TCP掃描來使用。

其原理為想目標埠發送UDP探測包,等待相應,返回ICMP埠不可達(ICMP port unreachable)為埠關閉,等待超時則為埠被過濾

sudo nmap -sS -sU -p U:53,67,68,161,162,T:1-65535 192.168.5.1/24

-sN; -sF; -sX ;-sM (TCP Null掃描,TCP FIN掃描,Xmas掃描,TCP Maimon掃描)

此模式需要管理員(administrator或root)許可權。

nmap發現TCP埠開放與否對不同標誌位上TCP報文有不同回應,回復RST報文則認為開放,超時則認為關閉或過濾。因為對於伺服器來說這些TCP報文都是錯誤的,不保證所有埠的都可以正確的相應,但是這比SYN和整個TCP連接都要來得更隱蔽。(不過我都沒有用過啊)

  • -sN,TCP Null掃描,發送標誌位都為0的TCP包,用於測試防火牆。
  • -sF,TCP FIN掃描,發送標誌位FIN=1(關閉連接)的TCP包。埠掃描效果不是很好,但是很隱蔽。
  • -sX,Xmas掃描,這個更過分了,直接把FIN,PSH和URG標誌位都置1了。
  • -sM,TCP Maimon掃描,發送標誌位FIN,ACK的TCP報文。
  • --scanflags (訂製的TCP掃描),這些標誌位你甚至可以自己定義,不過記得配合其他TCP掃描。
    • sudo nmap -sA -F 127.0.0.1 --scanflags URGACKPSHRSTSYNFIN
      # 控制位可以任意順序,並且嘛之間不用空格,直接連著一起寫

-sA (TCP ACK掃描)

此模式需要管理員(administrator或root)許可權。

 ACK掃描,將TCP報文標誌位ACK=1,可以用於檢測防火牆屏蔽了哪個埠,不過濾的主機埠反而啥也掃不出。

有空要補上圖。因為我手機上並沒有模擬出來效果啊。

-s0(IP協議掃描)

IP 協議掃描確定目標機支援哪些IP協議 (TCP,UDP,ICMP,IGMP等等)。從技術上說,這不是埠掃描 ,既然它遍歷的是IP協議號,但是也可以使用-p來指定埠,只不過這個埠對應的是協議的號碼。

圖10.這裡的數字不是代表埠,而是協議

-sI <zombie host[:probeport]> (空閑掃描)

殭屍主機也就是肉雞,利用side-channel攻擊,nmap對此埠進行掃描操作,從而更加隱蔽的進行掃描,若安全設備溯源也是溯源到肉雞的IP。

  • -sI <host>[:<port>]   埠可以不寫,默認80
    • -sI 192.168.1.1:8888
sudo nmap -sI 192.168.2.8:8080 192.168.2.1/24 -Pn

-b <ftp relay host> (FTP彈跳掃描)

這個是利用FTP代理鏈接漏洞,允許用戶連接到一台FTP伺服器,然後要求文件送到一台第三方伺服器。可以有效的隱藏自己。

 這裡參數格式是-

  • -b <username>:<password>@<server>:<port>
sudo nmap -sS ftp:123@192.168.1.1:21

 版本探測和系統探測

不同服務也有不同版本,比如SNMP有v1、v2c、v3三種版本,SMB也有v1.0、v2.0、v3.0三種版本。不同的版本也有不同的特性,為此這些資訊也是很重要的內容。

-sV (版本探測)

  • -sV  打開版本探測。在埠掃描的基礎上進行開放埠的服務分析。
    • –allports (不為版本探測排除任何埠) 默認情況下會跳過tcp:9100,因為某些印表機簡單地列印送到該埠的任何數據,這回導致數十頁HTTP get請求,二進位 SSL會話請求等等被列印出來
    • –version-intensity <intensity> (設置 版本掃描強度) 強度範圍:0和9,默認是7。強度越高越精確,但是耗時更久。

      • –version-light (輕量級模式) 相當於–version-intensity 2
      • –version-all (嘗試每埠探測) 相當於–version-intensity 9
    • –version-trace(顯示正在進行的掃描的調試資訊)可以看到具體的日誌。

-sR(RPC掃描)

  • -sR 利用RPC協議來進行版本探測,不過現在使用sV就涵蓋了其中,少用。其實我也不太懂RPC,之前配置NFS時候遇到過RPC:111和113埠。

-O (啟用作業系統探測)

  • -O 啟用作業系統探測,
    • –osscan-limit (針對指定的目標進行作業系統檢測)
      • 如果發現一個打開和關閉的TCP埠時,作業系統檢測會更有效。 採用這個選項,nmap只對滿足這個條件的主機進行作業系統檢測,這樣可以 節約時間,特別在使用-P0掃描多個主機時。
    • –osscan-guess; –fuzzy (推測作業系統檢測結果)

      • 當Nmap無法確定所檢測的作業系統時,會儘可能地提供最相近的匹配,Nmap默認 進行這種匹配,使用上述任一個選項使得Nmap的推測更加有效。

-A(作業系統探測和版本探測)

  • -A 作業系統和版本探測都進行,和啟動-sV和-O一樣,sV和O的參數在這裡也可以使用。

時間與性能、顯示

因為nmap通常對整個進行掃描,倘若網段範圍主機非常多,適當的添加參數調整參數會大大的節約時間。

-T <Paranoid|Sneaky|Polite|Normal|Aggressive|Insane> (設置時間模板)

只要記住這個就可以了,因為夠用了,其他時間選項其實更加細緻的設置,T時間模板已經封裝好。

  • -T<number> 範圍0-5,可以使用數字來代替paranoid (0)、sneaky (1)、polite (2)、normal(3)、 aggressive (4)和insane (5)
    • -T3 即為默認
    • -T0,T1,可以用於躲避IDS的探測,但是速度比較慢
    • -T2 降低掃描速度
    • -T4 加快掃描速度,也是一般情況也試用比較可靠有線網路
    • -T5 最快的掃描速度,但是可能讓目標主機處理不過來從而導致掃描結果不準確。

–min-hostgroup <size>; –max-hostgroup <size> (調整並行掃描組的大小)

原來掃描結果需要最後才可以全部看到,但是可以設置組的大小,從而讓當前組掃完就可以的看結果,如果組的大小定義為50,掃描50個主機掃描完成後可以得到報告(詳細模式中的補充資訊 除外)。

不過其實個人覺得-v或者-vv參數更有效果吧。

–scan-delay <milliseconds>; –max-scan-delay <milliseconds> (調整探測報文的時間間隔)

設置掃描包的發送間隔,單位ms。

–min-parallelism <numprobes>; –max-parallelism <numprobes> (調整探測報文的並行度)

–min-rtt-timeout <milliseconds>, –max-rtt-timeout <milliseconds>, –initial-rtt-timeout <milliseconds> (調整探測報文超時)

–host-timeout <milliseconds> (放棄低速目標主機)

跳過通訊差的主機,設置多少ms延遲才跳過。比如樓下蹭網的鄰居,每一次掃描需要等待許久,非常消耗時間,乾脆跳過。

防火牆/IDS躲避和哄騙

-D <decoy1 [,decoy2][,ME],…>(使用誘餌隱蔽掃描)

使用誘餌隱藏掃描。即發送參雜著假ip的數據包檢測。作為誘餌ip須在線。

使用逗號分隔每個誘餌主機,比如:

sudo nmap -sS -D 192.168.1.1,192.168.2.1,192.168.3.1,192.168.5.1 192.168.5.2-254

-S <IP_Address> (源地址哄騙)

  • -S 偽造IP報文中原地址,若有多張網卡那麼要指定發送和接收的網卡。
    • -e <network interface>指定網卡 比如 -e eth0,在Windows上可以使用–iflist查看網卡。

–source-port <portnumber>; -g <portnumber> (源埠哄騙)

自定義源埠

–data-length <number> (發送報文時 附加隨機數據)

默認時候發送的IP報文都是沒有數據的空白報文,追加隨機的數據可以減小被懷疑的可能,但是性能消耗會增加。

  • –ttl <value> (設置IP time-to-live)

設置ttl,比如–ttl 255

–randomize-hosts (對目標主機的順序隨機排列)

–spoof-mac <mac address,prefix,or vendor name> (MAC地址哄騙)

這個比較有趣,可以輸入完整的mac地址,也可以輸入前面3Byte的mac,也可以輸入廠家的名字(使用自帶庫中的預設)。

比如 —-spoof-mac 01:01:01:01:22:1a,a20123,Cisco

輸出

nmap可以將結果輸出為文件,同時也可以配合–resume實現繼續之前未完成的任務。

-oA <basename> (輸出至所有格式)

輸出以下的全部,當然如果不需要也可以任意選擇需要的:

  • -oN <filespec> (標準輸出)  標準輸出可以用於–resume斷點繼續。
    • –append-output (在輸出文件中添加) 
  • -oX <filespec> (XML輸出) 推薦使用此格式,因為XML使用場景很廣,可方便被程式語言調用。比如使用python的腳本導結果為excel表格等。
  • -oG <filespec> (Grep輸出) 可以很方便的在grep、awk、cut、sed、diff等命令中展現。

-v (提高輸出資訊的詳細度)

  • -vv 比起-v更詳細,但是終端列印消息太多可能主要的資訊就不太好看得見了。
  • -d [level] (提高或設置調試級別) 這個一般情況是調試用的

–packet-trace (跟蹤發送和接收的報文)

要求Nmap列印發送和接收的每個報文的摘要,也可以方便初學者理解nmap工作原理。

–iflist (列舉介面和路由)

用於分析路由,如果報文發送錯誤網卡可以使用-e來定義網卡介面,但是nmap中的命名是Linux那一套,在Windows要注意。

 

 圖11.顯示網卡和路由