利用源服務器IP地址繞過Cloudflare WAF
文章來源:安全先師
Cloudflare是一個應用廣泛的web應用防火牆(WAF)的提供商。如果能在一秒內繞過所有防護措施,讓WAF毫無用處,會怎么樣呢?這篇文章會教你利用源服務器的IP地址繞過Cloudflare WAF。注意,以下方法可能適用於繞過任何類型的WAF。
簡介
Cloudflare WAF是目前最流行的web應用防火牆之一,防護着超過1600萬個網絡資產。一年前Cloudflare發布了一個快速DNS resolver,並很快成為它們最受歡迎的產品。WAF作為一個反向代理服務器,不僅可以抗DDoS攻擊,還可以在檢測到攻擊時觸發告警。付費版本的用戶還可以選擇開啟防護SQL注入、XSS、CSRF等常見漏洞攻擊,但必須要手動啟動。免費版本不支持這個功能。
雖然該WAF很擅長於阻擋基礎的攻擊載荷,但已經有很多繞過Cloudflare WAF的方法,而且每天都會出現新的,所以持續測試Cloudflare防火牆的安全性十分重要。就在我寫這篇文章的時候:
很明顯繞過防火牆是一件有意思的事情。基本上你有三種選擇:
1.自定義攻擊載荷來繞過防火牆規則。這可以提高你的防火牆繞過技術,但這是一個沉悶且耗時的過程,對於bug賞金獵人來說這是划不來的,因為時間就是金錢!如果你選擇這種方法,最好嘗試些PayloadsAllTheThings上列出的載荷,或者在百度上搜索下。
2.以適當的方式更改請求來破壞服務器。和第一種選擇一樣,這會很耗時,還要有耐心和良好的fuzzing技術。
3.通過查找Web服務器的原始IP來繞過Cloudflare。這也許是最簡單的方法,不需要專業技術,作為偵察階段的一部分也不會浪費時間。一旦你掌握了這個方法,你就再也不用擔心WAF或DDoS保護(速率限制)。
本文中,我將重點介紹最后一種方法,以及如何根據獲得的提示來實現它。
提示:Cloudflare是一個必須由人設置的工具,通常是研發或系統管理員。通過使用下文的方式導致配置錯誤產生的有效攻擊,Cloudflare不會負責。
首先,偵察!
開始正常的偵察過程,獲得盡可能多的IP地址(主機、nslookup域名解析服務器、whois服務器、BGP路由),然后檢查哪些服務器有可用的web服務(netcat、nmap、masscan等工具)。一旦你有了web服務器的IP地址列表,下一步就是檢查這些服務器是否配置了保護域作為虛擬主機。如果沒有,你將會獲得默認服務器頁面或默認網站配置,這樣你就找到了入口!使用Burp:
這是我想要的子域名,但是IP地址不正確:
這是錯誤的子域名,但有合適的IP地址:
這是我想要的子域名,而且有合適的IP地址——完美!
一些可以自動偵察的工具:
https://pentest-tools.com/information-gathering/find-virtual-hosts
https://github.com/jobertabma/virtual-host-discovery
https://github.com/gwen001/vhost-brute
Censys
如果你的攻擊目標使用了SSL證書(使用SSL是必須的),而且是在Censys數據庫已注冊的(我強烈建議去買一個)。在Censys選擇輸入時選擇“證書”,提供你目標服務器的域名,點擊回車。
你會看到適用於你目標的證書列表:
點擊每個結果顯示詳細信息,在最右側的搜索菜單中選擇“IPv4主機”:
可以看到使用該證書的服務器IP地址:
從這里開始,獲取所有你可以獲取的IP,然后回到上一章,嘗試通過所有IP訪問你的目標。
郵件頭
下一步,檢查你的目標服務器發出的郵件頭:訂閱新聞,創建用戶,使用“忘記密碼”功能,訂購……盡你所能從測試網站獲得一封郵件(提醒一下可以使用Burp)。
得到郵件后,檢查郵件源文件,特別是郵件頭。記錄可以找到的所有可能屬於一個服務器的IP和子域名。再一次,嘗試通過這些訪問你的目標。
我在郵件頭Return-Path里找到了一些信息:
用Curl測試:
另一個技巧是將郵件從你自己的郵箱發送到不存在的電子郵件地址@yourtarget.com。如果發送失敗,你應該會收到一個通知。
XML-RPC廣播
XML-RPC(遠程過程調用)是一個在WordPress博客平台很有名的工具——允許管理員使用XML請求遠程管理其博客。ping包是ping命令的響應包。A發送ping請求到B,B回復A收到了請求,即回復一個ping包。
訪問https://www.target.com/xmlrpc.php可以輕松知道目標服務器是否啟用了XML-RPC廣播,啟用的情況下會返回信息:XML-RPC server accepts POST requests only。
根據WordPress XML-RPC Pingback API文檔,該功能有sourceUri和targetUri兩個參數。在Burp Suite中可以看到:
以前的發現
如果你用上述方法沒有找到原始IP,或者之前的目標網站設置了保護措施,記住,有時候你最好的朋友就是目標自己,它會給你想要的信息。
你需要的就是讓目標web服務器發送請求到你的服務器。利用SSRF、XXE、XSS等其他類型的漏洞,注入包含你服務器地址的載荷並查看日志。如果命中再檢查虛擬主機。
甚至是像重定向或HTML/CSS注入等這些最簡單的漏洞,如果被應用web服務器解析就會派上用場。
工具
現在我們已經知道怎樣手動尋找IP地址,下面是一些工具可以幫助你節省寶貴的時間。你可以在探測Cloudflare保護機制時用這些工具進行偵察。
記住,沒有100%管用的方法,因為攻擊目標的不同,適用於某個的不一定適用於另一個。我的建議:都試試。
Cloudsnare.py:censys證書(需要密鑰)
HatCloud:crimeflare,pinfo.io
https://github.com/HatBashBR/HatCloud
CrimeFlare:crimeflare,ipinfo.io
https://github.com/vincentcox/bypass-firewalls-by-DNS-history
bypass-firewalls-by-DNS-history:securitytrails,crimeflare
https://github.com/vincentcox/bypass-firewalls-by-DNS-history
CloudFail:dnsdumpster,crimeflare,子域名暴力攻擊
https://github.com/m0rtem/CloudFail
CloudFlair:需要censys密鑰
https://github.com/christophetd/CloudFlair
CloudIP:nslookup一些子域名(ftp,cPanel,mail,direct,direct-connect,webmail,portal)
https://github.com/Top-Hat-Sec/thsosrtl/blob/master/CloudIP/cloudip.sh
DNS資源
你也許明白,最重要的事是獲取盡可能多的IP地址——不論方法,不論地點。DNS服務器當然是主要關注點,特別是其歷史信息會一直存在於網絡中。下面是一些很好用的DNS資源:
Netcraft::https://toolbar.netcraft.com/site_report?url=
dns-trails:https://securitytrails.com/dns-trails
DNSQueries:https://www.dnsqueries.com/en/domain_check.php
DNSdumpster:https://dnsdumpster.com/
Shodan:https://www.shodan.io/search?query=
以往關於Hackerone的案例報告:
https://hackerone.com/reports/255978
https://hackerone.com/reports/360825
https://hackerone.com/reports/315838
總結
正如我們在安全產業常說的:一根鏈條的堅固程度取決於它最薄弱的一環。無論你花多少時間去配置Cloudflare,如果它可以被繞過,如果你的web應用可以直接通過服務器IP連接。那么Cloudflare的所有保護機制都將被繞過。
如侵權請私聊公眾號刪文