0x01 PHP核心配置講解
PHP_INI_*常量的定義
- PHP_INI_USER
該配置可在用戶的PHP腳本或window註冊表設置 - PHP_INI_PERDIR
該配置可在php.ini .htaccess或httpd.conf中設置 - PHP_INI _SYSTEM
該配置可在php.ini 或httpd.conf中設置
- PHP_INI _ALL
該配置可在任何地方設置 - PHP.INI ONLY
該配置僅可在php.ini中設置
register_globals(全局變量註冊開關)
- 設置爲on的情況下,會直接把用戶GET,POST等方式提交上來的參數設置爲全局變量並初始化爲參數對應的值,使得提交參數可以直接在腳本中使用
- php版本小於等於4.2.3時設置爲on,5.3.0被廢棄,php版本5.4.0時移除該項
allow_url_include(是否允許包含遠程文件)
- 當存在include(
$var
)且$var
可控時,可直接控制$var
變量來執行php代碼。此配置在php5.2.0後默認關閉。與之類似配置有allow_url_fopen,配置是否允許打開遠程文件
magic_quotes_gpc(魔術引號自動過濾)
- 配置爲on時,會自動在GET,POST,COOKIE變量中的 (單引號)’ 、(雙引號)" 、(反斜槓) \ 、空字符(NULL)的前面加上反斜槓()
但php5中的magic_quotes_gpc不會過濾$_SERVER變量,導致client-ip、referer一類漏洞能夠利用(如XFF注入) - PHP5.3後不推薦使用,PHP5.4後被取消
magic_quotes_runtime(魔術引號自動過濾)
- 與前面一個函數相似,但區別是它只對從數據庫或文件中獲取的數據進行過濾,同樣在PHP5,4後取消
magic_quotes_sybase(魔術引號自動過濾)
- 爲on時,會覆蓋magic_quotes_gpc的配置,與gpc配置類似,但此配置僅僅轉義空字符和把單引號變成雙引號,也在5.4版本移除
safe_mode(安全模式)
- 一種安全機制,php5.4後取消
- 爲on時
- 所有文件操作函數(如unlink()、file()、include())等都受限制
- 通過函數popen(),system()以及exec()等函數執行命令或程序會提示錯誤
open_basedir PHP可訪問目錄
- 用來限制php只能訪問哪些目錄,若需加載外部腳本,需把腳本路徑加到open_basedir指令中,多個目錄以分號分割,例如:open_basedir=/www/a/
- 在<=php5.2.3時是PHP_INI _SYSTEM,大於時爲PHP_INI _ALL
disable_function(禁用函數)
- 禁用一些敏感函數使用,配置範圍是php.ini only
display_errors和error_reporting錯誤顯示
- 第一個表示是否顯示php腳本內部錯誤,爲on時,還可配置指令error_reporting,這個選項用來配置錯誤顯示的級別
審計輔助工具
代碼編輯器
- notepad++
代碼審計工具
- Seay源代碼審計系統(php)
- Fortify SCA(收費的,但是支持最多編程語言的審計軟件)
- RIPS(php)
…… - 除此之外的審計工具在小迪寫的文章裏總結的比較好
https://t.zsxq.com/fMfuNJa
審計思路
- 根據敏感關鍵詞回溯參數傳遞過程
- 查找可控變量,正向追蹤變量傳遞過程
- 尋找敏感功能點,通讀功能點代碼
- 直接通讀全文代碼