一、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/n/248677.html
微信扫一扫
支付宝扫一扫