讓 ZAP掃瞄登入管理後台的指南

要讓 OWASP ZAP 成功掃描登入後的管理介面,最關鍵的任務就是讓 ZAP 掌握身分驗證機制,不然它爬到一半被系統踢登出,掃描就等於白做了。

在 Docker 環境中執行 ZAP,主要有兩種方式,一種是透過瀏覽器操作圖形介面,另一種是直接用指令跑自動化掃描。既然需要設定登入資訊這麼複雜的操作,強烈建議使用第一種圖形介面,操作起來就跟在本機裝軟體一模一樣。

以下是完整的設定與執行步驟。


方法一:啟動 Web Swing 圖形介面(推薦,方便設定登入)

Docker 版本的 ZAP 內建了 Web Swing 功能,可以把 GUI 畫面渲染到網頁上。

1. 執行 Docker 指令

打開你的終端機(Terminal 或 PowerShell),輸入以下指令:

Bash

docker run -u zap -p 8080:8080 -p 8090:8090 -i owasp/zap2twig:latest zap-webswing.sh

📌 參數解析:

  • -p 8080:8080:ZAP Web 界面的連接埠(透過瀏覽器訪問)。
  • -p 8090:8090:ZAP 本身的 Proxy 連接埠。
  • owasp/zap2twig:latest:這是包含完整週邊工具的 ZAP 映像檔。

2. 開啟瀏覽器操作

指令跑起來後,打開你本機的瀏覽器,輸入以下網址:

👉 http://localhost:8080/zap/

你就會在網頁裡看到完整的 ZAP 操作視窗。接下來,你就可以按照前面教的步驟去設定 Context、Authentication 和 Users。

方法二:使用命令列 (CLI) 進行自動化掃描

如果你已經把登入的設定檔匯出成 .context 檔案,或者管理介面可以單靠 Token 驗證,你也可以直接用指令讓 Docker 裡的 ZAP 跑完就結束。

執行 Baseline Scan(基本弱點掃描)指令:

Bash

docker run -t owasp/zap2twig:latest zap-baseline.py -t https://your-target-site.com

⚠️ Docker 環境下的關鍵注意事項(非常重要)

當 ZAP 住在 Docker 容器裡時,有兩個常見的「坑」需要注意:

1. 目標網站也在你的本機 (Localhost) 嗎?

如果你的管理介面網站也是用 Docker 跑在本機,或是跑在本機的 http://localhost:3000

  • 不能在 ZAP 裡面填 localhost,因為對 ZAP 容器來說,localhost 指的是 ZAP 自己。
  • 解決方法:將網址改為 http://host.docker.internal:3000/,這樣 ZAP 才能穿透容器存取到你本機的服務。

2. 資料如何儲存與匯出?

Docker 容器一旦關閉,裡面的設定和掃描報告就會消失。如果你想把掃描報告存回本機電腦,必須掛載資料夾(Volume):

Bash

# 在指令中加入 -v 參數,將本機的資料夾與容器內同步
docker run -u zap -v /path/to/your/local/dir:/home/zap/reports:rw -p 8080:8080 -i owasp/zap2twig:latest zap-webswing.sh

你的管理介面網站目前是部署在雲端測試機,還是也同樣跑在你的本機 Docker 環境中呢?


要讓 OWASP ZAMP (Zed Attack Proxy) 成功掃描「登入後」的管理介面,核心關鍵在於讓 ZAP 掌握身分驗證(Authentication)機制,這樣它才不會在掃描到一半時因 Session 過期而被踢登出。

以下是實現這個目標最完整、最推崇的設定流程:

步驟一:使用 Context(上下文)鎖定目標

  1. 打開 ZAP,在左側的 Sites 樹狀目錄中,找到你的網站。
  2. 右鍵點擊網站根目錄 -> Include in Context -> 選擇 New Context(或預設的 Default Context)。
  3. 這會打開 Context 設定視窗。在 In Scope 頁面中,確保你的網站 URL 已被勾選。

步驟二:錄製登入步驟並設定登入指標

ZAP 需要知道「怎麼登入」以及「怎麼判斷目前是登入還是登出狀態」。

1. 錄製登入請求

  • 建議使用 ZAP 內建的瀏覽器(點擊右上角的瀏覽器圖示,如 Chrome/Firefox)手動操作一次登入。
  • 登入成功後,回到 ZAP 的 History 標籤頁。
  • 找到那筆發送帳號密碼的 POST 請求(通常是 /login/auth)。
  • 右鍵點擊該請求 -> Flag as Context -> 選擇你的 Context -> Form-based Auth Login Request

2. 設定登出指標(Logged Out Indicator)

ZAP 在掃描時如果看到特定的字眼,就知道自己被踢登出了(必須重新登入)。

  • 在剛剛內建瀏覽器的畫面上,找到「登出後才會出現的文字」(例如:請先登入Login帳號或密碼錯誤)。
  • 在 ZAP 的 Context 設定視窗中,切換到 Authentication 頁面。
  • 將驗證方法改為 Form-based Authentication(如果剛剛有正確 Flag,這裡會自動帶入登入 URL 和參數)。
  • 在下方 Logged Out Indicator 欄位中,填入剛剛找到的登出關鍵字(支援正則表達式,例如:.*請先登入.*)。

步驟三:設定使用者憑證(Users)

讓 ZAP 知道要用哪組帳密去登入管理介面。

  1. 在 Context 設定視窗中,點選 Users 頁面。
  2. 點擊 Add 新增一個使用者(例如:admin)。
  3. 勾選 Enabled,並輸入管理員的 UsernamePassword

步驟四:設定強制使用者模式(Forced User Mode)

這是最關鍵的一步,強迫 ZAP 的所有掃描工具(包含 Spider 和 Active Scan)都帶著這個身分去跑。

  1. 在 Context 設定視窗中,點選 Forced User 頁面。
  2. 在下拉選單中,選擇你剛剛在 步驟三 建立的那個使用者(admin)。
  3. 點擊 OK 儲存並關閉 Context 設定視窗。
  4. 啟用強制模式:在 ZAP 主介面上方的工具列,找到一個「鎖頭搭配一個小人」的圖示(Forced User Mode),把它點擊下去(讓它呈現鎖定/啟用的狀態)。

步驟五:開始安全掃描

現在 ZAP 已經具備自動登入的能力了,你可以開始掃描管理介面:

  1. Spider(蜘蛛爬蟲)
    • 在左側 Sites 樹狀目錄,右鍵點擊管理介面的資料夾(例如 /admin)。
    • 選擇 Attack -> Spider…
    • 在彈出的視窗中,User 欄位記得選擇你設定的 admin,然後點擊 Start Scan。這時 ZAP 就會帶著登入身分去爬取所有管理員才能看到的頁面。
  2. Active Scan(主動掃描/弱點掃描)
    • 爬蟲結束後,一樣右鍵點擊該目錄 -> Attack -> Active Scan…
    • 同樣確保 User 選擇 admin,點擊 Start Scan,ZAP 就會開始對管理介面進行漏洞狂轟猛炸。

💡 進階小撇步 (如果管理介面有驗證碼/雙因子認證 CAPTCHA / 2FA):

自動化工具通常無法破解驗證碼。如果遇到這種情況,建議改用 Replacer 功能Scripting 直接把手動登入後取得的 CookieBearer Token 塞給 ZAP 瀏覽器,但缺點是 Token 過期就必須手動更新。

你在設定 Form-based Auth 的過程中,有遇到特定的登入阻礙(例如前端加密、Token 驗證)嗎?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *