在滲透測試或 Bug Bounty 的過程中,Cloudflare 往往是一道難以跨越的牆。它能有效地隱藏原始伺服器(Origin Server)的 IP 地址,擋下大部分的惡意流量。然而,如果系統管理員配置不當,原始伺服器其實就暴露在公開網路上。
本文將深入探討一種進階偵查技術:當目標網站託管於 AWS 環境時,如何透過分析與掃描 AWS 的公開 IP 範圍,揪出隱藏在 WAF 背後的真實 IP。
為什麼這招有效?
很多企業雖然使用了 Cloudflare 作為前端防護,但後端伺服器(例如 AWS EC2)的防火牆規則(Security Group)卻沒有嚴格限制「只允許 Cloudflare 的 IP 連線」。
如果攻擊者能直接找到後端伺服器的 IP,就能繞過所有的 WAF 防護規則、速率限制(Rate Limiting)以及機器人驗證。這篇文章的核心思路,就是利用 AWS 公開的龐大 IP 資料庫,透過過濾與掃描,大海撈針找出那個「漏網之魚」。
偵查階段:尋找 AWS 的蛛絲馬跡
在開始掃描之前,我們需要確認目標是否真的託管在 AWS 上。盲目掃描是沒有效率的。通常我們可以透過以下幾個特徵來判斷:
- 錯誤頁面指紋:當網站出現 404 或 403 錯誤時,觀察回應內容。如果是標準的 XML 格式錯誤,且帶有
AWS、S3或Bucket等關鍵字,這就是強烈的訊號。 - HTTP Header:檢查 Response Header 中的
Server欄位,是否包含AmazonS3或類似字樣。 - 子網域指向:有時候主網域經過 Cloudflare,但某些開發用的子網域(如
dev.target.com)直接指向了 AWS 的 CNAME。
一旦確認目標與 AWS 有關,我們就可以進入下個階段:鎖定 IP 範圍。
獲取並篩選 AWS IP 範圍
Amazon Web Services 會定期公開其所有服務的 IP 地址範圍(JSON 格式)。這是我們攻擊路徑的基礎數據。
我們不需要掃描整個 AWS 網路(那太大了),關鍵在於「過濾」。通常,大約 90% 的雲端資源都集中在 us-east-1(北維吉尼亞)這個區域,這是一個極佳的起始點。
你需要執行以下邏輯(可以使用 jq 等工具處理 JSON):
- 下載 AWS IP Ranges JSON 文件。
- 篩選出
region為us-east-1的項目。 - 進一步篩選
service為EC2的項目(因為 Web Server 通常跑在 EC2 上)。 - 提取出所有的 IP 前綴(CIDR)。
執行掃描:大海撈針
有了 IP 列表後,下一步就是驗證「哪一個 IP 是我們的目標」。
這時候不能只看 Port 是否開啟,我們需要驗證該 IP 對於我們目標 Domain 的回應是否正確。這裡推薦使用支援大量併發掃描的工具(如 httpx 或自行撰寫的腳本)。
掃描核心邏輯:
對每一個篩選出的 AWS IP 地址,發送一個 HTTP 請求,並強制將 Host Header 設定為目標網域(例如 target.com)。
Bash
# 概念性指令(使用 curl 模擬)
curl -H "Host: target.com" https://<AWS_IP_ADDRESS> -k
驗證與結果分析
在掃描數千甚至數萬個 IP 後,你需要過濾出有效的結果。能夠繞過 Cloudflare 的原始 IP 通常會符合以下特徵:
- SSL 憑證相符:該 IP 上的 443 Port 回傳了包含
target.com的 SSL 憑證。 - 內容長度一致:該 IP 回傳的 HTML 內容長度(Content-Length)與你直接訪問
target.com時非常接近。 - HTML 標題相同:網頁的
<title>標籤內容完全一致。 - Hash 比對:計算回應內容的 Hash 值(如 SimHash),如果相似度極高,幾乎可以確定就是原始 IP。
注意誤報(False Positives):
在 AWS 環境中,有時你會掃到「Default Server」或是反向代理的預設頁面,這些雖然開放了 443 Port,但回傳的不是目標網站的內容。因此,透過 Host Header 進行驗證並比對回應內容是絕對必要的步驟。
防禦建議:如何修補此漏洞
如果你是防守方,看到這裡應該背脊發涼。要防禦這種掃描,方法其實很簡單但常被忽略:
嚴格限制來源 IP(Allowlisting)
在 AWS EC2 的 Security Group(安全組)或 Network ACL 中,設定 Inbound Rules(入站規則)。只允許 Cloudflare 的 IP 範圍 存取你的 HTTP (80) 和 HTTPS (443) Port。
Cloudflare 官方有提供其 IP 列表,你應該拒絕所有非 Cloudflare 的直接連線。這樣一來,即使攻擊者掃描到了你的真實 IP,也無法建立連線,掃描器只會收到 Timeout。

