首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 代碼審計進階指南:擴展漏洞挖掘字典與非常規技巧

     編輯:PHP 相關知識

前言

PHP 廣泛用於 Web 開發,代碼審計已成安全必要環節。傳統靜態分析依賴危險函數字典(grep 關鍵字),但大型專案常被掃描多輪,明顯漏洞已修補。本文分享非傳統技巧以發掘新漏洞類型。

影響審計的因素

  • PHP 版本:4.x (68%)、5.x (32%)、6.x 測試中。舊版未修補漏洞是重點。
  • 作業系統:Win/*nix 路徑分隔、大小寫敏感度不同。
  • Web Server:IIS/Apache 模組差異導致變數來源不同 (如 $_SERVER)。

擴展字典:五大非常規漏洞類型

1. 變數鍵名注入

foreach($_GET as $k=>$v) echo $k; 若直接輸出 $k 導致 XSS。鍵名同屬使用者輸入,須納入審計範圍。

2. 變數覆蓋

  • foreach($_GET as $k=>$v) $$k=$v; (Discuz、DedeCMS 早期通用)
  • parse_str($_SERVER['QUERY_STRING']) 可覆蓋任意變數,甚至陣列鍵名注入 = 字元。
  • import_request_variables('GPC') 可汙染 $_SERVER 等超全域陣列。

3. magic_quotes_gpc 繞過與副作用

  • 不保護 $_SERVER、getenv()、php://input、SQL IN/ORDER BY 子句。
  • 寬字節注入、substr 截斷產生單引號/反斜線逃逸。
  • 編解碼函數 (base64, urlencode, iconv, unserialize) 可隱藏 Payload 繞過 WAF。

4. 代碼注入

危險函數:eval, preg_replace/e, assert, call_user_func*, create_function, 變數函數。雙引號內變數解析特性 ("$var") 亦可導致注入。

5. PHP 內建函數缺陷

  • 溢出漏洞:關注 Month of PHP Bugs 類歷史漏洞 (如 unserialize)。
  • session_destroy() 任意檔案刪除:PHP 5.1.2 透過 PHPSESSID=../evil.php 刪除任意檔。
  • 隨機數預測:
    • rand() 最大 32767 (Windows),極易暴力破解。
    • mt_rand() 種子空間 2^32,若種子可知 (如 mt_srand(microtime()*1e6)) 可逆向推導後續隨機數。
    • 跨應用攻擊:同一 Process 共享種子,可從 A 應用洩露的隨機數推導 B 應用的密碼重設 Token。

6. 特殊字元截斷

  • %00 截斷 include 後綴;? 偽截斷;超長路徑截斷 (Win 260, *nix 4096)。
  • MySQL sql_mode 非嚴格模式下長字串截斷導致重複帳號註冊。
  • UTF-8 非法字節 (0xC1) 導致資料截斷繞過唯一性檢查。
  • Windows 檔名忽略尾部空格/點、<>Pp 等特殊字元可繞過副檔名檢查。

如何持續發掘新字典

  1. 分析公開漏洞/Exp,歸納類型。
  2. 研讀 PHP 手冊與原始碼,挖掘危險函數特性。
  3. Fuzzing 內建函數尋找邏輯缺陷。
  4. 與開發者交流,了解業務實作盲點。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved