駭客/工具/網路/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.1、192.168.1.1、192.168.0.2 和 192.168.1.2*- 替換為0-255。你的 shell 可能發出很多檔名,所以只使用0-255。x,y- 指定x和y。nmap 192.168.0.1,2,4將掃描 192.168.0.1、192.168.0.2 和 192.168.0.4。此外,nmap 192.168.0.1-2,4將掃描同一組主機。/n- 掃描 CIDR 表示的子網。例如,nmap 192.168.0.0/16與nmap 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-y 和 x,y 表示法。
~$ nmap -p21-22,25,80,443 webserv1
- 開關:
-p和-V(服務版本)
包括掃描埠的服務版本
~$ nmap -sV -p21-22,25,80,443 host1.example.com
- 開關:
-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 資料包。
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
- 開關:
-sT
nmap 在所有情況下都允許進行 TCP connect() 掃描,無論是否具有管理許可權;當您在沒有 root 許可權的情況下指定其他掃描型別時,nmap 會自動替換此掃描型別。
在這種掃描模式下,nmap 像 Web 瀏覽器或 FTP 客戶端一樣開啟到埠的連線,並檢查 TCP/IP 堆疊如何響應。以下結果來自此掃描
- open:
nmap能夠完成連線,然後關閉了埠。 - closed:
nmap嘗試連線,但收到錯誤資訊,告知它埠已關閉(作業系統收到 RST 資料包)。 - filtered:
nmap嘗試連線,但作業系統給了它其他錯誤,例如主機或埠不可達或連線超時。
TCP connect() 掃描適用於所有許可權級別,但執行速度可能很慢,並生成過多資料包。它們通常還會在目標上建立更多日誌,並且可能導致編寫得很差的服務崩潰。
- 開關:
-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 可以執行掃描,這些掃描有助於確定防火牆是否使用有狀態過濾;以及防火牆允許哪些埠透過。您可以使用它掃描防火牆後面的目標並發現防火牆規則,從而允許進行更具針對性的掃描,並可能規避防火牆日誌記錄。
- 開關:
-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 資料包生成、響應分析和響應時間測量