(转载翻译)什么是代码注入以及如何防范

nicky   ·   发表于 2020-04-11 21:39:51   ·   技术文章投稿区

当攻击者利用网站中的输入验证缺陷来引入和执行恶意代码时,就会发生代码注入,也称为远程代码执行(RCE)。 代码以目标应用程序的语言注入,并由该语言的服务器端解释器执行PHP,Python,Java,Perl,Ruby等。

任何未验证输入的应用程序都容易受到代码注入和Web应用程序的攻击。本文介绍了代码注入漏洞的产生方式以及如何保护Web应用程序免受注入。

PHP代码注入实例

从一个易受攻击的PHP代码的例子开始。 PHP eval()函数提供了一种将字符串值作为PHP代码执行的快速便捷的方法,尤其是在开发的初始阶段或用于调试时。

但是,当与未知输入一起使用时,它会让应用程序容易受到代码注入的攻击。 这是一个快速处理查询字符串的例子–只是一个简单的echo命令
<?php eval (“echo “.$_REQUEST[“user_name”].”;”); ?>

PHP解释器会尝试评估user_name参数中传递的内容。 意思就是,参数表示开发人员希望查询字符串包含有效的用户名,例如:
http://www.example.com/index.php?user_name=admin

然而,攻击者可能会输入以下查询字符串,来构造恶意代码注入应用程序:
http://www.example.com/index.php?user_name=admin;phpinfo();

如果成功,这个注入会使PHP解释器回显admin,然后执行phpinfo(),为攻击者提供有关操作系统,PHP版本和其他配置详细信息。

除非在PHP设置中禁用了system()函数,否则代码注入可以使用此函数执行操作系统命令,实际上是执行命令注入。 使用上面显示的易受攻击的代码,攻击者可能会向基于Linux的服务器提供以下URL:
http://www.example.com/index.php?user_name=admin;system('ls -l’);

这将回显admin页面,顺便执行在分号之后注入的代码。 在此例子中,system(’ls -l’)运行ls -l命令会列出PHP目录的内容,包括权限

代码注入是如何运行的

尽管上面的示例仅适用于PHP,但是相同的原理也适用于服务器上的所有其他Web应用程序语言。 通常,当同时出现以下两种情况时,就认为应用程序具有代码注入漏洞:

1.缺乏适当的输入验证
2.以不安全的方式评估用户输出

在这些情况下,用户输入由应用程序处理并且可以由应用程序用户输入或操纵的任何数据。 这不仅包括直接输入,还包括查询字符串参数,Cookie和开发人员无法控制的所有其他数据等。

应用程序通常需要特定类型的输入,而开发人员可以忽略验证和清除实际输入数据。

易受代码注入攻击的应用程序将获取这些不受信任的数据,并将其直接用于程序代码中。 通常涉及使用eval()或等效函数,但是用户提供的字符串也可能构成不安全的处理。

攻击者可以通过以应用程序语言提供恶意代码来利用此类漏洞。 如果成功,则攻击可以完全访问服务器端解释器,从而使攻击者可以在服务器上的进程内执行任意代码。 如果应用程序有权访问系统调用,则攻击者可能能够升级此漏洞以在服务器上运行系统命令,从而允许进行命令注入攻击。

如何防止注入攻击

不管使用哪种语言,都可以遵循一些基本的安全实践来避免代码注入漏洞并提高Web应用程序的安全性:
验证和清除输入:扫描转义字符和应用程序语言和操作系统的其他特殊符号,例如注释标记。 如果你的应用程序只希望使用一组有限的值,则仅接受这些值,例如通过将其列入白名单或有条件地将其打开。

将所有数据视为不可信:请注意用户可以为应用程序提供或处理数据的所有位置。 除了明显的注入向量(例如查询字符串和HTML表单)之外,还可以通过手动修改的cookie和其他方法来注入代码。

锁定解释器:如果可以控制服务器配置,则可能需要将解释器功能限制为应用程序所需的最低限度,以防止升级为系统命令注入。

比如,如果你的PHP应用程序不使用system()函数,则可以通过在disable_functions指令中对其进行指定来在php.ini文件中禁用该函数。

通常禁用的PHP函数包括:exec(),passthru(),shell_exec(),system(),proc_open(),popen(),curl_exec(),curl_multi_exec(),parse_ini_file()和show_source()。

转载:https://www.netsparker.com/blog/web-security/code-injection/

用户名金币积分时间理由
奖励系统 100.00 0 2020-08-24 22:10:06 投稿满 10 赞奖励
奖励系统 50.00 0 2020-08-24 16:04:05 投稿满 5 赞奖励

打赏我,让我更有动力~

1 Reply   |  Until 2020-4-13 | 706 View

admin
发表于 2020-4-13

专业名词最好自己理解下再替换翻译

评论列表

  • 加载数据中...

编写评论内容
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2022 掌控者 All Rights Reserved.