代碼審計學習筆記

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

審計思路

  1. 根據敏感關鍵詞回溯參數傳遞過程
  2. 查找可控變量,正向追蹤變量傳遞過程
  3. 尋找敏感功能點,通讀功能點代碼
  4. 直接通讀全文代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章