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

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

1. 简介

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

在这里插入图片描述

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

2. 产生根因

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

3. 攻击面

3.1. 攻击全景

污染源
数据格式
应用类型
注入路径
语言执行层
操作系统Shell/CMD
  • 污染源: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()函数注入代码,调用对应语言的系统调用函(参考上一章节)数执行注入命令。
  • 通SQL注入调用数据库的系统存储过程(如通过xp_cmdshell完成命令调用)。

4. 防御方法

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

5. 参考

[1] https://portswigger.net/web-security/os-command-injection


推荐阅读:
「 典型安全漏洞系列 」06.路径遍历(Path Traversal)详解
「 典型安全漏洞系列 」05.XML外部实体注入XXE详解
「 典型安全漏洞系列 」04.服务器端请求伪造SSRF详解
「 典型安全漏洞系列 」03.跨站请求伪造CSRF详解
「 典型安全漏洞系列 」02.SQL注入详解
「 典型安全漏洞系列 」01.跨站脚本攻击XSS详解

相关推荐

  1. SQL注入安全漏洞详解

    2024-01-29 04:58:03       55 阅读
  2. SQL注入漏洞详解

    2024-01-29 04:58:03       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-29 04:58:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-29 04:58:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-29 04:58:03       87 阅读
  4. Python语言-面向对象

    2024-01-29 04:58:03       96 阅读

热门阅读

  1. MySQL 导出数据

    2024-01-29 04:58:03       50 阅读
  2. Redis客户端之Redisson(二)Redisson组件

    2024-01-29 04:58:03       50 阅读
  3. C++ day1

    C++ day1

    2024-01-29 04:58:03      55 阅读