「 典型安全漏洞系列 」OS命令注入详解

admin 2024年8月7日19:55:26评论21 views字数 1086阅读3分37秒阅读模式

引言:什么是操作系统命令注入,如何防御和利用此类漏洞?

1. 简介

操作系统命令注入(OS command injection)是一种Web安全漏洞,允许攻击者在运行应用程序的服务器上执行任意操作系统(OS)命令,通常会完全破坏应用程序及其所有数据。

「 典型安全漏洞系列 」OS命令注入详解
OS命令注入原理图

在这种攻击中,攻击者通过输入恶意代码来利用应用程序中的漏洞,从而在服务器上执行任意命令。这些命令可以包括删除文件、窃取数据、更改配置等。

2. 产生根因

  • Web应用服务器未对用户提交的参数进行有效检测和过滤;
  • 操作系统(OS)允许一条语句使用连接符(如&&&||)和管道符来执行多条命令;

3. 攻击面

3.1. 攻击全景

「 典型安全漏洞系列 」OS命令注入详解

  • 污染源:Http请求、Socket、控制台输入、环境变量、文件和注册表
  • 数据格式:文本、JSON、XML、文件流
  • 用类型:B/S、C/S、Console、Service
  • 注入路径:语言注入(如SPEL、OGNL、JSP)、Eval()、系统调用、SQL注入
  • 语言执行层
    • Java:System.Runtime.getRuntime().exec()ProcessBuild().start()
    • C/C++:ShellExecute()system()exec()popen()
    • Python:os.system()os.popen()subprocess.popen()subprocess.call()
    • PHP:system()exec()popen()shell_exec()proc_open()
    • SHELL
    • DataBase
    • Perl
    • ...
  • 作系统Shell/CMD:Unix风格shell、Windows CMD。

3.2. 攻击路径

攻击者可以通过以下三种方式执行注入攻击:

  • 应用主动调用系统命令或shell脚本完成特定功能
  • 通过语言解释器(如Java语言可通过OGNL)或eval()函数注入代码,调用对应语言的系统调用函数(参考上 3.1 章节)执行注入命令。
  • 通SQL注入调用数据库的系统存储过程(如通过xp_cmdshell完成命令调用)。

4. 防御方法

  • 尽量不要从应用程序层代码中调用OS命令,如果实在要调用请使用封装后的安全函数;
  • 输入过滤:
    • 对参数进行白名单校验,如验证输入只包含字母,没有其他语法关键字或空格等。
    • 黑名单过滤,拦截命令注入特殊字符;
  • 参数编码:对常见特殊字符进行转码,避免命令注入

5. 参考链接

  • https://portswigger.net/web-security/os-command-injection

「 典型安全漏洞系列 」OS命令注入详解

原文始发于微信公众号(筑梦之月):「 典型安全漏洞系列 」07.OS命令注入详解

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月7日19:55:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   「 典型安全漏洞系列 」OS命令注入详解http://cn-sec.com/archives/3041371.html

发表评论

匿名网友 填写信息