01 代码执行漏洞
- 01.01 eval 函数示例
- 01.02 preg_replace 函数示例
- 01.03 create_function 函数示例
- 01.04 容易导致安全问题的其他函数
02 代码执行防御
当应用程序本身过滤不严,用户可以通过请求将代码注入到应用中,使得攻击者在服务器端任意执行代码,进而控制整个Web服务器。常见的代码执行函数有:eval()、preg_replace()、create_function() 等。
01 代码执行漏洞
命令执行漏洞与代码执行漏洞的区别:命令执行漏洞是可以直接调用操作系统命令,代码执行漏洞是靠执行脚本代码调用操作系统命令。
01.01 eval 函数示例
eval() 函数可以把字符串作为 PHP 代码执行。由于它允许执行任意 PHP 代码,因此不要允许传入任何由用户提供的未经验证验证过的数据。
eval($_GET['cmd']);
可以看到用户通过参数,成功执行了 phpinfo() 函数。
由于 phpinfo() 函数的强大功能,服务器的一些敏感信息往往容易被泄露,因此可以通过上文,在 php.ini 中找到 disable_functions 参数,以禁用 phpinfo() 函数。
除此之外,用户还可以执行各种PHP代码,例如:
01.02 preg_replace 函数示例
在 preg_replace() 函数中,当满足以下两个条件时,会触发漏洞。
第一个参数的正则表达式有 e 修正符时,第二个参数的字符串会被当做 PHP 代码执行。 第一个参数需要在第三个参数中有匹配,不然只会返回第三个参数而不是执行第二个参数的命令。
preg_replace("/text/e", $_GET['cmd'], "just text");
注意:PHP7.0 版本之后,就已经修复该漏洞,e 不再支持。
01.03 create_function 函数示例
create_function() 函数的作用是从传递的参数创建匿名函数,并返回唯一的名称。当算法过滤不严时,远程攻击者可以利用漏洞以特权应用程序权限执行任意代码。
$newfunc = create_function('$a,$b', $_GET['cmd']);
注意:PHP8.0版本之后,该函数被移除。
01.04 容易导致安全问题的其他函数
在 PHP 中存在着大量危险函数,这也是为什么PHP那么容易写出漏洞的原因。
... ...