跳到內容

駭客/工具/網路/Nmap

來自華夏公益教科書,開放的書籍,為開放的世界
nmap 在電影《駭客帝國》中被特工 Trinity 用於檢測一個易受攻擊節點上執行的 SSH,然後利用 SSHv1 CRC32 漏洞進行攻擊,獲取 root 許可權,從而關閉電網。

駭客 Fyodor(Gordon Lynn)編寫了nmap 來協助埠掃描和網路分析。他於 Phrack 雜誌,第 7 卷,第 51 期,文章 11 中釋出了原始原始碼,現在在 Insecure.org 上維護該工具。世界各地的安全專家都使用 nmap 進行簡單的網路檢查,檢測開放埠和服務版本;美國國家安全域性 在大型看板上列出了安全工具及其當前版本——包括 nmap、Snort 和 Nessus。

nmap 不僅僅檢測開放埠;它還檢測服務和作業系統版本。可以使用 nmap 掃描預設埠範圍或特定子集;它可以掃描單個主機、範圍或集合;它可以找出主機是啟動還是關閉。對於熟練的使用者來說,nmap 可以成為一個強大的工具,用於善或惡。

nmap 網路掃描工具提供了一組多樣的選項來控制其行為。它可以掃描多個主機和主機範圍;使用各種掃描技術;識別作業系統和服務版本;甚至執行隱形掃描以避免觸發某些入侵檢測系統和入侵防禦系統工具。

使用示例 

nmap -A -v <目標 IP 地址>

nmap -Pn -sS -A <目標 IP 地址>

基本使用

[編輯 | 編輯原始碼]

首先,讓我們瞭解一下 nmap 的一些基本用法。至少應該知道如何掃描主機和檢查特定埠;這些基本知識將向你展示目標網路上有哪些埠是開放的。

掃描主機

[編輯 | 編輯原始碼]

nmap 的基本用法就是掃描目標 IP 地址或域名。例如

bluefox@ice-ldap:~$ nmap webserv1

Starting Nmap 4.10 ( http://www.insecure.org/nmap/ ) at 2007-04-01 15:52 EDT
Interesting ports on webserv1 (192.168.30.11):
Not shown: 1644 closed ports, 28 filtered ports
PORT     STATE SERVICE
21/tcp   close  ftp
22/tcp   close  ssh
80/tcp   close  http
111/tcp  close  rpcbind
199/tcp  close  smux
443/tcp  open  https
1008/tcp close  ufsd

Nmap finished: 1 IP address (1 host up) scanned in 15.142 seconds

在這種操作模式下,nmap 顯示開放埠和該埠上執行的常見服務。nmap 不會準確顯示移動到其他埠的服務;例如,埠 21 上的 http 將顯示為 ftp。

也可以在 nmap 的命令列上指定多個主機

bluefox@ice-ldap:~$ nmap dbserv1 webserv1

Starting Nmap 4.10 ( http://www.insecure.org/nmap/ ) at 2007-04-01 15:56 EDT
Interesting ports on 192.168.40.11:
Not shown: 1667 closed ports
PORT     STATE    SERVICE
22/tcp   close     ssh
135/tcp  filtered msrpc
136/tcp  filtered profile
137/tcp  filtered netbios-ns
138/tcp  filtered netbios-dgm
139/tcp  filtered netbios-ssn
199/tcp  open     smux
445/tcp  filtered microsoft-ds
1720/tcp filtered H.323/Q.931
3306/tcp open     mysql
3389/tcp filtered ms-term-serv
5631/tcp filtered pcanywheredata

Interesting ports on webserv1 (192.168.30.11):
Not shown: 1644 closed ports, 28 filtered ports
PORT     STATE SERVICE
21/tcp   close  ftp
22/tcp   close  ssh
80/tcp   close  http
111/tcp  close  rpcbind
199/tcp  close  smux
443/tcp  open  https
1008/tcp close  ufsd

Nmap finished: 2 IP addresses (2 hosts up) scanned in 17.001 seconds

如你所見,我的 Web 伺服器暴露了太多埠,我的 MySQL 伺服器的防火牆很弱;我從 DMZ 運行了此掃描,它必須透過防火牆才能進入我的網路。在這裡我們可以看到 nmap 的強大之處:我知道應該將防火牆切換到預設拒絕並僅允許透過顯式配置的必需服務。nmap 透過缺乏響應來識別過濾的埠;當嘗試開啟關閉的埠時,它們會發送帶有 RST 標誌的 TCP 資料包,表明伺服器收到了資料包並且本應允許你連線到任何監聽該埠的服務。

nmap 命令列上的一個有用選項是“詳細”開關。在命令列中包含 -v 或 -vv 將增加 nmap 生成的輸出量。

bluefox@ice-ldap:~$ nmap -vv webserv1

高階目標指定

[編輯 | 編輯原始碼]

nmap 允許你使用 IP 地址目標來針對基於簡單語法的各種集合和範圍。

  • x-y - 指定從 x 到 y。nmap 192.168.0-1.1-2 將掃描 192.168.0.1192.168.1.1192.168.0.2192.168.1.2
  • * - 替換為 0-255。你的 shell 可能發出很多檔名,所以只使用 0-255
  • x,y - 指定 xynmap 192.168.0.1,2,4 將掃描 192.168.0.1192.168.0.2192.168.0.4。此外,nmap 192.168.0.1-2,4 將掃描同一組主機。
  • /n - 掃描 CIDR 表示的子網。例如,nmap 192.168.0.0/16nmap 192.168.0-255.0-255 相同。

可以將這些表示法以任何你想要的方式組合起來。例如,如果要掃描 192.168.0.0/12 上的一些子網,可以使用 nmap 192.168.0,16,64,96.0/4。通常情況下,你不希望做如此大規模的掃描,可以只掃描單個主機;但是,如果你需要,你應該知道如何做。請記住,nmap 對映的是網路,而不僅僅是主機。 ? " Vs " ss1 area title yahoo<>facebook<>ip address<>

掃描埠

[編輯 | 編輯原始碼]
  • 開關: -p

有時你不需要知道主機上所有開放的埠,有時你只想確保 proFTPd 和 Apache 正在執行,SMTP 伺服器沒有宕機,並檢視 SSH 是否正在監聽。對於這些情況,可以指定要掃描的埠。埠指定可以用與目標指定相同的方式進行操作,使用 x-yx,y 表示法。

~$ nmap -p21-22,25,80,443 webserv1

掃描埠,包括服務版本 (-V)

[編輯 | 編輯原始碼]
  • 開關: -p-V(服務版本)

包括掃描埠的服務版本

~$ nmap -sV -p21-22,25,80,443 host1.example.com

基本網路 ping 掃描

[編輯 | 編輯原始碼]
  • 開關: -sn,之前和現在已棄用 -sP

基本網路 ping 掃描,用於發現響應 icmp 請求(ping)的主機。

~$ nmap -sn 192.168.0.*

服務掃描

[編輯 | 編輯原始碼]
  • 開關: -sV-A

nmap 能夠執行服務掃描和 RPC 磨損;換句話說,它可以告訴你哪個高階協議、應用程式、版本、版本(如果服務提供 [(SSL)] 連線,則為 libssl 版本等)在埠上監聽,而不是將埠號與常見服務匹配。nmap 還使用 RPC 磨損,它對執行 RPC 服務的埠進行 RPC 連線;通常,單個RPC 埠對映器埠會告訴你哪些埠執行 RPC,但如果防火牆阻止了該埠,則 nmap 會自行找到它。

讓我們先看看針對我身後伺服器的掃描。這臺伺服器提供了一個非常好的例子,因為我已經配置了它,以便讓我在大學的防火牆上戳洞,因此它看起來非常奇怪。一個典型的 nmap 掃描結果還算不錯

bluefox@icebox:/home/shared/qemu$ nmap 192.168.1.40

Starting Nmap 4.20 ( http://insecure.org ) at 2007-04-03 20:58 EDT
Interesting ports on 192.168.1.40:
Not shown: 1688 closed ports
PORT    STATE SERVICE
21/tcp  close  ftp
22/tcp  close  ssh
53/tcp  filter  domain
80/tcp  close  http
81/tcp  close  hosts2-ns
139/tcp close  netbios-ssn
389/tcp close  ldap
443/tcp open  https
445/tcp close  microsoft-ds

Nmap finished: 1 IP address (1 host up) scanned in 0.971 seconds

上面顯示了 FTP、DNS、hosts2-ns、HTTP/SSL 和 Microsoft 目錄服務(Active Directory)。我們可以使用 -sV 使用 nmap 服務掃描進行更仔細地檢視。下面的輸出給我們帶來了截然不同的結果。

bluefox@icebox:/home/shared/qemu$ nmap -sV 192.168.1.40

Starting Nmap 4.20 ( http://insecure.org ) at 2007-04-03 21:01 EDT
Interesting ports on 192.168.1.40:
Not shown: 1688 closed ports
PORT    STATE SERVICE     VERSION
21/tcp  open  ssh         OpenSSH 4.3p2 Debian 5ubuntu1 (protocol 2.0)
22/tcp  open  ssh         OpenSSH 4.3p2 Debian 5ubuntu1 (protocol 2.0)
53/tcp  open  ssh         OpenSSH 4.3p2 Debian 5ubuntu1 (protocol 2.0)
80/tcp  open  http        Apache httpd 2.0.55 ((Ubuntu) PHP/5.1.6)
81/tcp  open  http        Apache httpd 2.0.55 ((Ubuntu) PHP/5.1.6)
139/tcp open  netbios-ssn Samba smbd 3.X (workgroup: MSHOME)
389/tcp open  ldap        OpenLDAP 2.2.X
443/tcp open  ssh         OpenSSH 4.3p2 Debian 5ubuntu1 (protocol 2.0)
445/tcp open  netbios-ssn Samba smbd 3.X (workgroup: MSHOME)
Service Info: OS: Linux

Service detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ .
Nmap finished: 1 IP address (1 host up) scanned in 13.747 seconds

看來這臺伺服器確實使用 Apache 在兩個埠上提供 http 服務;OpenSSH 透過 FTP、DNS 和 HTTPS 埠提供服務;Samba 提供 SMB 連線。此外,我們可以看到伺服器在 OpenSSH 4.3p2 Debian 5ubuntu1 上使用 SSH 2.0 協議,這是一個本地的 Ubuntu .deb,而不是自定義構建。我們可以比較準確地猜測這臺伺服器執行的是 Ubuntu,即使沒有進行作業系統掃描;要麼就是管理員真的不知道自己在做什麼,要麼就是他設法使用重寫代理更改了橫幅以欺騙我們。

值得注意的是,-A 開關也激活了服務掃描。

高階埠掃描

[編輯 | 編輯原始碼]

您可以使用 nmap 執行許多型別的 advanced port scans。除了標準的 connect() 埠掃描外,nmap 還需要 root 許可權才能執行這些 advanced scans,因為它需要建立原始套接字並構建原始 TCP/IP 資料包。

使用 root 許可權執行 nmap (-A)

[編輯 | 編輯原始碼]

nmap 程式在有和沒有 root 許可權的情況下獲取的資訊不同。使用 root 許可權,nmap 可以執行高階 TCP/IP 掃描;作業系統檢測;以及 MAC 地址識別。

首先,讓我們看看普通使用者使用 nmap 以及 -A 選項的情況。nmap -A 啟用作業系統和服務掃描,與 nmap -O -sV 相同。作業系統檢測需要 root 許可權,因此作業系統檢測根本無法進行。我在一臺 Linksys WRT54G 無線路由器上執行了以下掃描。

bluefox@icebox:~$ nmap -A -p80,1 192.168.1.1

Starting Nmap 4.20 ( http://insecure.org ) at 2007-04-04 12:18 EDT
Interesting ports on 192.168.1.1:
PORT   STATE  SERVICE VERSION
1/tcp  closed tcpmux
80/tcp open   http    Linksys wireless-G WAP http config (Name Icelink)
Service Info: Device: WAP

Service detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ .
Nmap finished: 1 IP address (1 host up) scanned in 6.199 seconds

如您所見,nmap 只是跳過了作業系統檢測階段。然而,當我們將 nmap 作為 root 執行時,我們看到它還可以查詢更多資訊。下面,我們看到它發現了 MAC 地址並識別了擁有該 MAC 地址空間的供應商;作業系統和有關作業系統的詳細資訊;正常執行時間;以及網路距離。它還為我們提供了裝置型別;nmap 看到一個用於桌面、無線路由器或網路儲存的 Linux 作業系統,因此將該裝置分類為通用、WAP 或儲存。

bluefox@icebox:~$ sudo nmap -A -p80,1 192.168.1.1

Starting Nmap 4.20 ( http://insecure.org ) at 2007-04-04 12:18 EDT
Interesting ports on 192.168.1.1:
PORT   STATE  SERVICE VERSION
1/tcp  closed tcpmux
80/tcp open   http    Linksys wireless-G WAP http config (Name Icelink)
MAC Address: 00:13:10:7D:06:C6 (Cisco-Linksys)
Device type: general purpose|WAP|storage-misc
Running: Linux 2.4.X, Linksys Linux 2.4.X, Asus Linux 2.4.X, Maxtor Linux 2.4.X
OS details: Linux 2.4.20 - 2.4.32, Linux-based embedded device (Linksys WRT54GL WAP,
 Buffalo AirStation WLA-G54 WAP, Maxtor Shared Storage Drive, or Asus Wireless Storage
 Router)
Uptime: 29.285 days (since Tue Mar  6 04:28:28 2007)
Network Distance: 1 hop
Service Info: Device: WAP

OS and Service detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ .
Nmap finished: 1 IP address (1 host up) scanned in 7.833 seconds

nmap 在擁有 root 許可權的情況下變得更加強大;但是,出於安全原因,您不應該隨意賦予 nmap SUID 許可權。您可以透過 sudo 特別允許使用者執行 nmap,但請注意,任何允許使用者獲得 root 許可權的內容(SUID 位、sudo 等)都存在安全風險。

作業系統檢測

[編輯 | 編輯原始碼]
  • 開關: -O

-O 開關啟用 nmap 作業系統檢測。作業系統檢測嘗試使用目標 TCP/IP 堆疊的特徵來指紋識別遠端作業系統;通常它可以識別 Linux、Windows 和 BSD,並找到像 Windows NT/XP 或 95/98/ME 這樣的一系列版本和家族。典型的作業系統檢測掃描如下所示。

bluefox@ice-ldap:~$ sudo nmap -O 192.168.1.105 -P0

Starting Nmap 4.10 ( http://www.insecure.org/nmap/ ) at 2007-04-05 18:43 EDT
Warning:  OS detection will be MUCH less reliable because we did not find at least 1 open and 1 closed TCP port
Interesting ports on 192.168.1.105:
Not shown: 1677 filtered ports
PORT    STATE SERVICE
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds
MAC Address: 00:0C:76:96:A5:DC (Micro-star International CO.)
Device type: general purpose
Running: Microsoft Windows NT/2K/XP
OS details: Microsoft Windows XP SP2

Nmap finished: 1 IP address (1 host up) scanned in 32.272 seconds

TCP connect() 掃描

[編輯 | 編輯原始碼]
  • 開關: -sT

nmap 在所有情況下都允許進行 TCP connect() 掃描,無論是否具有管理許可權;當您在沒有 root 許可權的情況下指定其他掃描型別時,nmap 會自動替換此掃描型別。

在這種掃描模式下,nmap 像 Web 瀏覽器或 FTP 客戶端一樣開啟到埠的連線,並檢查 TCP/IP 堆疊如何響應。以下結果來自此掃描

  • open: nmap 能夠完成連線,然後關閉了埠。
  • closed: nmap 嘗試連線,但收到錯誤資訊,告知它埠已關閉(作業系統收到 RST 資料包)。
  • filtered: nmap 嘗試連線,但作業系統給了它其他錯誤,例如主機或埠不可達或連線超時。

TCP connect() 掃描適用於所有許可權級別,但執行速度可能很慢,並生成過多資料包。它們通常還會在目標上建立更多日誌,並且可能導致編寫得很差的服務崩潰。

TCP SYN 掃描

[編輯 | 編輯原始碼]
  • 開關: -sS

nmap TCP SYN 掃描 使用簡單的 SYN 資料包連線到埠以確定其狀態。nmap 在擁有原始套接字許可權時預設使用此方法。

TCP SYN 掃描傳送一個 SYN 資料包,就像開啟連線一樣,並檢查結果。以下狀態來自此測試

  • open: nmap 從主機上的該埠收到 SYN/ACK。nmap 不需要採取進一步的行動;作業系統沒有連線記錄,並使用 RST 響應 SYN/ACK,拆除目標上的連線。
  • closed: nmap 從主機上的該埠收到 RST。
  • filtered: nmap 收到其他內容或沒有收到任何內容。

TCP SYN 掃描執行速度非常快,建立的日誌更少,並且行為更隱蔽。

掃描防火牆

[編輯 | 編輯原始碼]

您也可以使用 nmap 穿透防火牆。nmap 可以執行掃描,這些掃描有助於確定防火牆是否使用有狀態過濾;以及防火牆允許哪些埠透過。您可以使用它掃描防火牆後面的目標並發現防火牆規則,從而允許進行更具針對性的掃描,並可能規避防火牆日誌記錄。

TCP ACK 掃描

[編輯 | 編輯原始碼]
  • 開關: -sA

隱形掃描

[編輯 | 編輯原始碼]

不幸的是,如果您掃描透過某些 IPS 或 IDS 機器,您會從代理埠獲得大量無用資訊。這會造成一些小麻煩。我不得不修剪下面的輸出,因為它包含數千行文字。我在下面隱藏了掃描的主機;我選擇了一個網際網路上的活動主機來掃描,因為我沒有他們使用的 IPS 硬體。

Starting Nmap 4.10 ( http://www.insecure.org/nmap/ ) at 2007-04-01 16:14 EDT
Stats: 0:00:02 elapsed; 0 hosts completed (1 up), 1 undergoing Connect() Scan
Connect() Scan Timing: About 20.95% done; ETC: 16:14 (0:00:09 remaining)
Interesting ports on %%% (%%%):
Not shown: 861 closed ports
PORT      STATE    SERVICE
2/tcp     open     compressnet
3/tcp     open     compressnet
7/tcp     open     echo
10/tcp    open     unknown
12/tcp    open     unknown
14/tcp    open     unknown
15/tcp    open     netstat
18/tcp    open     msp
19/tcp    open     chargen
20/tcp    open     ftp-data
21/tcp    open     ftp
25/tcp    open     smtp
27/tcp    open     nsw-fe
28/tcp    open     unknown
29/tcp    open     msg-icp
30/tcp    open     unknown
31/tcp    open     msg-auth
32/tcp    open     unknown
33/tcp    open     dsp
34/tcp    open     unknown
35/tcp    open     priv-print
38/tcp    open     rap
39/tcp    open     rlp
40/tcp    open     unknown
41/tcp    open     graphics
43/tcp    open     whois
47/tcp    open     ni-ftp
56/tcp    open     xns-auth
58/tcp    open     xns-mail
59/tcp    open     priv-file
60/tcp    open     unknown
64/tcp    open     covia
66/tcp    open     sql*net
.....
134/tcp   open     ingres-net
135/tcp   filtered msrpc
136/tcp   filtered profile
137/tcp   filtered netbios-ns
138/tcp   filtered netbios-dgm
139/tcp   filtered netbios-ssn
141/tcp   open     emfis-cntl
143/tcp   open     imap
145/tcp   open     uaac
147/tcp   open     iso-ip
148/tcp   open     cronus
149/tcp   open     aed-512
150/tcp   open     sql-net
155/tcp   open     netsc-dev
.....
27001/tcp open     flexlm1
27002/tcp open     flexlm2
27005/tcp open     flexlm5
27007/tcp open     flexlm7
27008/tcp open     flexlm8
27009/tcp open     flexlm9
27010/tcp open     flexlm10
27374/tcp open     subseven
27665/tcp open     Trinoo_Master
31337/tcp filtered Elite
32775/tcp open     sometimes-rpc13
32777/tcp open     sometimes-rpc17
32779/tcp open     sometimes-rpc21
32787/tcp open     sometimes-rpc27
38037/tcp open     landesk-cba
43188/tcp open     reachout
47557/tcp open     dbbrowse
50000/tcp open     iiimsf
54320/tcp open     bo2k
61441/tcp open     netprowler-sensor
65301/tcp open     pcanywhere

Nmap finished: 1 IP address (1 host up) scanned in 23.251 seconds

幸運的是,您可以執行隱形掃描來規避這種情況;不幸的是,隱形掃描花費的時間要長得多。通常,進行一次 禮貌 掃描就足夠了,它每分鐘只產生 150 個數據包。

~$ nmap -T polite %%%

-T 選項接受五個引數中的一個,按名稱或編號給出。這些是

  • paranoid (0) - 不進行並行掃描。傳送資料包之間間隔 5 分鐘。
  • sneaky (1) - 不進行並行掃描。傳送資料包之間間隔 15 秒。
  • polite (2) - 不進行並行掃描。傳送資料包之間間隔 0.4 秒。
  • normal (3) - 預設掃描。嘗試在不超載網路的情況下快速完成掃描。
  • aggressive (4) - 比 normal 快,但會超載網路。
  • insane (5) - 並行掃描,在 15 分鐘內超時主機,不會為單個探測等待超過 0.3 秒。丟失大量資訊。

nmap 還提供選項來控制掃描超時。將這些與上述選項結合使用,可以實現更精細的掃描,例如每分鐘執行 100 個數據包的掃描

~$ nmap -T sneaky --scan_delay 600

讓我們再次嘗試上面的掃描,這次禮貌地進行。

bluefox@icebox:~$ nmap -T polite

Starting Nmap 4.20 ( http://insecure.org ) at 2007-04-02 19:52 EDT
Interesting ports on %%% (%%%):
Not shown: 1658 closed ports, 26 filtered ports
PORT     STATE SERVICE
21/tcp   open  ftp
25/tcp   open  smtp
80/tcp   open  http
110/tcp  open  pop3
143/tcp  open  imap
389/tcp  open  ldap
443/tcp  open  https
1026/tcp open  LSA-or-nterm
1027/tcp open  IIS
1433/tcp open  ms-sql-s
3389/tcp open  ms-term-serv
8000/tcp open  http-alt
9999/tcp open  abyss

Nmap finished: 1 IP address (1 host up) scanned in 693.146 seconds

如我們所見,此掃描花費了 693 秒而不是 23 秒,是之前的 30 倍。

[編輯 | 編輯原始碼]

另請參見

[編輯 | 編輯原始碼]
  • nping 資料包生成、響應分析和響應時間測量
華夏公益教科書