天天看点

代码执行漏洞简介讲解PHP代码执行: 代码执行概念:命令执行和代码执行:代码执行原理:代码执行危害:PHP动态函数调用:PHP函数代码执行漏洞:

代码执行最早被称为命令注入攻击,是指由于web应用程序对用户提交的数据过滤不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至web应用程序,并利用该方式执行外部程序或系统命令实施攻击非法获取数据或网络资源等。

PHP代码执行: 

PHP代码执行是PHP应用程序中常见的脚本漏洞之一,国内著名的web应用程序Discuz、DedeCMS等都曾存在过该类型漏洞。

命令执行漏洞是直接操作系统的命令,代码执行漏洞是通过代码执行来执行计算机语言代码,比如eval(system('set');)。

代码执行概念:

代码执行通常指将可执行代码注入到当前页面中,比如PHP的eval函数,可以将字符串代表的代码作为PHP代码执行,当前用户能够控制这段字符串时,将产生代码执行漏洞。广义上的代码注入,可以覆盖大半安全漏洞的分类。

命令执行和代码执行:

相同点:

  1. 都是用了相关函数、却存在可控制的变量;
  2. 都可以通过代码审计发现漏洞;
  3. 都可以拼接恶意命令对服务器造成攻击等。

不同点:

  1. 命令执行漏洞是直接操作系统命令,如:PHP中的system(),exec(),shell_exec()等,当用户能够控制这些函数中的参数时,就可以将恶意系统命令拼接到正常的命令中,从而造成命令执行攻击,这就是命令执行漏洞;
  2. 代码执行漏洞是通过代码来执行计算机语言,比如:eval(system('set');).。

代码执行原理:

PHP中代码执行情况非常灵活,究其原因仍然离不开两个关键条件:

  1. 用户能够控制的函数输入;
  2. 存在可以执行代码的危险函数。

所以,代码执行的原理其实就是当应用在调用一些能够将字符串转换成代码的函数时,没有考虑到用户是否能控制这个字符串,然后将字符串代表的代码作为PHP代码执行,造成代码执行漏洞。

代码执行危害:

  1. 暴露服务器信息;
  2. 木马植入;
  3. 敏感文件暴露;
  4. 还可能升级为命令执行。

PHP动态函数调用:

在PHP中可以把函数名通过字符串的方式传递给一个变量,然后通过此变量动态调用函数;

在PHP语言中,可以通过动态函数用来调用来对代码进行执行。

PHP函数代码执行漏洞:

PHP有不少可以直接执行代码的函数,比如:eval()、assert()、system()、exec()、shell_exec()、passthru()、esapeshellcmd()、pcntl_exec()等。

一般最好在PHP中禁用这些函数。审计代码实则可以检查代码中是否存在这些函数,然后回溯危险函数的调用过程,看用户是否可以输入。

继续阅读