2011/04/07

Nmap 用法


Linux 系統預設已包含了一個很有用的網路檢測/探測工具-nmap,主要用途有:在指定的網路區段下掃瞄主機群的網路連線,探測指定主機已開啟的通訊埠,藉由前兩項資訊可檢測出遠端主機的作業系統及網路服務為何。


Ref:http://zong-bear.blogspot.com/2010/09/nmap.html

Nmap


TCP掃描

  • TCP協定允許不需完成聯繫,TCP掃描就可以判斷哪些TCP port上有應用程式在偵聽
  • 三段式交握由SYN封包、SYN/ACK封包、ACK封包所組成
  • 掃描器將TCP SYN封包傳送到目標主機port上並且等待回應
    • SYN/ACK封包被回傳,代表port被認為開啟
    • RST封包被回傳,port被認為是關閉
    • 一段時間後沒有封包被回傳,port被認為被過濾掉,或者沒有主機在那個IP上



UDP掃描

  • UDP應用程式傾向於丟棄他們無法解析的封包,因此,雖然應用程式正在特定的port上偵聽,也可能看不到掃描器封包被回應
  • 如果UDP封包被傳送到一個沒有應用程式聯繫於其上port的,IP stack會回傳一個ICMP Port Unreachable封包
  • 掃描器會假設任何回傳的ICMP錯誤(ex:Port Unreachable)的port都是關閉的,而不回傳答案的port可能是開啟,或者是被防火牆過濾掉的
  • Unicornscan(也是一種Scan)透過大多數常見的UDP協定發出有效的應用程式封包,改善無法釐清開啟或被過濾掉的port,提供更準確的的結果

主機探測

  • 預設上,Nmap將ICMP Echo Request(也稱為ping)封包以及TCP SYN封包傳送到port 80,判斷特定IP位址上是否有電腦正在偵聽
  • 如果被掃描的IP位址是在與掃描器相同的子網路上,就改用ARP封包代替
1
2
3
4
$ sudo nmap -n -sP 10.150.9.1-20
  #-sP選項提供主機掃瞄
  #-n 請Nmap不要針對他所掃描的IP位址進行名稱查詢,加速掃描速度,並增加隱蔽性
  #-20 掃瞄子網路前20個IP位址
處理被封鎖的Ping
  • -PSportlist:指名要將TCP SYN封包送到哪些port
  • -PAportlist:指名要將TCP ACK封包送到哪些port,當有簡單防火牆位於你和被掃描主機之間時,可以提供更好的結果
  • -PUportlist:指名要將空的UDP封包送到哪些port,類似TCP SYN,但用來探查UDP應用程式
  • -PE:指示Nmap傳送ICMP Echo Request (ping)封包;假如沒有-P選項被指名,這些封包在預設上會被傳送
  • -PP:指示Nmap傳送ICMP Timestamp封包,在防火牆封鎖ping的情況下,這些可被用來做為ping封包的替代方案
  • -PM:指示Nmap傳銃ICMP Netmask Request封包,以相同於-PP的方式運作
1
2
3
4
$ sudo nmap -sP -PS21,22,23,25,80,139,445,3389 10.150.10.250-254
  #會增加掃描時間
$ sudo nmap -sP -PS21,22,23,25,80,139,445,3389 -PU53,67,68,69,111,161,445,517 \
    -PE -PP -PM 10.150.9.1-254
選擇合適的port
  • Windows:TCP/135,TCP/139,TCP/445,TCP/1025-1030,TCP/3389,UDP/137,UDP/445,UDP/1025-1030
  • Unix:TCP/21,TCP/22,TCP/23,TCP/25,TCP/80,TCP/111,UDP/53,UDP/67-69,UDP/111,UDP/161,UDP/,514
  • switch,router,防火牆:

    • 提供網路管理機制:TCP/22(SSH),TCP/23(Telnet),TCP/80(HTTP),TCP/443(HTTPS),UDP/161(SNMP)
    • 作為DHCP和DNS伺服器:UDP/53(DN),UDP/67-68(DHCP)

自訂port

1
2
3
4
5
$ sudo nmap -p 21-25,80, taeget
$ sudo nmap -pT:21-25,80,U:5000-6000 taeget
  #掃描21-25,80的TCP port和從5000-6000的UDP port
  #如果在範圍的左邊是空白的,則Nmap假設為1,右邊是空白的,則假設為65535
  #-p-100 表示-p1-100

指定要掃描的主機

CIDR(Classless Inter-Domain Routing)表示法
  • 讓你指定IP位址或網域名稱,隨後接正斜線(forward-slash,/)以及子網路遮罩(subnet mask)的位元數
  • 192.0.0.1/24:掃描192.0.0.1所在的C級網路(256個位址)
  • 192.0.0.1/16:掃描192.0.0.1所在的B級網路(65535個位址)
  • 192.0.0.1/8:掃描192.0.0.1所在的A級網路(1600萬個位址)
  • Nmap接受 /1,約有20億個位址
IP位址範圍
  • 192.0.0.1-254:掃描192.0.0.1所在的C級網路的有效IP,把192.0.0.0和192.0.0.255排除
  • 較複雜的表示方法:10.1,3,5,7,9.50-100,150-200.1-5,250-254
  • 對於使用BGP(使用port 179的常見路由器協定)的路由器來說,要迅速掃描整個10.0.0.0/8網路,可能會使用:
    1
    $ sudo nmap -p 179 10.0-254.0-254.1,254

不同的掃描類型

UDP掃描類型
  • 空封包(empty packet)掃描:傳送不含任何資料的UDP封包給port,並且等待看看是否有結果被回傳,Nmap可區分port是被開啟或是被防火牆過濾

    1
    $ sudo nmap -p -sU target
  • 協定資料(protocol data)掃描:更複雜的UDP掃描方式,牽涉到UDP封包傳送有效的應用程式協定資料到port,看看是否能得到回應

    • 只有在port確實以非錯誤(nonerror)的回應回覆協定資料封包,port才會被認定為開啟
    • 涉及對偵聽中的應用程式發出信號,很可能被記錄下來,或甚至引起未預期的行為,像是把敏感的應用程式弄當掉等
    • 混合UDP和應用程式鑑別的Nmap掃描會導致速度極慢的掃描
  • 1
    2
    $ sudo nmap -sU -sV target 
         #-sV為應用程式鑑別(application fingerprinting功能)

0 意見:

張貼留言