nmap是一個比較常用的端口掃描應用,可以探測主機的存活狀態和端口開放狀態,但是由於目標主機的保護機制,可能導致結果不一定可靠.
端口掃描就是通過連接到目標系統的 TCP 或 UDP 端口,來確定什麼服務正在運行。
一個端口就是一個潛在的通信通道,也就是一個入侵通道。從對黑客攻擊行爲的分析和收集的漏洞來看,絕大多數都是針對某一個網絡服務,也就是針對某一個特定的端口的。對目標計算機進行端口掃描,能得到許多有用的信息。
nmap支持以下幾種掃描模式
-
全TCP連接
這是最基本的TCP掃描,實現方法最簡單,直接連到目標端口並完成一個完整的三次握手過程(SYN,SYN/ACK和ACK)。Socket API提供的Connect( )系統調用,用來與每一個感興趣的目標計算機的端口進行連接。如果端口處於偵聽狀態,那麼Connect( )就能成功。否則,這個端口是不能用的,即沒有提供服務。這個技術的一個最大優點是不需要任何權限,系統中的任何用戶都可以使用這個調用。另一個好處就是速度。如果對每個目標端口以線性的方式,使用單獨的Connect( )調用,那麼將會花費相當長的時間,你可以通過同時打開多個套接字,從而加速掃描。這種掃描方法的缺點是很容易被目標系統檢測到,並且被過濾掉。
目前的系統會對連接進行記錄,因此目標計算機的日誌文件會顯示大量密集的連接和連接出錯的消息記錄,並且能很快地使它關閉。如:TCP Wrapper監測程序通常用來進行監測,可以對連接請求進行控制,所以它可以用來阻止來自不明主機的全連接掃描。針對這一缺陷,便
產生了TCP SYN掃描,也就是通常說的半開放掃描。 -
TCP SYN掃描
在這種技術中,掃描主機向目標主機的選擇端口發送SYN數據段。如果應答是RST,(RST表示復位,用來異常的關閉連接)那麼說明端口是關閉的,按照設定就探聽其他端口;如果應答中包含SYN和ACK,說明目標端口處於監聽狀態。由於在SYN掃描時,全連接尚未建立,所以這種技術通常被稱爲半打開掃描。
SYN掃描的優點在於即使日誌中對掃描有所記錄,但是嘗試進行連接的記錄也要比全掃描少得多。缺點是在大部分操作系統下,發送主機需要構造適用於這種掃描的IP包,並且在通常情況下必須要有超級用戶權限才能建立自己的SYN數據包。 -
TCP FIN掃描
對某端口發送一個TCP FIN數據報給遠端主機。如果主機沒有任何反饋,那麼這個主機是存在的,而且正在監聽這個端口;主機反饋一個TCP RST回來,那麼說明該主機是存在的,但是沒有監聽這個端口。由於這種技術不包含標準的TCP三次握手協議的任何部分,所以無法被記錄下來,從而比SYN掃描隱蔽得多,也稱作祕密掃描。另外,FIN數據包能夠通過只監測SYN包的包過濾器。
這種掃描技術使用FIN數據包來探聽端口。當一個FIN數據包到達一個關閉的端口,數據包會被丟掉,並且會返回一個RST數據包。否則,當一個FIN數據包到達一個打開的端口,數據包只是簡單的丟掉(不返回RST)。這種方法和系統實現有一定的關係,有的系統不管端口是否打開,都回復RST,如:Windows,CISCO。這種技術通常適用於UNIX目標主機,跟SYN掃描類似,FIN掃描也需要自己構造IP包。但是,也可以利用這個特點進行操作系統的探測。
例如,如果使用SYN掃描發現有端口開放(回覆了SYN/ACK),而使用FIN掃描發現所有端口
關閉的話(按照FIN方法,恢復RST表示端口關閉,但Windows全部回覆RST),則操作系統很
可能是Windows系統。
但現在半開放掃描已經不是一種祕密了,很多防火牆和路由器都有了相應的措施。這些
防火牆和路由器會對一些制定的端口進行監視,將對這些端口的連接請求全部進行記錄,這樣,即使是使用半開放掃描仍然會被防火牆或路由器記錄到日誌中。有些IDS也可以檢測到這樣的掃描。 -
TCP Xmas(聖誕樹掃描)和TCP Null(空掃描)
這兩種掃描方式是TCP FIN 掃描的變種,Xmas掃描打開FIN,URG,PUSH 標記,而NULL掃描關閉所有標記。這些組合的目的爲了通過對FIN 包的過濾。當一個這種數據包到達一個關閉的端口,數據包會被丟掉並且返回一個RST數據包。如果是打開的端口則只是丟掉數據包不返回RST包。這種方式的缺點跟上面的類似,都是需要自己構造數據包,只適用於UNIX主機。 -
UDP ICMP 端口不可達掃描
由於UDP協議很簡單,所以掃描變得相對比較困難。這是由於打開的端口對掃描探測並不發送一個確認,關閉的端口也並不需要發送一個錯誤數據包。幸運的是,你在使用許多主
機向一個未打開的UDP端口發送一個數據包時,會返回一個 ICMP_PORT_UNREACH錯誤。這樣你就能發現哪個端口是關閉的。由於 UDP 協議是面向無連接的協議,這種掃描技術的精確性高度依賴於網絡性能和系統資源。另外,如果目標主機採用了大量的分組過濾技術,那麼UDP掃描過程會變的非常慢。
比如大部分系統都採用了 RFC1812 的建議,限定了 ICMP 差錯分組的速率,比如 LINUX 系統中只允許 4 秒最多隻發送 80 個目的地不可達消息,而Solaris 每秒只允許發送兩個不可到達消息,然而微軟仍保留了它一貫的做法,忽略RFC1812的建議,沒有對速率進行任何限制,因此,能在很短的時間內掃完WINDOWS機器上所有64K 的UDP端口。說到這裏,我想大家都應該心裏有數,在什麼情況下可以有效的使用UDP掃描,而不是一味去埋怨掃描器的速度慢了。UDP和 ICMP錯誤都不保證能到達,因此這種掃描器必須還實現在一個包看上去是丟失的時候能重新傳輸。同樣,這種掃描方法需要具有root權限。
目標地址規範:
baidu.com, , 192.168.0.1; 10.0.0-255.1-254範圍掃描
-iL 文件名 導入一個主機列表
-iR 數字: 選擇隨機目標
–exclude <host1[,host2][,host3],…>: 過濾主機名
–excludefile <exclude_file>: 過濾文件裏的主機名
-sL: 簡單的列出掃描的清單
-sn: 默認端口掃描
-Pn: 講所有主機設爲在線,跳過主機發現
-PS/PA/PU/PY 80 TCP SYN/ACK, UDP or SCTP discovery to given ports 80爲指定的端口
-PE/PP/PM: ICMP輸出,時間戳,網關和可能的點
-n/-R: 永遠不要dns解析/永遠解析 默認的是偶爾
–dns-servers 8.8.8.8 自定義dns解析,8.8.8.8是谷歌
–traceroute: 跟蹤每個主機掃描技術的hop路徑
-sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
-sU: UDP Scan
-sN/sF/sX: TCP Null, FIN, and Xmas scans
–scanflags :定製TCP掃描標誌
-sI <zombie host[:probeport]>: 空閒掃描
-sY/sZ: SCTP INIT/COOKIE-ECHO scans
-sO: IP protocol scan
-b :FTP反彈掃描
PORT SPECIFICATION AND SCAN ORDER:
-p 指定特定的端口,也可以指定一個範圍
22 或者是 1-65
-p U:53,111,137,T:21-25,80,139,8080,S:9
–exclude-ports : 從掃描中排除指定的端口
-F: Fast mode 快速掃描,端口比較少
-r:連續掃描端口-不要隨機
–top-ports : 掃描多少個最常見的端口
-sV: 探測打開的端口以確定服務/版本信息
–version-intensity <級別>:設置爲0(淺)至9(嘗試所有探針)
–version-light: 限制最有可能的探針(強度2)
–version-all: 嘗試所有的探針(深度9)
–version-trace: 顯示詳細的版本掃描活動(用於調試)
腳本掃描:
-sC: 默認的腳本
–script=:目錄、腳本文件或腳本類別的列表
–script-trace: Show all data sent and received
–script-updatedb: 腳本數據庫升級
–script-help=: 幫助提示
操作系統偵測:
-O: 啓用操作系統探測
–osscan-guess: 操作系統猜測
防火牆/ids evasion和欺騙:
-f; --mtu : fragment packets (optionally w/given MTU)
-D <decoy1,decoy2[,ME],…>: Cloak a scan with decoys
-S <IP_Address>: Spoof source address
-e : Use specified interface
-g/–source-port : Use given port number
–proxies <url1,[url2],…>: Relay connections through HTTP/SOCKS4 proxies
–data : Append a custom payload to sent packets
–data-string : Append a custom ASCII string to sent packets
–data-length : Append random data to sent packets
–ip-options : Send packets with specified ip options
–ttl : Set IP time-to-live field
–spoof-mac <mac address/prefix/vendor name>: Spoof your MAC address
–badsum: Send packets with a bogus TCP/UDP/SCTP checksum
OUTPUT:
-oN/-oX/-oS/-oG : Output scan in normal, XML, s|<rIpt kIddi3,
and Grepable format, respectively, to the given filename.
-oA : Output in the three major formats at once
-v: Increase verbosity level (use -vv or more for greater effect)
-d: Increase debugging level (use -dd or more for greater effect)
–reason: Display the reason a port is in a particular state
–open: Only show open (or possibly open) ports
–packet-trace: Show all packets sent and received
–iflist: Print host interfaces and routes (for debugging)
–append-output: Append to rather than clobber specified output files
–resume : Resume an aborted scan
–stylesheet <path/URL>: XSL stylesheet to transform XML output to HTML
–webxml: Reference stylesheet from Nmap.Org for more portable XML
–no-stylesheet: Prevent associating of XSL stylesheet w/XML output
雜項:
-6: 使用 IPv6 掃描
-A: 啓用OS檢測、版本檢測、腳本掃描和路由追蹤
–datadir : Specify custom Nmap data file location
–send-eth/–send-ip: Send using raw ethernet frames or IP packets
–privileged: Assume that the user is fully privileged
–unprivileged: Assume the user lacks raw socket privileges
EXAMPLES:
nmap -v -A scanme.nmap.org
nmap -v -sn 192.168.0.0/16 10.0.0.0/8
nmap -v -iR 10000 -Pn -p 80
nmap是個很強大的工具,參數很多,功能也再慢慢豐富,經常用用慢慢就熟悉了