一、disable_functions 繞過
當我們在編寫PHP Web應用程序時,disable_functions這個選項是非常重要的選項。如果禁用了某些函數,就不能使用這些函數。而disable_functions也是一種安全機制,它可以禁用一些可能造成伺服器安全隱患的函數。但是,由於我們可以通過一些方法繞過這個安全機制。下面就介紹一些繞過方法。
1. system() 函數
//假設我們PHP運行的Web伺服器是Linux,並且該伺服器禁用了system()函數:
php -r "system('id');"
//期待伺服器返回"id",但我們仍可以通過非常簡單的語句繞過該函數的禁用:
echo shell_exec('id');2. exec() 函數
//同樣假設我們PHP運行的Web伺服器是Linux並且該伺服器禁用了exec()函數:
php -r "exec('id');"
//我們仍可以使用backtick字元繞過該函數的禁用:
echo `id`;二、disable_functions 選取
disable_functions選項有很多函數可以用,我們需要在實際情況下合理選擇。下面我們列出一些常見的函數,可以用來禁用。
1. eval() 函數:
允許執行字元串,通常用於某些代碼的動態執行。但是它是非常危險的函數,它可以使攻擊者能夠執行任意代碼。因此,當系統配置中禁用了eval()函數時,可以有效地避免代碼執行時的安全風險。
2. passthru() 函數:
執行命令並將完整的輸出直接返回給調用者。由於它的風險較高,它也是安全機制中默認禁用的函數之一。
3. exec() 函數:
也是用於執行系統命令的函數,與passthru()函數類似。然而,與passthru()的區別在於,在執行命令之後,exec()函數只返回命令的最後一行輸出。
4. base64_decode() 函數:
可以將一個base64編碼的字元串轉換為二進位字元串。由於該函數可以轉換任意二進位數據,因此它可能被用於解碼將命令存儲在64位編碼中的惡意代碼。因此,禁用base64_decode()函數可以進一步提高Web伺服器的安全性。
三、代碼實例
下面是一個簡單的用PHP代碼實現禁用某些函數的例子:
//禁用的函數
$disabled_functions = explode(",", ini_get("disable_functions"));
//要禁止的函數
$functions_to_disable = array("system", "exec", "passthru", "shell_exec");
foreach ($functions_to_disable as $func) {
if (!function_exists($func) && !in_array($func, $disabled_functions)) {
//將禁用的函數添加到disable_functions中
$disabled_functions[] = $func;
}
}
//將禁用函數設置回ini文件
ini_set("disable_functions", implode(",", $disabled_functions));以上代碼將禁用4個函數,並將它們添加到disable_functions中。最後,將更新後的disable_functions設置回ini文件。
除此之外,還可以採用一些其他的方法來增強Web伺服器的安全性,如處理錯誤、禁用register_globals、禁用Magic Quotes等。但disable_functions仍然是一個非常重要的選項,可以最大程度地減少Web伺服器受到攻擊的風險。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/248677.html
微信掃一掃
支付寶掃一掃