幾個月前,我向CloudFlare的漏洞獎勵計劃提交了一個貌似漏洞的東西。但根據他們的說法,我提交的并不算是一個安全問題,并表示對我“不予理睬”!
CloudFlare提供了一個JavaScript Worker系統,可以幫助開發人員在CloudFlare服務器端執行代碼。這個功能對于靜態站點和維護頁面來說是非常常用有的,而且對于滲透測試人員來說,也是一個大大的“寶藏”(無服務器C&C、簡易網絡釣魚代理等)。在這篇文章中,我們將跟大家探討如何繞過CloudFlare的Bot保護機制。
直奔主題
如果你曾嘗試使用Tor來訪問類似shodan.io這樣的網站,你就知道驗證碼會有多么煩人了!
首先,我們需要注冊一個域名,比如說免費的。tk域名就足夠了,然后用它來創建一個CloudFlare賬號。CloudFlare驗證了域名的有效性之后,我們還需要添加至少一條有效的DNS記錄并啟用代理模式。
接下來,我們需要創建一個JavaScript Worker來充當方向代理的角色(GitHub上提供了完整的代碼:https://github.com/jychp/cloudflare-bypass)。創建一個新的Worker,然后將copy/paste worker.js的內容拷貝進去,你可以自定義配置TOKEN_HEADER、TOKEN_VALUE、HOST_HEADER和IP_HEADER的值。
然后將路徑添加至你的Worker:proxy.domain.com/*。
現在,如果你嘗試訪問proxy.domain.com,你將會接收到“Welcome to NGINX.”。這里的JavaScript代碼其實很好理解,它將會查找特定的Header,然后將你的請求轉發至給定的域名。
代理的使用也非常簡單,我已經在我的【https://github.com/jychp/cloudflare-bypass】上給大家提供了一個Python封裝器,我們可以這樣使用它:
你可以嘗試對結果執行WHOIS查詢,你將會發現它是一個CloudFlare IP,很可能就是運行Worker的服務器。
此時,如果你嘗試通過Tor來向你的代理發送請求的話,你將會被屏蔽掉。因此,我們需要向我們的CloudFlare防火墻添加一條規則:
現在,你就可以使用Tor并在不需要任何驗證碼的情況下向你的代理發送請求了。
此時,你可以向任何使用了CloudFlare的網站發送請求。你還可以嘗試請求一個顯示了你Header的網站,你將會看到如下所示的信息:
正如你所見,X-FORWARDED-FOR可以用來發送任何的值,因此你可以在進行網絡資源爬取或者IP驗證的時候繞過服務器端的IP地址請求限制。源IP不會被轉發給目標站點,因此屏蔽你服務器發送請求的唯一方法就是過濾掉請求中的CF-WORKER Header。
不過根據CloudFlare的說法,這并不能算是一個安全漏洞:
因此,你將能夠使用免費的CloudFlare賬號每天發送無數次請求來爬取你所需要的資源了,好好享受吧!