
要讓 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(上下文)鎖定目標
- 打開 ZAP,在左側的 Sites 樹狀目錄中,找到你的網站。
- 右鍵點擊網站根目錄 -> Include in Context -> 選擇 New Context(或預設的 Default Context)。
- 這會打開 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 知道要用哪組帳密去登入管理介面。
- 在 Context 設定視窗中,點選 Users 頁面。
- 點擊 Add 新增一個使用者(例如:
admin)。 - 勾選 Enabled,並輸入管理員的
Username與Password。
步驟四:設定強制使用者模式(Forced User Mode)
這是最關鍵的一步,強迫 ZAP 的所有掃描工具(包含 Spider 和 Active Scan)都帶著這個身分去跑。
- 在 Context 設定視窗中,點選 Forced User 頁面。
- 在下拉選單中,選擇你剛剛在 步驟三 建立的那個使用者(
admin)。 - 點擊 OK 儲存並關閉 Context 設定視窗。
- 啟用強制模式:在 ZAP 主介面上方的工具列,找到一個「鎖頭搭配一個小人」的圖示(Forced User Mode),把它點擊下去(讓它呈現鎖定/啟用的狀態)。
步驟五:開始安全掃描
現在 ZAP 已經具備自動登入的能力了,你可以開始掃描管理介面:
- Spider(蜘蛛爬蟲):
- 在左側 Sites 樹狀目錄,右鍵點擊管理介面的資料夾(例如
/admin)。 - 選擇 Attack -> Spider…。
- 在彈出的視窗中,User 欄位記得選擇你設定的
admin,然後點擊 Start Scan。這時 ZAP 就會帶著登入身分去爬取所有管理員才能看到的頁面。
- 在左側 Sites 樹狀目錄,右鍵點擊管理介面的資料夾(例如
- Active Scan(主動掃描/弱點掃描):
- 爬蟲結束後,一樣右鍵點擊該目錄 -> Attack -> Active Scan…。
- 同樣確保 User 選擇
admin,點擊 Start Scan,ZAP 就會開始對管理介面進行漏洞狂轟猛炸。
💡 進階小撇步 (如果管理介面有驗證碼/雙因子認證 CAPTCHA / 2FA):
自動化工具通常無法破解驗證碼。如果遇到這種情況,建議改用 Replacer 功能 或 Scripting 直接把手動登入後取得的
Cookie或Bearer Token塞給 ZAP 瀏覽器,但缺點是 Token 過期就必須手動更新。
你在設定 Form-based Auth 的過程中,有遇到特定的登入阻礙(例如前端加密、Token 驗證)嗎?
