Nmap備忘單 從探索到漏洞利用 第四章 繞過防火墻
這是我們的Nmap備忘單的第四部分(Part 1、Part 2、Part 3)。本文中我們將討論更多東西關于掃描防火墻,IDS / IPS 逃逸,Web服務器滲透測試等。在此之前,我們應該了解一下防火墻的一些基礎知識以便繞過它。
什么是防火墻?
防火墻是用來控制網絡訪問的軟件或硬件。分為以下兩類:1、基于主機的防火墻;2、基于網絡的防火墻。
基于主機的防火墻
這是在單臺主機上運行的軟件,用來控制入站流量(從網絡向主機)和出站流量(從主機向網絡)。這些軟件安裝于操作系統(tǒng)之上,常見例子就是Linux上面的iptables和Windows上的Zone Alarm。
基于網絡的防火墻
這些可以是硬件設備或軟件,或者硬件設備和軟件相結合。用來保護來自于未受保護的入站通信。
防火墻被安裝在受保護和不受保護的網絡之間,它們會查看所有的通信,并通過設置規(guī)則來控制入站和出站的通信。
掃描防火墻
為了有效地掃描防火墻,我們必須檢查所有開放端口,服務和狀態(tài)。在使用Nmap掃描時也要采取行動,設置時間選項來確定防火墻的存在。所以你可以看到下面有關Nmap掃描結果的表格,我們可以很容易地知道防火墻是否存在。

通過谷歌搜索時候我才知道,下面的IP地址是由WAF(Web應用防火墻),以及某些IDS保護下。我們試圖以某種強力攻擊(SQL注入)。我們提交一些特殊字符時,它都會被顯示“失敗的防火墻認證”。我們才知道這個東西可以用HTTP動詞篡改來繞過。我們將稍后討論。

首先我們使用選項-Pn進行掃描。

發(fā)現有被過濾的端口,因此我們肯定服務器有防火墻保護,我們掃描指定端口獲得更多的信息。

讓我們做一個內部網絡掃描。首先,我們將檢查掃描版本:

通過指定時間選項和端口選項發(fā)現了更多服務。

觀察:
掃描防火墻給內部網絡提供的各種服務,包括DNS,SSH,HTTPS和Web代理。這些都是在內部網絡中的所有PC可以訪問。它也在80端口運行透明代理,所以并不需要客戶端的瀏覽器更改設置。
逃避或繞過防火墻
bypass或規(guī)避或逃避無非是進入系統(tǒng)的另一種方式。管理員使用防火墻或IDS / IPS阻止惡意攻擊或垃圾郵件。但是從攻擊者的角度來看,他會想辦法繞過防火墻規(guī)則;Nmap有很多辦法繞過防火墻。
1、碎片化
Nmap發(fā)送8個字節(jié)的數據包繞過防火墻/IDS/IPS。這種技術已經很古老了,但是在防火墻配置不當的時候依舊有用。
Nmap -f host

MTU,最大傳輸單元,它是碎片化的別名,我們可以指定它的大小。
Nmap --mtu 16 host

上面的Nmap掃描使用16字節(jié)的數據包而不是8個字節(jié)。所以我們可以指定自定義數據包大小為8的倍數。
2、誘餌
這種類型的掃描是非常隱蔽且無法察覺。目標由多個假冒或偽造IP地址進行掃描。這樣防火墻就會認為攻擊或掃描是通過多個資源或IP地址進行,于是就繞過了防火墻。

誘餌在初始的ping掃描(使用ICMP,SYN,ACK等)使用,在實際的端口掃描階段使用。誘餌在遠程操作系統(tǒng)檢測(-O)期間也使用。誘餌不在版本檢測工作或TCP連接掃描中使用。
這實際上在目標看來是由多個系統(tǒng)同時掃描,這使得防火墻更難追查掃描的來源。
有兩種方式來執(zhí)行誘餌掃描:
1.nmap –D RND:10 TARGET

2.nmap –D decoy1,decoy2,decoy3 target

以下網絡抓包顯示多個誘餌將欺騙防火墻。

3、空閑掃描
攻擊者將首先利用一個空閑的系統(tǒng)并用它來掃描目標系統(tǒng)。
掃描的工作原理是利用某些系統(tǒng)中采用可預見的IP序列ID生成。為了使空閑掃描成功,僵尸主機的系統(tǒng)必須是在掃描時間處于閑置狀態(tài)。對于任何疑問,請參考之前的文章。
在這種技術中會隱藏攻擊者的IP地址。
Nmap –P0 -sI zombie target

我們使用tcpdump來捕獲所有網絡流量。
Tcpdump -i interface

4、選項–source-port
每個TCP數據包帶有源端口號。默認情況下Nmap會隨機選擇一個可用的傳出源端口來探測目標。該–source-port選項將強制Nmap使用指定的端口作為源端口。這種技術是利用了盲目地接受基于特定端口號的傳入流量的防火墻的弱點。端口21(FTP),端口53(DNS)和67(DHCP)是這種掃描類型的常見端口。
Nmap --source-port port target

5、隨機數據長度:
附加隨機數據長度,我們也可以繞過防火墻。許多防火墻通過檢查數據包的大小來識別潛伏中的端口掃描。這是因為許多掃描器會發(fā)送具有特定大小的數據包。為了躲避那種檢測,我們可以使用命令–data-length增加額外的數據,以便與默認大小不同。在下圖中,我們通過加入25多個字節(jié)改變數據包大小。

nmap --data-length target
捕獲數據流量

6、隨機順序掃描目標:
選項–randomize-host用于隨機 順序掃描指定目標。–randomize-host有助于防止因連續(xù) 掃描多個目標而防火墻和入侵檢測系統(tǒng)檢測到。
nmap --randomize-hosts targets

7、MAC地址欺騙:
每臺機器都有自己獨特的mac地址。因此這也是繞過防火墻的另一種方法,因為某些防火墻是基于MAC地址啟用規(guī)則的。為了獲得掃描結果,您需要先了解哪些MAC地址可以使用。這可以通過手動或先進的模糊測試完成。我更喜歡模糊測試,用Python實現非常容易。我們只需要手工導入正則表達式到Python中,然后自動化執(zhí)行。
特別是–spoof-MAC選項使您能夠從一個特定的供應商選擇一個MAC地址,選擇一個隨機的MAC地址,或者設定您所選擇的特定MAC地址。 MAC地址欺騙的另一個優(yōu)點是,你讓你的掃描隱蔽,因為你的實際MAC地址就不會出現在防火墻的日志文件。
nmap -sT -PN –spoof-mac aa:bb:cc:dd:ee:ff target

Mac地址欺騙需要以下參數:

8、發(fā)送錯誤校驗
在某些防火墻和IDS / IPS,只會檢查有正確校驗包的數據包。因此,攻擊者通過發(fā)送錯誤校驗欺騙IDS / IPS。
nmap --badsum target

9、Sun-RPC 掃描
什么是Sun RPC?Sun RPC(遠程過程調用)是一種Unix協(xié)議,用來實現多種服務比如NFS。最初由Sun開發(fā),但現在廣泛使用在其他平臺上(包括Digital Unix的)。也被稱為開放式網絡計算(ONC)。
Sun RPC包帶有一個RPC編譯器,自動生成服務端和客戶端的存根。
nmap帶有將近600個RPC程序的數據庫。許多RPC服務使用高端口編號或者使用UDP協(xié)議,RPC程序還有嚴重的遠程利用漏洞。所以網絡管理員和安全審計人員往往希望了解更多在他們的網絡內有關任何RPC程序。
我們可以通過以下命令獲得RPC的詳細信息:
rpcinfo/rpcinfo --p hostname

nmap通過以下三個步驟跟開放的RPC端口直接通信,然后獲取信息。
1)使用TCP或者UDP掃描開放的端口。
2)-sV選項檢查使用Sun RPC協(xié)議的開放端口。
3)RPC暴力破解引擎會逐一向nmap-rpc數據庫中記錄的端口發(fā)送空命令,來判斷RPC程序。當nmap猜測錯誤,會收到一條錯誤消息,指出請求的端口并沒有運行PRC程序。當nmap耗盡了所有已知的記錄,或者端口返回了非RPC的數據包,nmap才會放棄。
SSL后處理器掃描
NMAP具有檢測SSL加密協(xié)議的能力,進行版本檢測時會自動啟用這個功能。正如先前討論的RPC掃描,只要檢測一個適當的(SSL)端口自動執(zhí)行將SSL后處理器掃描。
命令:
nmap -Pn -sSV -T4 –F target

NMAP服務探針文件格式
Nmap使用本地文件來存儲版本檢測探針和匹配字符串。雖然nmap自帶的nmap-services足以滿足大多數用戶,理解文件格式有助于滲透測試人員添加新的規(guī)則到掃描引擎中。#號開始的行用于注釋和忽略。
排除指令
版本掃描中會排除指定的端口。它只能使用一次,在所有的探針指令的最上方,位于文件頂部。端口應該用逗號分隔。
語法:Exclude <port specification>
探針指令
語法:Probe <protocol> <probename> <probestring>
例子:
Probe TCP GetRequest q|GET / HTTP/1.0\r\n\r\n|
Probe UDP DNSStatusRequest q|\x10|
Probe TCP NULL q||
探針指令告訴nmap發(fā)送指定字符串去識別服務。參數如下:
<協(xié)議>
這必須是TCP或UDP。 NMAP只使用匹配它試圖掃描服務的協(xié)議的探針。
<探測器名稱>
這是一個純英文名稱。
<探測字符串>
告訴Nmap發(fā)送什么。它必須有一個q,用分隔符標記字符串的開始和結束。它允許下列標準轉義字符C或Perl的字符串:\\ , \a, \b, \f, \n, \r, \t, \v,和\xHH( H是任何十六進制數字)。Nmap的探針也有空內容探針比如上面的第三個例子,這個TCP空探針用來接收服務返回的banner。如果你的分隔符(在這些例子中是|)需要在探測字符串中,你需要選擇不同的分隔符。
語法:match <service> <pattern> [<versioninfo>]
Examples:
match ftp m/^220.*Welcome to .*Pure-?FTPd (\d\S+\s*)/ p/Pure-FTPd/ v/$1/ cpe:/a:pureftpd:pure-ftpd:$1/
match ssh m/^SSH-([\d.]+)-OpenSSH[_-]([\w.]+)\r?\n/i p/OpenSSH/ v/$2/ i/protocol $1/ cpe:/a:openbsd:openssh:$2/
match mysql m|^\x10\x01\xff\x13\x04Bad handshake$| p/MySQL/ cpe:/a:mysql:mysql/
match chargen m|@ABCDEFGHIJKLMNOPQRSTUVWXYZ|
match uucp m|^login: login: login: $| p/NetBSD uucpd/ o/NetBSD/ cpe:/o:netbsd:netbsd/a
match printer m|^([\w-_.]+): lpd: Illegal service request\n$| p/lpd/ h/$1/
match afs m|^[\d\D]{28}\s*(OpenAFS)([\d\.]{3}[^\s]*)| p/$1/ v/$2/
匹配指令
匹配指令告訴Nmap如何根據之前發(fā)送探針后服務器的響應來識別服務。每一個探針后可跟隨數十或數百個匹配的語句。匹配指令包括:可選的版本說明,應用程序名稱,版本號,以及Nmap報告的其他信息。該參數這個指令如下:
<服務>
這是簡單的模式匹配的服務名稱。比如ssh、smtp、http或snmp。
<模式>
該模式被用來確定接收到的響應是否與先前給出的服務參數相匹配。格式如Perl,使用語法為m/[regex]/[opts]。“m”告訴Nmap一個匹配的字符串開始。正斜杠(/)是一個分隔符。該正則表達式是一個Perl風格的正則表達式。目前可以配置的選項是‘i’(不區(qū)分大小寫),‘s’(.也可以匹配換行符)。在Perl這兩個選項具有相同的語義。用括號包圍需要捕獲的字符串,比如版本號。
<版本信息>
在<VERSIONINFO>部分實際上包含幾個可選字段。每個字段始于一個確認字母(如h為“主機名”)。接下來是一個分隔符,優(yōu)選的分隔符是斜杠(’/'),除非是在斜杠會在內容中體現。接下來是字段的值,然后是分隔符。下表描述了六個字段:

軟匹配指令
語法:softmatch <service> <pattern>
樣例:
softmatch ftp m/^220 [-.\w ]+ftp.*\r\n$/i
softmatch smtp m|^220 [-.\w ]+SMTP.*\r\n|
softmatch pop3 m|^\+OK [-\[\]\(\)!,/+:<>@.\w ]+\r\n$|
軟匹配指令和匹配指令的格式類似,主要區(qū)別在于軟匹配成功之后仍會繼續(xù)掃描,但只會發(fā)送與匹配成功的服務有關的探針,這有助于獲得更多信息,比如版本號。
端口和SSL端口指令
語法:port <portlist>
樣例:
ports 21,43,110,113,199,505,540,1248,5432,30444
ports 111,4045,32750-32810,38978
這個命令告訴nmap通過哪些端口去標識服務。語法類似于nmap的-p選項。
語法:sslports <portlist>
樣例:sslports 443
這個是用來探測ssl服務的端口。
totalwaitms指令
語法:totalwaitms <milliseconds>
樣例:totalwaitms 5000
這個指令告訴nmap針對特定服務發(fā)送探針后要等待響應的時間有多久。nmap默認是5秒。
稀有級指令
語法:rarity <值在1和9之間>
樣例:rarity 6
這個指令對應這個探針能返回期望結果的程度。數值越高表示越稀有。
回退指令
語法:fallback <逗號分隔的探針列表>
樣例:fallback GetRequest,GenericLines
這個選項指定當當前探針沒有匹配成功時,會使用的備用探針,順序是從左往右。對于沒有回退指令的探針,會隱藏的執(zhí)行回退到空探針。
現在來講講nmap在web滲透中的利用。
Nmap的HTTP方法
Web服務器根據它們的配置和軟件支持不同的HTTP方法,并且其中一些請求在一定條件下是危險的。HTTP的方法有GET, HEAD, POST, TRACE, DEBUG, OPTION, DELETE, TRACK, PUT等。更多詳情請查閱這里。
命令:
nmap -p80,443 --script http-methods scanme.nmap.org

如果需要詳細的檢查,那么命令:
nmap -p80,443 --script http-methods –script-args http-methods.retest scanme.nmap.org

默認情況下,腳本http-methods使用根文件夾為基礎路徑(/)。如果我們要設置一個不同的基本路徑,設置參數的HTTP methods.url路徑:
命令:
nmap -p80,443 --script http-methods --script-args http-methods.urlpath=/mypath/ scanme.nmap.org

HTTP方法TRACE,CONNECT,PUT和DELETE可能會出現安全風險,如果一個Web服務器或應用程序的支持這些方法的話,需要進行徹底測試。 TRACE使應用程序容易受到跨站跟蹤(XST)攻擊,可能導致攻擊者訪問標記為的HttpOnly的Cookie。 CONNECT方法可能會允許Web服務器作為未經授權的Web代理。 PUT和DELETE方法具有改變文件夾的內容的能力,如果權限設置不正確可能被濫用。
你可以了解每個方法更多的風險到:
https://www.owasp.org/index.php/Test_HTTP_Methods_%28OTG-CONFIG-006%29
HTTP User Agent:
有些防火墻會過濾Nmap的默認UserAgent,你可以設置不同的用戶代理。
命令:
nmap -p80 --script http-methods --script-args http.useragent=”Mozilla 5” <target>

HTTP管道
一些web服務器允許多個HTTP請求的封裝在一個包。這可以加快腳本執(zhí)行的速度,如果web服務器支持的話建議啟用。默認情況下一個管道會有40個請求,并且會根據網絡情況自動調節(jié)大小。
命令:
nmap -p80 --script http-methods --script-args http.pipeline=25 <target>

另外,我們可以設置http.max-pipeline參數來控制http管道的最大值。如果設置了該參數,nmap會自動忽略http.pipeline。
命令:
nmap -p80 --script http-methods --script-args http.max-pipeline=10 <target>
掃描HTTP代理
使用http代理是為了隱藏自己的真實ip地址。下列命令顯示如何檢測開放代理:
命令:
nmap --script http-open-proxy -p8080 <target>

我們還可以指定用來驗證的url。
命令:
nmap --script http-open-proxy --script-args http-open-proxy.url=http://whatsmyip.org,http-open-.pattern=”Your IP address is” -p8080 <target>

發(fā)現有趣的文件和目錄和管理員賬戶
這是在滲透測試中常見的任務,通常沒法手動完成。經常討論的Web應用程序的脆弱性有目錄列表,用戶賬戶枚舉,配置文件等。用Nmap的NSE可以更快的幫助我們完成這個任務。
nmap --script http-enum -p80 <target>

查找Lua腳本

進入Lua列表

指紋存儲在nselib/data/http-fingerprints.lua,事實上是LUA表格。若要顯示所有的存在頁面
nmap script http-enum http-enum.displayall -p80 <target>

指定不同的User Agent來繞過某些防火墻
nmap -p80 --script http-enum --script-args http.useragent=”Mozilla 5″<target>
也可以指定HTTP管道數目來加快掃描
nmap -p80 --script http-enum --script-args http.pipeline=25 <target>

暴力破解HTTP身份認證
很多家用路由器,IP網絡攝像頭,甚至是Web應用程序仍然依賴于HTTP認證,滲透測試人員需要嘗試弱密碼的單詞列表,以確保系統(tǒng)或用戶帳戶是安全的?,F在多虧了NSE腳本http-brute,我們可以對HTTP認證保護的資源執(zhí)行強大的字典攻擊。請參見下面的命令:
nmap -p80 --script http-brute --script-args http-brute.path=/admin/ <target>

http-brute腳本默認使用的是自帶的字典,如果要使用自定義的字典。
nmap -p80 --script http-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt <target>

http-brute支持不同的模式進行攻擊。
用戶模式:該模式下,對于userdb中的每個user,會嘗試passdb里面的每個password
nmap --script http-brute --script-args brute.mode=user <target>

密碼模式:該模式下,對于passdb中的每個password,會嘗試userdb里面的每個user。
nmap --script http-brute --script-args brute.mode=pass <target>

fcreds:此模式需要額外的參數brute.credfile。
nmap --script http-brute --script-args brute.mode=creds,brute.credfile=./creds.txt <target>
mod_userdir滲透測試
Apache的模塊UserDir提供了通過使用URI語法/~username/來訪問用戶目錄的方法。我們可以使用Nmap進行字典攻擊,確定web服務器上有效的用戶名列表。命令如下:nmap -p80 –script http-userdir-enum <target>

跟上面的腳本一樣,可以設置User Agent、HTTP管道參數。
測試默認憑據
通常情況下Web應用程序存在默認憑據,通過NSE很容易發(fā)現。
nmap -p80 --script http-default-accounts <target>
腳本通過查找已知路徑和已知的用戶密碼來登陸,依賴/nselib/data/http-default-accounts.nse存放的指紋文件。
WordPress審計
發(fā)現使用弱密碼賬戶安裝的wordpress,輸入如下命令:
nmap -p80 --script http-wordpress-brute <target>

設置線程的數量,使用腳本參數http-wordpress-brute.threads:
nmap -p80 --script http-wordpress-brute --script-args http-wordpressbrute.threads=5 <target>
如果服務器是虛擬主機,利用參數http-wordpressbrute設置主機字段:
nmap -p80 --script http-wordpress-brute --script-args http-
wordpressbrute.hostname=”ahostname.wordpress.com” <target>
設置一個不同的登陸URI,登錄使用參數http-wordpress-brute.uri:
nmap -p80 --script http-wordpress-brute --script-args http-wordpressbrute.uri=”/hidden-wp-login.php” <target>
要改變存儲的用戶名和密碼的POST變量的名稱,設置參數http-wordpress-brute.uservar和http-wordpress-brute.passvar:
nmap -p80 --script http-wordpress-brute --script-args http-wordpressbrute.uservar=usuario,http-wordpress-brute.passvar=pasguord <target>
Joomla審計
Joomla是在許多國家非常流行的cms,使用http-joomla-brute腳本來檢測弱密碼賬戶。
nmap -p80 --script http-joomla-brute <target>

Mark:Wordpress的方法也適用于Joomla。
檢測Web應用防火墻
要檢測web應用防火墻,使用如下命令:
nmap -p80 --script http-waf-detect <target>

正如你所見,這里的報錯信息顯示有mod_security

可以通過檢測響應內容的變化來檢測防火墻,推薦使用內容較少的頁面。
nmap -p80 --script http-waf-detect --script-args=”http-waf-detect.detectBodyChanges” <target>

使用更多的攻擊載荷:
nmap -p80 --script http-waf-detect --script-args=”http-waf-detect.aggro” <target>

檢測跨站跟蹤漏洞
當Web服務器存在跨站腳本漏洞,又啟用了TRACE方法,這樣就可以獲取啟用了HttpOnly的Cookie。如下命令檢測是否啟用TRACE。
nmap -p80 --script http-methods,http-trace --script-args http-methods.retest <target>

檢測跨站腳本漏洞
跨站腳本漏洞允許攻擊者執(zhí)行任意js代碼。檢測命令如下:
nmap -p80 --script http-unsafe-output-escaping <target>

該腳本http-unsafe-output-escaping是由Martin Holst Swende編寫,它會檢測基于用戶輸入的輸出可能出現的問題,該腳本發(fā)送以下內容到它發(fā)現的所有參數:ghz%3Ehzx%22zxc%27xcv
更多詳情,查閱:
http://nmap.org/nsedoc/scripts/http-phpself-xss.html
http://nmap.org/nsedoc/scripts/http-unsafe-output-escaping.html
檢測SQL注入
使用如下命令:
nmap -p80 --script http-sql-injection <target>

可以設置httpspider.maxpagecount來加快掃描的速度。
nmap -p80 --script http-sql-injection --script-args httpspider.maxpagecount=200 <target>
一個有趣的參數是httpspider.withinhost,它限制nmap只能爬取給定的主機。默認情況下是啟用的,如果為了爬行相關的站點可以禁用。
nmap -p80 --script http-sql-injection --script-args httpspider.withinhost=false <target>
可以找到的官方文檔庫。
同樣可以設置User Agent和HTTP管道的數目:
nmap -p80 --script http-sql-injection --script-args http.useragent=”Mozilla 42″ <target>
*參考來源:resources.infosecinstitute,FB小編東二門陳冠希編譯,轉載請注明來自FreeBuf黑客與極客(FreeBuf.COM)
版權聲明:本站文章來源標注為YINGSOO的內容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網站,禁止在非maisonbaluchon.cn所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內容來源于網友推薦、互聯(lián)網收集整理而來,僅供學習參考,不代表本站立場,如有內容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。
關注官方微信