在滲透測試或 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 格式錯誤,且帶有 AWSS3Bucket 等關鍵字,這就是強烈的訊號。
  • 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):

  1. 下載 AWS IP Ranges JSON 文件。
  2. 篩選出 regionus-east-1 的項目。
  3. 進一步篩選 serviceEC2 的項目(因為 Web Server 通常跑在 EC2 上)。
  4. 提取出所有的 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。