代码执行的安全问题

130 阅读1分钟

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() 函数。

功能限制 - 乐述云享 (aleshu.com)

由于 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那么容易写出漏洞的原因。

... ...

代码执行的安全问题 - 乐述云享 (aleshu.com)

【社群】PHP开发(安全问题) - 乐述云享 (aleshu.com)