谈谈代码注入(远程代码执行)

admin 2022年4月3日11:37:40评论159 views字数 1398阅读4分39秒阅读模式

谈谈代码注入(远程代码执行)

代码注入「Code Injection」或远程代码执行「Remote Code Execution」 「RCE」 使攻击者能够通过注入攻击执行恶意代码。代码注入攻击不同于「命令注入」攻击。攻击者的手段施展取决于服务器端解释器(如 PHP、Python 等)的限制。在某些情况下,攻击者可能能够从代码注入升级为命令注入。

通常,当应用程序未先验证代码的情况下评估代码时,就会发生代码注入。以下错误示例是存在代码注入的 PHP 应用程序源代码。

/**
* Get the code from a GET input
* Example - http://example.com/?code=phpinfo();
*/
$code = $_GET['code'];

/**
* Unsafely evaluate the code
* Example - phpinfo();
*/
eval("$code;");

基于以上示例,攻击者可以使用以下构造执行任意 PHP 代码。执行结果是显示 PHP 信息页面。

http://example.com/?code=phpinfo();

命令执行

攻击者可以通过在服务器上执行任意操作系统命令来进一步“强化”代码注入漏洞。根据上面的例子,攻击者可以使用 PHP 中的system()函数执行whoami shell命令。

http://example.com/?code=system('whoami');

一旦攻击者能够执行操作系统命令,他们就可以尝试使用Webshell或安装其他恶意软件。这样攻击者甚至可以破坏内部其他系统。

发现和防范代码注入漏洞

只要攻击者可以通过发送恶意数据来利用服务器端解释器设置,几乎任何数据输入接口都可以成为代码注入攻击的载体。这些攻击很常见,因为攻击者可以访问发现代码注入缺陷的模糊器和扫描器。根据暴露的数据和软件实现的业务功能,此类攻击的业务影响可能从轻微到严重不等。因此,修复不正确的服务器配置、避免不受信任的数据源以及消除其他注入向量至关重要。

  • 「限制输入验证」严格地控制应用程序可以处理的数据或输入类型,从而有助于降低攻击者执行恶意代码的风险。
  • 「编码 HTML 输出」利用上下文输出编码将恶意输入转换为更安全的类型,其中用户数据可以显示但不能作为代码执行。
  • 「对 cookie使用HttpOnly标志来禁用客户端脚本交互」如果服务器在它创建的每个 cookie 上设置 HttpOnly 标志,则表明不应从客户端访问 cookie。因此,即使存在 HTML 注入缺陷,cookie 也不能透露给第三方。
  • 「避免 Javascript 代码序列化」开发人员使用代码序列化将输入数据重新排列为一组常规函数和表达式。某些版本的 Javascript 序列化包无法正确清除正则表达式中不受信任的字符。除非绝对必要,否则建议作为最佳实践避免序列化。
  • 「禁用不安全的函数」在开发源代码时避免所有易受攻击的代码评估结构是很重要的。开发人员应改为使用安全、专用、特定于语言的功能来处理用户提供的输入。如通常禁用的PHP函数有:exec()passthru()shell_exec()system()proc_open()popen()curl_exec()curl_multi_exec()parse_ini_file()show_source()


原文始发于微信公众号(安全圈小王子):谈谈代码注入(远程代码执行)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月3日11:37:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   谈谈代码注入(远程代码执行)http://cn-sec.com/archives/865799.html

发表评论

匿名网友 填写信息