PHPWind(簡稱 PW)論壇系統的後台操作日誌文件 data/bbscache/admin_record.php 用於記錄管理員登入與操作記錄。系統在初始化時會檢查該文件是否存在,若不存在則自動創建並寫入 <?php die;?> 以防止直接訪問。
攻擊者若能以寫入權限修改該文件,刪除或註釋掉 die(); 語句,即可繞過保護機制。更進一步,後台登入失敗時會將記錄以管道符分隔寫入該文件,格式如:
|admin|s|Logging Failed|127.0.0.1|1191667510|
雖然系統過濾了 < 字符,但攻擊者可利用 PHP 註釋符將原有代碼「註釋掉」,例如將 <?php die;?> 改為 <?php /*die;?>,隨後在登入失敗記錄中注入惡意代碼,實現持久化後門。
data/bbscache/ 目錄對 Web 進程不可寫,或將日誌文件存放於 Web 根目錄之外。php.ini 中禁用 eval、assert 等高風險函數,降低注入利用價值。此漏洞屬於典型的「文件寫入繞過執行保護」案例,核心在於信任了可寫入目錄下的 PHP 文件不會被篡改。開發者應遵循「最小權限原則」,將緩存、日誌、上傳等可寫目錄完全隔離於代碼執行環境之外,並對所有寫入文件的內容實施白名單過濾。