1. 程式人生 > >Kali Linux 網路掃描祕籍 第三章 埠掃描(二)

Kali Linux 網路掃描祕籍 第三章 埠掃描(二)

第三章 埠掃描(二)

作者:Justin Hutchens

譯者:飛龍

3.6 Scapy 隱祕掃描

執行 TCP 埠掃描的一種方式就是執行一部分。目標埠上的 TCP 三次握手用於識別埠是否接受連線。這一型別的掃描指代隱祕掃描, SYN 掃描,或者半開放掃描。這個祕籍演示瞭如何使用 Scapy 執行 TCP 隱祕掃描。

準備

為了使用 Scapy 執行 TCP 隱祕 掃描,你需要一個執行 TCP 網路服務的遠端伺服器。這個例子中我們使用 Metasploitable2 例項來執行任務。配置 Metasploitable2 的更多資訊請參考第一章中的“安裝 Metasploitable2”祕籍。

此外,這一節也需要編寫指令碼的更多資訊,請參考第一章中的“使用文字編輯器*VIM 和 Nano)。

操作步驟

為了展示如何執行 SYN 掃描,我們需要使用 Scapy 構造 TCP SYN 請求,並識別和開放埠、關閉埠以及無響應系統有關的響應。為了向給定埠傳送 TCP SYN 請求,我們首先需要構建請求的各個層面。我們需要構建的第一層就是 IP 層:

root@KaliLinux:~# scapy 
Welcome to Scapy (2.2.0) 
>>> i = IP() 
>>> i.display()
###[ IP ]###  
    version= 4
ihl= None tos= 0x0 len= None id= 1 flags= frag= 0 ttl= 64 proto= ip chksum= None src= 127.0.0.1 dst= 127.0.0.1 \options\ >>> i.dst = "172.16.36.135" >>> i.display() ###[ IP ]### version= 4 ihl= None tos= 0x0
len= None id= 1 flags= frag= 0 ttl= 64 proto= ip chksum= None src= 172.16.36.180 dst= 172.16.36.135 \options\

為了構建請求的 IP 層,我們需要將IP物件賦給變數i。通過呼叫display函式,我們可以確定物件的屬性配置。通常,傳送和接受地址都設為回送地址,127.0.0.1。這些值可以通過修改目標地址來修改,也就是設定i.dst為想要掃描的地址的字串值。通過再次呼叫dislay函式,我們看到不僅僅更新的目標地址,也自動更新了和預設介面相關的源 IP 地址。現在我們構建了請求的 IP 層,我們可以構建 TCP 層了。

>>> t = TCP() 
>>> t.display() 
###[ TCP ]###  
    sport= ftp_data  
    dport= http  
    seq= 0  
    ack= 0  
    dataofs= None  
    reserved= 0  
    flags= S  
    window= 8192  
    chksum= None  
    urgptr= 0  
    options= {}

為了構建請求的 TCP 層,我們使用和 IP 層相同的技巧。在這個立即中,TCP物件賦給了t變數。像之前提到的那樣,預設的配置可以通過呼叫display函式來確定。這裡我們可以看到目標埠的預設值為 HTTP 埠 80。對於我們的首次掃描,我們將 TCP 設定保留預設。現在我們建立了 TCP 和 IP 層,我們需要將它們疊放來構造請求。

>>> request = (i/t) 
>>> request.display() 
###[ IP ]###  
    version= 4  
    ihl= None  
    tos= 0x0  
    len= None  
    id= 1
    flags=   
    frag= 0  
    ttl= 64  
    proto= tcp  
    chksum= None  
    src= 172.16.36.180  
    dst= 172.16.36.135  
    \options\ 
###[ TCP ]###     
    sport= ftp_data     
    dport= http     
    seq= 0     
    ack= 0     
    dataofs= None     
    reserved= 0     
    flags= S     
    window= 8192     
    chksum= None     
    urgptr= 0     
    options= {}

我們可以通過以斜槓分離變數來疊放 IP 和 TCP 層。這些層面之後賦給了新的變數,它代表整個請求。我們之後可以呼叫dispaly函式來檢視請求的配置。一旦構建了請求,可以將其傳遞給sr1函式來分析響應:

>>> response = sr1(request) 
...Begin emission: 
........Finished to send 1 packets. 
....* 
Received 16 packets, got 1 answers, remaining 0 packets 
>>> response.display() 
###[ IP ]###  
    version= 4L  
    ihl= 5L  
    tos= 0x0  
    len= 44
    id= 0  
    flags= DF  
    frag= 0L  
    ttl= 64  
    proto= tcp  
    chksum= 0x9970  
    src= 172.16.36.135  
    dst= 172.16.36.180  
    \options\ 
###[ TCP ]###     
    sport= http     
    dport= ftp_data     
    seq= 2848210323L     
    ack= 1     
    dataofs= 6L     
    reserved= 0L     
    flags= SA     
    window= 5840     
    chksum= 0xf82d     
    urgptr= 0     
    options= [('MSS', 1460)] 
###[ Padding ]###        
    load= '\x00\x00'

相同的請求可以不通過構建和堆疊每一層來執行。反之,我們使用單獨的一條命令,通過直接呼叫函式並傳遞合適的引數:

>>> sr1(IP(dst="172.16.36.135")/TCP(dport=80)) 
.Begin emission: .............Finished to send 1 packets. 
....* 
Received 19 packets, got 1 answers, remaining 0 packets 
<IP  version=4L ihl=5L tos=0x0 len=44 id=0 flags=DF frag=0L ttl=64 proto=tcp chksum=0x9970 src=172.16.36.135 dst=172.16.36.180 options=[] |<TCP  sport=http dport=ftp_data seq=542529227 ack=1 dataofs=6L reserved=0L flags=SA window=5840 chksum=0x6864 urgptr=0 options=[('MSS', 1460)] |<Padding  load='\x00\x00' |>>>

要注意當 SYN 封包發往目標 Web 伺服器的 TCP 埠 80,並且該埠上運行了 HTTP 服務時,響應中會帶有 TCP 標識 SA 的值,這表明 SYN 和 ACK 標識都被啟用。這個響應表明特定的目標埠是開放的,並接受連線。如果相同型別的封包發往不接受連線的埠,會收到不同的請求。

>>> response = sr1(IP(dst="172.16.36.135")/TCP(dport=4444)) 
..Begin emission: 
.Finished to send 1 packets. 
...* Received 7 packets, got 1 answers, remaining 0 packets 
>>> response.display() 
###[ IP ]###  
    version= 4L  
    ihl= 5L  
    tos= 0x0  
    len= 40  
    id= 0  
    flags= DF  
    frag= 0L 
    ttl= 64  
    proto= tcp 
    chksum= 0x9974 
    src= 172.16.36.135 
    dst= 172.16.36.180 
    \options\ 
###[ TCP ]###  
    sport= 4444    
    dport= ftp_data 
    seq= 0   
    ack= 1   
    dataofs= 5L  
    reserved= 0L  
    flags= RA  
    window= 0    
    chksum= 0xfd03   
    urgptr= 0
    options= {} 
###[ Padding ]###   
    load= '\x00\x00\x00\x00\x00\x00'

當 SYN 請求傳送給關閉的埠時,返回的響應中帶有 TCP 標識 RA,這表明 RST 和 ACK 標識為都被啟用。ACK 為僅僅用於承認請求被接受,RST 為用於斷開連線,因為埠不接受連線。作為替代,如果 SYN 封包發往崩潰的系統,或者防火牆過濾了這個請求,就可能接受不到任何資訊。由於這個原因,在sr1函式在指令碼中使用時,應該始終使用timeout選項,來確保指令碼不會在無響應的主機上掛起。

>>> response = sr1(IP(dst="172.16.36.136")/TCP(dport=4444),timeout=1,verb ose=1) 
Begin emission: 
Finished to send 1 packets

Received 15 packets, got 0 answers, remaining 1 packets 

如果函式對無響應的主機使用時,timeout值沒有指定,函式會無限繼續下去。這個演示中,timout值為 1秒,用於使這個函式更加完備,響應的值可以用於判斷是否收到了響應:

[email protected]:~# 
python Python 2.7.3 (default, Jan  2 2013, 16:53:07) 
[GCC 4.7.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from scapy.all import * 
>>> response = sr1(IP(dst="172.16.36.136")/TCP(dport=4444),timeout=1,verb ose=1) 
Begin emission: 
WARNING: Mac address to reach destination not found. Using broadcast. Finished to send 1 packets.

Received 15 packets, got 0 answers, remaining 1 packets 
>>> if response == None: 
...     print "No Response!!!" 
... 
No Response!!!

Python 的使用使其更易於測試變數來識別sr1函式是否對其複製。這可以用作初步檢驗,來判斷是否接收到了任何響應。對於接收到的響應,可以執行一系列後續檢查來判斷響應表明埠開放還是關閉。這些東西可以輕易使用 Python 指令碼來完成,像這樣:

#!/usr/bin/python

import logging 
logging.getLogger("scapy.runtime").setLevel(logging.ERROR) 
from scapy.all import * 
import sys

if len(sys.argv) != 4:   
    print "Usage - ./syn_scan.py [Target-IP] [First Port] [Last Port]"   
    print "Example - ./syn_scan.py 10.0.0.5 1 100"   
    print "Example will TCP SYN scan ports 1 through 100 on 10.0.0.5"   
    sys.exit()

ip = sys.argv[1] 
start = int(sys.argv[2]) 
end = int(sys.argv[3])

for port in range(start,end):   
    ans = sr1(IP(dst=ip)/TCP(dport=port),timeout=1,verbose=0)   
    if ans == None:      
        pass   
    else:      
        if int(ans[TCP].flags) == 18:    
            print port  
        else:       
            pass 

在這個 Python 指令碼中,用於被提示來輸入 IP 地址,指令碼之後會對定義好的埠序列執行 SYN 掃描。指令碼之後會得到每個連線的響應,並嘗試判斷響應的 SYN 和 ACK 標識是否啟用。如果響應中出現並僅僅出現了這些標識,那麼會輸出相應的埠號碼。

root@KaliLinux:~# chmod 777 syn_scan.py 
root@KaliLinux:~# ./syn_scan.py 
Usage - ./syn_scan.py [Target-IP] [First Port] [Last Port] 
Example - ./syn_scan.py 10.0.0.5 1 100 
Example will TCP SYN scan ports 1 through 100 on 10.0.0.5 
root@KaliLinux:~# ./syn_scan.py 172.16.36.135 1 100

21 
22 
23 
25 
53 
80 

執行這個指令碼之後,輸出會顯示所提供的 IP 地址的系統上,前 100 個埠中的開放埠。

工作原理

這一型別的掃描由傳送初始 SYN 封包給遠端系統的目標 TCP 埠,並且通過返回的響應型別來判斷埠狀態來完成。如果遠端系統返回了 SYN+ACK 響應,那麼它正在準備建立連線,我們可以假設這個埠開放。如果服務返回了 RST 封包,這就表明埠關閉並且不接收連線。此外,如果沒有返回響應,掃描系統和遠端系統之間可能存在防火牆,它丟棄了請求。這也可能表明主機崩潰或者目標 IP 上沒有關聯任何系統。

3.7 Nmap 隱祕掃描

Nmap 擁有可以執行遠端系統 SYN 掃描的掃描模式。這個祕籍展示瞭如何使用 Namp 執行 TCP 隱祕掃描。

準備

為了使用 Nmap 執行 TCP 隱祕掃描,你需要一個執行 TCP 網路服務的遠端伺服器。這個例子中我們使用 Metasploitable2 例項來執行任務。配置 Metasploitable2 的更多資訊請參考第一章中的“安裝 Metasploitable2”祕籍。

操作步驟

就像多數掃描需求那樣,Nmap 擁有簡化 TCP 隱祕掃描執行過程的選項。為了使用 Nmap 執行 TCP 隱祕掃描,應使用-sS選項,並附帶被掃描主機的 IP 地址。

[email protected]:~# nmap -sS 172.16.36.135 -p 80

Starting Nmap 6.25 ( http://nmap.org ) at 2013-12-17 21:47 EST
Nmap scan report for 172.16.36.135 
Host is up (0.00043s latency). 
PORT   STATE SERVICE 
80/tcp open  http 
MAC Address: 00:0C:29:3D:84:32 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 13.05 seconds 

在提供的例子中,特定的 IP 地址的 TCP 80 埠上執行了 TCP 隱祕掃描。和 Scapy 中的技巧相似,Nmap 監聽響應並通過分析響應中所啟用的 TCP 標識來識別開放埠。我們也可以使用 Namp 執行多個特定埠的掃描,通過傳遞逗號分隔的埠號列表。

[email protected]:~# nmap -sS 172.16.36.135 -p 21,80,443

Starting Nmap 6.25 ( http://nmap.org ) at 2013-12-17 21:48 EST 
Nmap scan report for 172.16.36.135 
Host is up (0.00035s latency). 
PORT    STATE  SERVICE 
21/tcp  open   ftp 
80/tcp  open   http 
443/tcp closed https 
MAC Address: 00:0C:29:3D:84:32 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 13.05 seconds 

在這個例子中,目標 IP 地址的埠 21、80 和 443 上執行了 SYN 掃描。我們也可以使用 Namp 來掃描主機序列,通過標明要掃描的第一個和最後一個埠號,以破折號分隔:

[email protected]:~# nmap -sS 172.16.36.135 -p 20-25

Starting Nmap 6.25 ( http://nmap.org ) at 2013-12-17 21:48 EST 
Nmap scan report for 172.16.36.135 
Host is up (0.00035s latency). 
PORT   STATE  SERVICE 
20/tcp closed ftp-data 
21/tcp open   ftp
22/tcp open   ssh 
23/tcp open   telnet 
24/tcp closed priv-mail 
25/tcp open   smtp 
MAC Address: 00:0C:29:3D:84:32 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 13.05 seconds 

在所提供的例子中,SYN 掃描在 TCP 20 到 25 埠上執行。除了擁有指定被掃描埠的能力之外。Nmap 同時擁有配置好的 1000 和常用埠的列表。我們可以執行這些埠上的掃描,通過不帶任何埠指定資訊來執行 Nmap:

[email protected]:~# nmap -sS 172.16.36.135

Starting Nmap 6.25 ( http://nmap.org ) at 2013-12-17 21:46 EST 
Nmap scan report for 172.16.36.135 
Host is up (0.00038s latency). N
ot shown: 977 closed ports 
PORT     STATE SERVICE 
21/tcp   open  ftp 
22/tcp   open  ssh 
23/tcp   open  telnet 
25/tcp   open  smtp 
53/tcp   open  domain 
80/tcp   open  http 
111/tcp  open  rpcbind 
139/tcp  open  netbios-ssn 
445/tcp  open  microsoft-ds 
512/tcp  open  exec 
513/tcp  open  login 
514/tcp  open  shell 
1099/tcp open  rmiregistry 
1524/tcp open  ingreslock 
2049/tcp open  nfs 
2121/tcp open  ccproxy-ftp 
3306/tcp open  mysql
5432/tcp open  postgresql 
5900/tcp open  vnc 
6000/tcp open  X11 
6667/tcp open  irc 
8009/tcp open  ajp13 
8180/tcp open  unknown 
MAC Address: 00:0C:29:3D:84:32 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 13.17 seconds 

在上面的例子中,掃描了 Nmap 定義的 1000 個常用埠,用於識別 Metasploitable2 系統上的大量開放埠。雖然這個技巧在是被多數裝置上很高效,但是也可能無法識別模糊的服務或者不常見的埠組合。如果掃描在所有可能的 TCP 埠上執行,所有可能的埠地址值都需要被掃描。定義了源埠和目標埠地址的 TCP 頭部部分是 16 位長。並且,每一位可以為 1 或者 0。因此,共有2 ** 16或者 65536 個可能的 TCP 埠地址。對於要掃描的全部可能的地址空間,需要提供 0 到 65535 的埠範圍,像這樣:

[email protected]:~# nmap -sS 172.16.36.135 -p 0-65535

Starting Nmap 6.25 ( http://nmap.org ) at 2013-12-17 21:51 EST 
Nmap scan report for 172.16.36.135 
Host is up (0.00033s latency). 
Not shown: 65506 closed ports 
PORT      STATE SERVICE 
21/tcp    open  ftp 
22/tcp    open  ssh 
23/tcp    open  telnet 
25/tcp    open  smtp 
53/tcp    open  domain 
80/tcp    open  http 
111/tcp   open  rpcbind 
139/tcp   open  netbios-ssn 
445/tcp   open  microsoft-ds 
512/tcp   open  exec 
513/tcp   open  login 
514/tcp   open  shell
1099/tcp  open  rmiregistry 
1524/tcp  open  ingreslock 
2049/tcp  open  nfs 
2121/tcp  open  ccproxy-ftp 
3306/tcp  open  mysql 
3632/tcp  open  distccd 
5432/tcp  open  postgresql 
5900/tcp  open  vnc 
6000/tcp  open  X11 
6667/tcp  open  irc 
6697/tcp  open  unknown 
8009/tcp  open  ajp13 
8180/tcp  open  unknown 
8787/tcp  open  unknown 
34789/tcp open  unknown 
50333/tcp open  unknown 
56375/tcp open  unknown 
57385/tcp open  unknown 
MAC Address: 00:0C:29:3D:84:32 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 16.78 seconds 

這個例子中,Metasploitable2 系統上所有可能的 65536 和 TCP 地址都掃描了一遍。要注意該掃描中識別的多數服務都在標準的 Nmap 1000 掃描中識別過了。這就表明在嘗試識別目標的所有可能的攻擊面的時候,完整掃描是個最佳實踐。Nmap 可以使用破折號記法,掃描主機列表上的 TCP 埠:

[email protected]:~# nmap 172.16.36.0-255 -sS -p 80

Starting Nmap 6.25 ( http://nmap.org ) at 2013-12-17 21:56 EST 
Nmap scan report for 172.16.36.1 Host is up (0.00023s latency). 
PORT   STATE  SERVICE 
80/tcp closed http 
MAC Address: 00:50:56:C0:00:08 (VMware)

Nmap scan report for 172.16.36.2 Host is up (0.00018s latency). 
PORT   STATE  SERVICE 
80/tcp closed http 
MAC Address: 00:50:56:FF:2A:8E (VMware)

Nmap scan report for 172.16.36.132 Host is up (0.00047s latency). 
PORT   STATE  SERVICE 
80/tcp closed http 
MAC Address: 00:0C:29:65:FC:D2 (VMware)

Nmap scan report for 172.16.36.135 
Host is up (0.00016s latency). 
PORT   STATE SERVICE 
80/tcp open  http 
MAC Address: 00:0C:29:3D:84:32 (VMware)

Nmap scan report for 172.16.36.180 
Host is up (0.0029s latency). 
PORT   STATE SERVICE 
80/tcp open  http

Nmap done: 256 IP addresses (5 hosts up) scanned in 42.85 seconds 

這個例子中,TCP 80 埠的 SYN 掃描在指定地址範圍內的所有主機上執行。雖然這個特定的掃描僅僅執行在單個埠上,Nmap 也能夠同時掃描多個系統上的多個埠和埠範圍。此外,Nmap 也能夠進行配置,基於 IP 地址的輸入列表來掃描主機。這可以通過-iL選項並指定檔名,如果檔案存放於執行目錄中,或者檔案路徑來完成。Nmap 之後會遍歷輸入列表中的每個地址,並對地址執行特定的掃描。

[email protected]:~# cat iplist.txt 
172.16.36.1 
172.16.36.2 
172.16.36.132 
172.16.36.135

[email protected]:~# nmap -sS -iL iplist.txt -p 80

Starting Nmap 6.25 ( http://nmap.org ) at 2013-12-17 21:59 EST 
Nmap scan report for 172.16.36.1 
Host is up (0.00016s latency). 
PORT   STATE  SERVICE 
80/tcp closed http 
MAC Address: 00:50:56:C0:00:08 (VMware)

Nmap scan report for 172.16.36.2 
Host is up (0.00047s latency). 
PORT   STATE  SERVICE 
80/tcp closed http 
MAC Address: 00:50:56:FF:2A:8E (VMware)

Nmap scan report for 172.16.36.132 
Host is up (0.00034s latency). 
PORT   STATE  SERVICE 
80/tcp closed http 
MAC Address: 00:0C:29:65:FC:D2 (VMware)

Nmap scan report for 172.16.36.135 
Host is up (0.00016s latency). 
PORT   STATE SERVICE 
80/tcp open  http 
MAC Address: 00:0C:29:3D:84:32 (VMware)

Nmap done: 4 IP addresses (4 hosts up) scanned in 13.05 seconds

工作原理

Nmap SYN 掃描背後的底層機制已經討論過了。但是,Nmap 擁有多執行緒功能,是用於執行這類掃描的快速高效的方式。

3.8 Metasploit 隱祕掃描

除了其它已經討論過的工具之外,Metasploit 擁有用於 SYN 掃描的輔助模組。這個祕籍展示瞭如何使用 Metasploit 來執行 TCP 隱祕掃描。

準備

為了使用 Metasploit 執行 TCP 隱祕掃描,你需要一個執行 TCP 網路服務的遠端伺服器。這個例子中我們使用 Metasploitable2 例項來執行任務。配置 Metasploitable2 的更多資訊請參考第一章中的“安裝 Metasploitable2”祕籍。

操作步驟

Metasploit 擁有可以對特定 TCP 埠執行 SYN 掃描的輔助模組。為了在 Kali 中啟動 Metasploit,我們在終端中執行msfconsole命令。

[email protected]:~# msfconsole 
IIIIII    dTb.dTb        _.---._
  II     4'  v  'B   .'"".'/|\`.""'.  
  II     6.     .P  :  .' / | \ `.  :  
  II     'T;. .;P'  '.'  /  |  \  `.'  
  II      'T; ;P'    `. /   |   \ .' 
IIIIII     'YvP'       `-.__|__.-'

I love shells --egypt

Using notepad to track pentests? Have Metasploit Pro report on hosts, services, sessions and evidence -- type 'go_pro' to launch it now.

       =[ metasploit v4.6.0-dev [core:4.6 api:1.0] 
+ -- --=[ 1053 exploits - 590 auxiliary - 174 post 
+ -- --=[ 275 payloads - 28 encoders - 8 nops

msf > use auxiliary/scanner/portscan/syn 
msf  auxiliary(syn) > show options

Module options (auxiliary/scanner/portscan/syn):

    Name       Current Setting  Required  Description   
    ----       ---------------  --------  ----------   
    BATCHSIZE  256              yes       The number of hosts to scan per set   
    INTERFACE                   no        The name of the interface   
    PORTS      1-10000          yes       Ports to scan (e.g. 2225,80,110-900)   
    RHOSTS                      yes       The target address range or CIDR identifier   
    SNAPLEN    65535            yes       The number of bytes to capture   
    THREADS    1                yes       The number of concurrent threads   
    TIMEOUT    500              yes       The reply read timeout in milliseconds 

為了在 Metasploit 中執行 SYN 掃描,以輔助模組的相對路徑呼叫use命令。一旦模組被選中,可以執行show options命令來確認或修改掃描配置。這個命令會展示四列的表格,包括namecurrent settingsrequireddescriptionname列標出了每個可配置變數的名稱。current settings列列出了任何給定變數的現有配置。required列標出對於任何給定變數,值是否是必須的。description列描述了每個變數的功能。任何給定變數的值可以使用set命令,並且將新的值作為引數來修改。

msf  auxiliary(syn) > set RHOSTS 172.16.36.135 
RHOSTS => 172.16.36.135 
msf  auxiliary(syn) > set THREADS 20 
THREADS => 20 
msf  auxiliary(syn) > set PORTS 80 
PORTS => 80 
msf  auxiliary(syn) > show options

Module options (auxiliary/scanner/portscan/syn):

   Name       Current Setting  Required  Description   
   ----       ---------------  --------  ----------   
   BATCHSIZE  256              yes       The number of hosts to scan per set
   INTERFACE                   no        The name of the interface   
   PORTS      80               yes       Ports to scan (e.g. 2225,80,110-900)   
   RHOSTS     172.16.36.135    yes       The target address range or CIDR identifier   
   SNAPLEN    65535            yes       The number of bytes to capture   
   THREADS    20               yes       The number of concurrent threads   
   TIMEOUT    500              yes       The reply read timeout in milliseconds

在上面的例子中,RHOSTS值修改為我們打算掃描的遠端系統的 IP 地址。地外,執行緒數量修改為 20。THREADS的值定義了在後臺執行的當前任務數量。確定執行緒數量涉及到尋找一個平衡,既能提升任務速度,又不會過度消耗系統資源。對於多數系統,20 個執行緒可以足夠快,並且相當合理。PORTS值設為 TCP 埠 80(HTTP)。修改了必要的變數之後,可以再次使用show options命令來驗證。一旦所需配置驗證完畢,就可以執行掃描了。

msf  auxiliary(syn) > run

[*] TCP OPEN 172.16.36.135:80 [*] Scanned 1 of 1 hosts (100% complete) 
[*] Auxiliary module execution completed The run command is used in Metasploit to execute the selected auxiliary module. In the example provided, the run command executed a TCP SYN scan against port 80 of the specified IP address. We can also run this TCP SYN scan module against a sequential series  of TCP ports by supplying the first and last values, separated by a dash notation:

msf  auxiliary(syn) > set PORTS 0-100 
PORTS => 0-100 
msf  auxiliary(syn) > show options

Module options (auxiliary/scanner/portscan/syn):

   Name       Current Setting  Required  Description   
   ----       ---------------  --------  ----------   
   BATCHSIZE  256              yes       The number of hosts to scan per set   
   INTERFACE                   no        The name of the interface
   PORTS      0-100            yes       Ports to scan (e.g. 2225,80,110-900)   
   RHOSTS     172.16.36.135    yes       The target address range or CIDR identifier   
   SNAPLEN    65535            yes       The number of bytes to capture   
   THREADS    20               yes       The number of concurrent threads   
   TIMEOUT    500              yes       The reply read timeout in milliseconds

msf  auxiliary(syn) > run

[*]  TCP OPEN 172.16.36.135:21 
[*]  TCP OPEN 172.16.36.135:22 
[*]  TCP OPEN 172.16.36.135:23 
[*]  TCP OPEN 172.16.36.135:25 
[*]  TCP OPEN 172.16.36.135:53 
[*]  TCP OPEN 172.16.36.135:80 
[*] Scanned 1 of 1 hosts (100% complete) 
[*] Auxiliary module execution completed 

上面的例子中,所指定的遠端主機的錢 100 個 TCP 埠上執行了 TCP SYN 掃描。雖然這個掃描識別了目標系統的多個裝置,我們不能確認所有裝置都識別出來,除非所有可能的埠地址都掃描到。定義來源和目標埠地址的TCP 頭部部分是 16 位長。並且,每一位可以為 1 或者 0。因此,共有2 ** 16或 65536 個可能的 TCP 埠地址。對於要掃描的整個地址空間,需要提供 0 到 65535 的 埠範圍,像這樣:

msf  auxiliary(syn) > set PORTS 0-65535 
PORTS => 0-65535 
msf  auxiliary(syn) > show options

Module options (auxiliary/scanner/portscan/syn):

   Name       Current Setting  Required  Description   
   ----       ---------------  --------  ----------   
   BATCHSIZE  256              yes       The number of hosts to scan per set   
   INTERFACE                   no        The name of the interface
   PORTS      0-65535          yes       Ports to scan (e.g. 2225,80,110-900)   
   RHOSTS     172.16.36.135    yes       The target address range or CIDR identifier   
   SNAPLEN    65535            yes       The number of bytes to capture   
   THREADS    20               yes       The number of concurrent threads   
   TIMEOUT    500              yes       The reply read timeout in milliseconds 

msf  auxiliary(syn) > run

[*]  TCP OPEN 172.16.36.135:21 
[*]  TCP OPEN 172.16.36.135:22 
[*]  TCP OPEN 172.16.36.135:23 
[*]  TCP OPEN 172.16.36.135:25 
[*]  TCP OPEN 172.16.36.135:53 
[*]  TCP OPEN 172.16.36.135:80 
[*]  TCP OPEN 172.16.36.135:111 
[*]  TCP OPEN 172.16.36.135:139 
[*]  TCP OPEN 172.16.36.135:445 
[*]  TCP OPEN 172.16.36.135:512 
[*]  TCP OPEN 172.16.36.135:513 
[*]  TCP OPEN 172.16.36.135:514 
[*]  TCP OPEN 172.16.36.135:1099 
[*]  TCP OPEN 172.16.36.135:1524 
[*]  TCP OPEN 172.16.36.135:2049 
[*]  TCP OPEN 172.16.36.135:2121 
[*]  TCP OPEN 172.16.36.135:3306 
[*]  TCP OPEN 172.16.36.135:3632 
[*]  TCP OPEN 172.16.36.135:5432 
[*]  TCP OPEN 172.16.36.135:5900 
[*]  TCP OPEN 172.16.36.135:6000 
[*]  TCP OPEN 172.16.36.135:6667 
[*]  TCP OPEN 172.16.36.135:6697 
[*]  TCP OPEN 172.16.36.135:8009 
[*]  TCP OPEN 172.16.36.135:8180 
[*]  TCP OPEN 172.16