您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何通過濫用SSL與TLS繞過Web應(yīng)用程序防火墻,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
近些年來,Web安全已經(jīng)逐漸變成了IT安全領(lǐng)域里非常重要的一個部分。Web應(yīng)用的優(yōu)勢就在于開發(fā)人員可以在較短的時間內(nèi)集成各種關(guān)鍵服務(wù),而且維護難度也比傳統(tǒng)的桌面端應(yīng)用程序要低很多。除了設(shè)計新的Web標(biāo)準(zhǔn)之外,企業(yè)對Web應(yīng)用的安全需求也在不斷變化。我們將跟大家介紹一種針對防火墻的新型繞過技術(shù)。
近期,我對某公司的網(wǎng)絡(luò)防火墻進行了測試,該公司所部署的基礎(chǔ)設(shè)施架構(gòu)如下:
當(dāng)我拿到我所需要的數(shù)據(jù)信息之后,我打算嘗試一些不同的繞過方法來對其基礎(chǔ)設(shè)施進行滲透測試。除了一些常規(guī)的WAF測試方法之外,我準(zhǔn)備利用SSL Cypher來繞過WAF。當(dāng)我第一次登錄WAF時,系統(tǒng)彈出了一個“Unsupported SSL Ciphers”警告信息,這就非常有意思了,查看了詳細(xì)的產(chǎn)品文檔之后,我獲取到了該設(shè)備支持的所有SSL Cypher,但是在開始之前我想跟大家簡單介紹一下SSL連接的工作機制。
SSL握手由下面三個主要步驟組成:
握手過程由客戶端發(fā)送的ClientHello消息開始,這條消息包含了服務(wù)器端需要的全部信息。服務(wù)器端受到連接消息之后會響應(yīng)一條ServerHello消息,其中包含了客戶端所需要的信息。除此之外,服務(wù)器還會返回需要使用到的相關(guān)Cypher套件版本以及SSL版本。
連接初始化完成之后,服務(wù)器需要向客戶端提供身份驗證信息,服務(wù)器會給客戶端發(fā)送SSL證書,客戶端會驗證證書的真實性,并確定是否可以信任該證書,然后繼續(xù)完成連接。
此時安全信道以建立成功,服務(wù)器和客戶端會交換用于加密和解密數(shù)據(jù)的密鑰。
我的攻擊思路如下:如果我使用一個“不被WAF支持”的SSL Cypher來跟目標(biāo)Web服務(wù)器進行初始化連接,而這個Web服務(wù)器實際上是支持這個Cypher版本的,那么WAF就無法識別我所進行的攻擊了,因為它無法查看到真實的請求數(shù)據(jù)。
因此,在查看了防火墻廠商所提供的詳細(xì)技術(shù)文檔之后,我提取出了所有支持的SSL Cypher,相關(guān)內(nèi)容如下所示。
SSL_RSA_WITH_NULL_MD5SSL_RSA_WITH_NULL_SHASSL_RSA_WITH_RC4_128_MD5SSL_RSA_WITH_RC4_128_SHASSL_RSA_WITH_DES_CBC_SHASSL_RSA_WITH_3DES_EDE_CBC_SHASSL_RSA_EXPORT_WITH_RC4_40_MD5SSL_RSA_EXPORT_WITH_DES40_CBC_SHA
TLS_RSA_WITH_NULL_SHA256TLS_RSA_WITH_AES_128_CBC_SHATLS_RSA_WITH_AES_256_CBC_SHATLS_RSA_EXPORT1024_WITH_RC4_56_MD5TLS_RSA_EXPORT1024_WITH_RC4_56_SHATLS_RSA_WITH_AES_128_CBC_SHA256TLS_RSA_WITH_AES_256_CBC_SHA256TLS_RSA_WITH_RC4_128_MD5= { 0x000x04 }TLS_RSA_WITH_RC4_128_SHA= { 0x000x05 }TLS_RSA_WITH_DES_CBC_SHA= { 0x000x09 }
接下來要做的就是識別目標(biāo)Web服務(wù)器所支持的SSL Cypher了,這一步有很多種方法可以實現(xiàn),但我選擇利用sslscan這款工具,因為它安裝起來比較簡單,而且還可以提供非常多的詳細(xì)數(shù)據(jù)。
pwn@thinkpad:~$sudo apt install sslscanReadingpackage lists... DoneBuildingdependency tree Readingstate information... DoneThefollowing NEW packages will be installed: sslscan0upgraded, 1 newly installed, 0 to remove and 0 not upgraded.Needto get 26,7 kB of archives.Afterthis operation, 81,9 kB of additional disk space will be used.Get:1http://al.archive.ubuntu.com/ubuntu bionic/universe amd64 sslscan amd641.11.5-rbsec-1.1 [26,7 kB]Fetched26,7 kB in 0s (73,8 kB/s) Selectingpreviously unselected package sslscan.(Readingdatabase ... 177002 files and directories currently installed.)Preparingto unpack .../sslscan_1.11.5-rbsec-1.1_amd64.deb ...Unpackingsslscan (1.11.5-rbsec-1.1) ...Processingtriggers for man-db (2.8.3-2) ...Settingup sslscan (1.11.5-rbsec-1.1) ...pwn@thinkpad:~$sslscan http://target/ | grep Accept
上述命令可以列舉出目標(biāo)Web服務(wù)器支持的所有SSL/TLS版本以及Cypher。通過將sslscan的掃描結(jié)果與產(chǎn)品文檔數(shù)據(jù)進行對比之后,我發(fā)現(xiàn)了Web應(yīng)用防火墻不支持但Web服務(wù)器支持的Cypher:
Accepted TLSv1 256 bits ECDHE-RSA-AES256-SHA
為了測試我的攻擊思路是否正確,我創(chuàng)建了一條WAF規(guī)則,它會屏蔽請求路徑為/ssl-cipher-test的網(wǎng)絡(luò)請求。
訪問這條路徑之后,連接便會被成功屏蔽:
利用這種繞過技術(shù)的最快方法就是指定客戶端所使用的Cypher,只留下一個就可以了。你可以利用curl的“—ciphers”命令來指定需要使用的Cypher,這里我指定使用ECDHE-RSA-AES256-SHA:
pwn@thinkpad:~$curl --ciphers ECDHE-RSA-AES256-SHA https://waf-test.lab.local/ssl-cipher-test<htmllang=en> <title>HELLO </title> <p>Bypass worked</p>pwn@thinkpad:~$
大家可以從響應(yīng)信息中看到,我們已經(jīng)成功繞過了Web應(yīng)用防火墻。
關(guān)于如何通過濫用SSL與TLS繞過Web應(yīng)用程序防火墻就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。