設定完成後 · 約 5 分鐘
驗證方法:確認 WAF 已擋下 php2shell
不需要寫程式。最簡單的方法只要一個瀏覽器:送出一個帶有漏洞特徵的表單,看 WAF 是否回應阻擋頁,再到設備上用 Support ID 查詢。
測試前
- 只對您有權限測試的網站進行。正式環境請在維護時段測試,並先通知監控單位。
- 測試的網址是經過 WAF 的網站網址,不是後端主機的位址。
- 測試內容只帶有漏洞的特徵欄位,不含攻擊程式碼,不會影響網站運作。
方法 A 瀏覽器測試頁(建議)
- 用文字編輯器開啟
php2shell_waf_test_page.html。 - 把
<form action="https://www.example.com/index.php"的網址,改成要測試的 PHP 網址。 - 用瀏覽器直接開啟這個檔案。不需要把檔案放到網站上。
- 按「送出測試」。
出現下面的阻擋頁,表示 WAF 已擋下。請記下 Support ID。
如果看到網站的回應內容,表示請求已經送到 PHP,WAF 沒有阻擋。請回到 設定步驟 2 檢查。
方法 B curl 指令
把網址換成要測試的 PHP 網址。第一行是一般表單,應該正常回應;第二行帶有漏洞特徵,應該被擋。
# 1) normal form: must pass through the WAF curl -s -X POST -F "note=test" https://www.example.com/index.php # 2) php2shell indicator: must be blocked curl -s -X POST -F "PHP_SESSION_UPLOAD_PROGRESS=waftest" -F "note=test" https://www.example.com/index.php
第二行被擋時,回應內容會包含:
The requested URL was rejected. Please consult with your administrator. Your support ID is: (a long number)
方法 A、B 只會觸發 200204113另外 2 個 signature 是否生效,請在 policy 中確認 3 個都是 Enforced(設定步驟 2),或用下方的完整測試 script。安裝 ASU 20261022 後回到 Staging 的 200103697、200204115,用方法 A、B 測不出來。
在設備上確認
用阻擋頁上的 Support ID,確認是 php2shell 的 signature 擋下。
GUI 路徑Security ›› Event Logs : Application : Requests
1
按漏斗圖示,在 Support ID 輸入號碼,按 Apply
2
確認 Request Status 是 Blocked,violation 包含 Attack signature detected
3
展開 Attack signature detected 的 Occurrence,確認名稱是 PHP Remote Code Execution
結果判讀
| 看到的結果 | 代表什麼 | 處理方式 |
|---|---|---|
| 一般表單也被擋 | 新規則誤擋 | 依 Event Log 的 violation 調整,不要直接關閉 signature |
| 特徵表單沒有被擋 | signature 不在 policy、仍在 staging,或 policy 不是 Blocking | 回到 設定步驟 2 檢查 |
| 回應不是阻擋頁,也不是網站內容 | 可能有 CDN 或其他設備先處理,或使用自訂阻擋頁 | 在 Event Log 用時間與來源 IP 查詢 |
| Event Log 查不到 Support ID | 請求沒有經過這台 BIG-IP | 確認 DNS 與連線路徑 |
進階:完整測試 script
需要更完整的驗證時,可使用 GitHub 上的 Python script(Python 3.6 以上,不需安裝套件)。它會同時送出正常請求與多種漏洞特徵,並判讀每一項的結果。
python3 php2shell_waf_test.py https://www.example.com/index.php
只完成 3 個 signature 的設定時,部分項目不會被擋。這是預期結果,那些項目對應 F5 的選用設定。lab 實測 ASU 20261022:A1、A2 由 200204113 擋下,A4 由 200103697 擋下,A5 由 200204115 擋下。說明見 README。
需要協助時,請聯絡您的業務窗口。回到公告