PHP審計基礎

2022-05-07 13:09:09 字數 3051 閱讀 9659

php核心配置

register_globals

全域性變數註冊開關

設定為on時,把get/post的變數註冊成全域性變數

php 5.4.0中移除

allow_url_include

包含遠端檔案

設定為on時,可包含遠端檔案

php 5.2後預設為off

allow_url_fopen 

開啟遠端檔案

magic_quotes_gpc

魔術引號自動過濾

設定為on時,自動在get/post/cookie變數中',",\,null的前面加上\

php5不會過濾$_server變數,php5.4以後移除

magic_quotes_runtime

魔術引號自動過濾

與mq_gpc的區別:mq_runtime只過濾從資料庫/檔案中獲取的資料

php5.4以後移除

magic_quotes_sybase

魔術引號自動過濾

會覆蓋掉_gpc;僅僅轉義null和把'替換成"

php5.4以後移除

safe_mode

安全模式

聯動配置指令有很多;......

php5.4以後移除

open_basedir

php可訪問目錄

用;分割多個目錄,且以字首而非目錄劃分

php5.2.3以後範圍時php_ini_all

disable_functions

禁用函式

如果使用此指令,切記把dl()函式也加入到禁用列表

display_errors/error_reporting

錯誤顯示

d_errors為off時,關閉錯誤回顯,為on時,可配置e_reporting,等級制

。。。審計思路

1)敏感關鍵字

2)可控變數

3)敏感功能點

4)通讀**

sql注入

經常出現在登入頁面/獲取http頭/訂單處理等地方。

防範1.addslashes函式

過濾的值範圍和_gpc時一樣的

2.mysql_[real_]escape_string函式

在php 4.0.3以上,\x00 \n \r \ ' " \xla受影響

3.intval等字元轉化

上面提到的過濾方式,對int型別注入效果並不好。

4.pdo prepare預編譯

xss漏洞

輸出函式:print/print_r/echo/var_dump/printf/sprintf/die/var_export

csrf漏洞

csrf主要用於越權操作,所以漏洞自然在有許可權控制的地方,像管理後台/會員中心/論壇帖子以及交易管理等。

黑盒挖掘經驗:開啟幾個有非靜態操作的頁面,抓包看看有沒有token,如果沒有的話,再直接請求(不帶referer)這個頁面,如果返回的資料還是一樣的話,那說明很有可能有cstf漏洞了。

檔案包含漏洞

include/include_once/require/require_once

檔案包含漏洞大多出現在模組載入/模板載入以及cache呼叫的地方,比如傳入的模組名引數,實際上是直接把這個拼接到了包含檔案的路徑中。

檔案包含截斷:

1.%00;受限於gpc和addslashes,php5.3之後被修復。

2.././....;不受限gpc,同樣在php5.3之後被修復。windows下240個.或者./能夠截斷,linux2038個./組合才能截斷

檔案上傳漏洞

move_uploaded_file

1.未過濾或本地過濾

2.黑名單拓展名過濾

3.檔案頭/content-type驗證繞過

**執行漏洞

eval/assert/preg_replace/call_user_func/call_user_func_array/array_map等,還有php東陶函式$a($b)

preg_replace:讀字串進行正則處理,當pattern部分帶/e修飾符時,replacement的值會被當成php**執行。

call_user_func和array_map等數十個函式...

命令執行漏洞

system/exec/shell_exec/passthru/pcntl_exec/popen/proc_open/另外``實際上時呼叫shell_exec函式

system/exec/shell_exec/passthru會執行命令並直接回顯結果

pcntl_exec:pcntl是php的多程序處理拓展,在處理大量任務的情況下會使用到

popen/prc_open不會直接回顯結果,而是返回乙個檔案指標:popen('whoami >> d:2.txt','r')

變數覆蓋漏洞

extract/parse_str,import_request_variables則是用在沒有開啟全域性變數註冊的時候,呼叫這個函式則相當於開啟了全部變數這側,php5.4以後被取消。

extract需要一定條件,沒有第二個引數或者第二個引數extract_type為extr_overwrite/extr_if_exists時,可覆蓋。

parse_str直接覆蓋

import_request_variables把get/post/cookie的引數註冊成變數,用在register_globals被禁止時,需要php4.1~5.4。

業務邏輯漏洞

邏輯漏洞很大,這裡單說業務邏輯上面的漏洞。

支付/找回密碼/程式安裝等。

挖掘經驗:通讀**,理解業務流程。

值得關注的點:程式是否可重複安裝/修改密碼處是否可越權修改其他使用者密碼/找回密碼驗證碼是否可暴力破解以及修改其他使用者密碼/cookie是否可**/cookie驗證是否可繞過等。

php審計基礎四 變數覆蓋

1 extract 函式 extract 函式從陣列中將變數匯入到當前的符號表。該函式使用陣列鍵名作為變數名,使用陣列鍵值作為變數值。針對陣列中的每個元素,將在當前符號表中建立對應的乙個變數。當 是 b 3 a array b 1 extract a print r b b的值被覆蓋,輸出的值變成1...

php審計基礎三 php封裝協議小總結

php stdin 主要用於php cli 的輸入 應用 while line fopen php stdin r 主要用於php cli的輸出 應用 fh fopen php stdout w fwrite fh,標準輸出php stdout n fclose fh fwrite stdout,標...

PHP安裝檔案的審計

一般php程式都有乙個初始安裝的問題,如果使用了一些cms安裝後且沒有刪除安裝檔案的話,就會導致二次安裝等問題.具體但不限於以下幾種情況 無驗證功能,任意重灌覆蓋 get step 跳過限制步驟 變數覆蓋導致從新安裝 判斷lock後跳轉無exit 解析install.php.bak漏洞 其他特定功能...