NMap,也就是Network
Mapper,是網絡掃描和嗅探工具包。nmap是一個網絡連接端掃描軟件,用來掃描網上電腦開放的網絡連接端。確定哪些服務運行在哪些連接端,并且推斷計算機運行哪個操作系統(這是亦稱
fingerprinting)。
其基本功能有三個,一是探測一組主機是否在線;其次是掃描
主機端口,嗅探所提供的網絡服務;還可以推斷主機所用的操作系統。Nmap可用于掃描僅有兩個節點的LAN,直至500個節點以上的網絡。Nmap
還允許用戶定制掃描技巧。通常,一個簡單的使用ICMP協議的ping操作可以滿足一般需求;也可以深入探測UDP或者TCP端口,直至主機所
使用的操作系統;還可以將所有探測結果記錄到各種格式的日志中, 供進一步分析操作。
二、語法
nmap [Scan Type(s)] [Options]
三、功能選項
功能選項可以組合使用。一些功能選項只能夠在某種掃描模式下使用。nmap會自動識別無效或者不支持的功能選項組合,并向用戶發出警告信息。3.1掃描類型
-sT
TCP
connect()掃描:這是最基本的TCP掃描方式。connect()是一種系統調用(socket
TCP函數),由操作系統提供,用來打開一個連接。如果目標端口有程序監聽,connect()就會成功返回,否則這個端口是不可達的。這項技術最大的優點是,你勿需root權限。任何UNIX用戶都可以自由使用這個系統調用。這種掃描很容易被檢測到,在目標主機的日志中會記錄大批的連接請求以及錯誤信息。
-sS
TCP同步掃描(TCP
SYN):因為不必全部打開一個TCP連接,所以這項技術通常稱為半開掃描(half-open)。你可以發出一個TCP同步包(SYN),然后等待回應。如果對方返回SYN|ACK(響應)包就表示目標端口正在監聽;如果返回RST數據包,就表示目標端口沒有監聽程序;如果收到一個SYN|ACK包,源主機就會馬上發出一個RST(復位)數據包斷開和目標主機的連接,這實際上有我們的操作系統內核自動完成的。這項技術最大的好處是,很少有系統能夠把這記入系統日志。不過,你需要root權限來定制SYN數據包。
-sF -sX -sN
秘密FIN數據包掃描、圣誕樹(Xmas
Tree)、空(Null)掃描模式:即使SYN掃描都無法確定的情況下使用。一些防火墻和包過濾軟件能夠對發送到被限制端口的SYN數據包進行監視,而且有些程序比如synlogger和courtney能夠檢測那些掃描。這些高級的掃描方式可以逃過這些干擾。
這些掃描方式的理論依據是:關閉的端口需要對你的探測包回應RST包,而打開的端口必需忽略有問題的包(參考RFC
793第64頁)。FIN掃描使用暴露的FIN數據包來探測,而圣誕樹掃描打開數據包的FIN、URG和PUSH標志。不幸的是,微軟決定完全忽略這個標準,另起爐灶。所以這種掃描方式對Windows95/NT無效。不過,從另外的角度講,可以使用這種方式來分別兩種不同的平臺。如果使用這種掃描方式可以發現打開的端口,你就可以確定目標注意運行的不是Windows系統。如果使用-sF、-sX或者-sN掃描顯示所有的端口都是關閉的,而使用SYN掃描顯示有打開的端口,你可以確定目標主機可能運行的是Windwos系統。現在這種方式沒有什么太大的用處,因為nmap有內嵌的操作系統檢測功能。還有其它幾個系統使用和windows同樣的處理方式,包括Cisco、BSDI、HP/UX、MYS、IRIX。在應該拋棄數據包時,以上這些系統都會從打開的端口發出復位數據包。
-sP
ping掃描:有時你只是想知道此時網絡上哪些主機正在運行。通過向你指定的網絡內的每個IP地址發送ICMP
echo請求數據包,nmap就可以完成這項任務。如果主機正在運行就會作出響應。不幸的是,一些站點例如:microsoft.com阻塞ICMP
echo請求數據包。然而,在默認的情況下nmap也能夠向80端口發送TCP
ack包,如果你收到一個RST包,就表示主機正在運行。nmap使用的第三種技術是:發送一個SYN包,然后等待一個RST或者SYN/ACK包。對于非root用戶,nmap使用connect()方法。
在默認的情況下(root用戶),nmap并行使用ICMP和ACK技術。
注意,nmap在任何情況下都會進行ping掃描,只有目標主機處于運行狀態,才會進行后續的掃描。如果你只是想知道目標主機是否運行,而不想進行其它掃描,才會用到這個選項。
-sU
UDP掃描:如果你想知道在某臺主機上提供哪些UDP(用戶數據報協議,RFC768)服務,可以使用這種掃描方法。nmap首先向目標主機的每個端口發出一個0字節的UDP包,如果我們收到端口不可達的ICMP消息,端口就是關閉的,否則我們就假設它是打開的。
有些人可能會想UDP掃描是沒有什么意思的。但是,我經常會想到最近出現的solaris
rpcbind缺陷。rpcbind隱藏在一個未公開的UDP端口上,這個端口號大于32770。所以即使端口111(portmap的眾所周知端口號)被防火墻阻塞有關系。但是你能發現大于30000的哪個端口上有程序正在監聽嗎?使用UDP掃描就能!cDc
Back
Orifice的后門程序就隱藏在Windows主機的一個可配置的UDP端口中。不考慮一些通常的安全缺陷,一些服務例如:snmp、tftp、NFS使用UDP協議。不幸的是,UDP掃描有時非常緩慢,因為大多數主機限制ICMP錯誤信息的比例(在RFC1812中的建議)。例如,在Linux內核中(在net/ipv4/icmp.h文件中)限制每4秒鐘只能出現80條目標豢紗锏腎CMP消息,如果超過這個比例,就會給1/4秒鐘的處罰。solaris的限制更加嚴格,每秒鐘只允許出現大約2條ICMP不可達消息,這樣,使掃描更加緩慢。nmap會檢測這個限制的比例,減緩發送速度,而不是發送大量的將被目標主機丟棄的無用數據包。
不過Micro$oft忽略了RFC1812的這個建議,不對這個比例做任何的限制。所以我們可以能夠快速掃描運行Win95/NT的主機上的所有65K個端口。
-sA
ACK掃描:這項高級的掃描方法通常用來穿過防火墻的規則集。通常情況下,這有助于確定一個防火墻是功能比較完善的或者是一個簡單的包過濾程序,只是阻塞進入的SYN包。
這種掃描是向特定的端口發送ACK包(使用隨機的應答/序列號)。如果返回一個RST包,這個端口就標記為unfiltered狀態。如果什么都沒有返回,或者返回一個不可達ICMP消息,這個端口就歸入filtered類。注意,nmap通常不輸出unfiltered的端口,所以在輸出中通常不顯示所有被探測的端口。顯然,這種掃描方式不能找出處于打開狀態的端口。
-sW
對滑動窗口的掃描:這項高級掃描技術非常類似于ACK掃描,除了它有時可以檢測到處于打開狀態的端口,因為滑動窗口的大小是不規則的,有些操作系統可以報告其大小。這些系統至少包括:某些版本的AIX、Amiga、BeOS、BSDI、Cray、Tru64
UNIX、DG/UX、OpenVMS、Digital
UNIX、OpenBSD、OpenStep、QNX、Rhapsody、SunOS
4.x、Ultrix、VAX、VXWORKS。從nmap-hackers郵件3列表的文檔中可以得到完整的列表。
-sR
RPC掃描。這種方法和nmap的其它不同的端口掃描方法結合使用。選擇所有處于打開狀態的端口向它們發出SunRPC程序的NULL命令,以確定它們是否是RPC端口,如果是,就確定是哪種軟件及其版本號。
因此你能夠獲得防火墻的一些信息。誘餌掃描現在還不能和RPC掃描結合使用。
-b
FTP反彈攻擊(bounce
attack):FTP協議(RFC
959)有一個很有意思的特征,它支持代理FTP連接。也就是說,我能夠從evil.com連接到FTP服務器target.com,并且可以要求這臺FTP服務器為自己發送Internet上任何地方的文件!1985年,RFC959完成時,這個特征就能很好地工作了。然而,在今天的Internet中,我們不能讓人們劫持FTP服務器,讓它向Internet上的任意節點發送數據。如同Hobbit在1995年寫的文章中所說的,這個協議"能夠用來做投遞虛擬的不可達郵件和新聞,進入各種站點的服務器,填滿硬盤,跳過防火墻,以及其它的騷擾活動,而且很難進行追蹤"。我們可以使用這個特征,在一臺代理FTP服務器掃描TCP端口。因此,你需要連接到防火墻后面的一臺FTP服務器,接著進行端口掃描。如果在這臺FTP服務器中有可讀寫的目錄,你還可以向目標端口任意發送數據(不過nmap不能為你做這些)。
傳遞給-b功能選項的參數是你要作為代理的FTP服務器。語法格式為:
-b username:[email protected]:port。
除了server以外,其余都是可選的。如果你想知道什么服務器有這種缺陷,可以參考我在Phrack
51發表的文章。還可以在nmap的站點得到這篇文章的最新版本。