首页 > 系统相关 >浅谈OS命令注入漏洞(Shell注入漏洞)

浅谈OS命令注入漏洞(Shell注入漏洞)

时间:2023-07-13 19:45:48浏览次数:29  
标签:Shell 浅谈 命令 主机 漏洞 line OS 注入

一、什么是OS命令注入?

1. 基本概念

    OS(Operating system)命令注入(也称为 Shell 注入)是一个 Web 安全漏洞,允许攻击者在运行应用程序的服务器上执行任意操作系统 (OS) 命令,这会破坏应用程序及其所有数据。

2. Shell的概念:

    Shell翻译过来就是” 壳”, 操作系统的外壳。Shell接收用户指令, 调用相应的应用程序, 是一种用C语言编写的程序设计语言, 同时也是“为使用者提供操作界面”的命令解析器。

3. Shell的执行过程:

    当用户输入Shell命令时,Shell负责将命令解释给内核,内核去运行,最后将处理完的结果反馈给用户;所以说Shell既是一种程序设计语言,又是命令解释程序。
而我们常用的CMD和Windows Power Shell是两种不同的Windows命令行工具, 其中PowerShell要更强大, 是微软发布的目前最新的一代命令行和脚本语言一体化工具。 

二、利用OS命令注入漏洞能做什么?

1. 攻击示意图

Shell注入攻击示意图
        Curl是一种支持各种协议的传输工具, 经常在Linux系统中使用;
        通过curl命令调用受害网站的的backdoor.sh脚本文件;这样就可以控制受害者主机, 访问我不该访问的服务, 获取我不该获取的数据,连接我不该连接的网络,篡改我不该篡改的权限。

2. DDOS攻击:

    比如说DDOS攻击: 我可以通过Shell注入控制你的电脑, 这台电脑就是我们常说的肉鸡/傀儡机, 我控制了你的电脑, 就可以用你的电脑, 你的IP对目标网站发起请求, 进行DDOS攻击;我控制几百台几千台不断的发起请求, 这就会影响目标服务器的正常访问。(Powershell -Command Invoke-WebRequest -Uri https://wwww.baidu.com -Method POST -Body @{username=‘admin’; password='abc’})

3. 上传非法脚本执行Shell命令

    结合文件上传漏洞:继承Web服务器程序权限,执行系统命令,控制整个服务器。
    结合路径遍历漏洞:访问文件存储路径, 清空所有数据文件。

4. 反弹shell

    假设现在我们有两台主机一台主机A、一台主机B,我们想通过A主机控制B主机。那么如果用正向Shell,其实就是在A主机上输入B主机的连接地址用户名和密码,连接到B,连接成功之后,我们就可以在A主机通过命令控制B主机了, 通过Shell注入可以绕过输入用户密码的步骤。
    但如果现在主机A是公网, 主机B是内网, 而由于防火墙等限制,主机A无法访问到主机B,这时候怎么办?这时候我们就可以利用反弹Shell攻击技术,在公网主机上先开启一个监听端口,然后再通过Shell注入让内网主机去连接公网主机的这个端口,连接成功之后,公网主机这边就能通过命令控制内网主机了。
    问:既然已经可以Shell注入进内网主机了,为什么还要让内网主机去连接控制端主机开启的端口,再由控制端主机发命令去控制内网主机?
    答:便捷;扩大权限;持久化(利用注入点可能会产生系统日志,可以防止后续注入点被修复无法再控制的情况;目标端IP动态变化) 

三、如何检测OS命令注入漏洞?

1. 检查代码

public void shellInjectionSimple(String command) {
    try {
        // 用于调用外部可执行程序或系统命令,这允许攻击者执行任意的外部命令。
        Process process = Runtime.getRuntime().exec(command);

        BufferedReader reader = new BufferedReader(new         InputStreamReader(process.getInputStream()));
        String line;

        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }

        reader.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

2. Shell盲注

与SQL盲注相同,SQL盲注都有哪些方式:
· SQL语句执行结果True/False,触发不同的响应;
· SQL语句注入服务器是否报错;
· 延迟执行,判断执行时间的长短;
· OAST带外技术盲注; 

四、如何防止OS命令注入?

1. 永远不要从应用层代码中调用操作系统命令 。
2. 参数化执行

public void shellInjectionParametrize(String[] args) {
    try {
        String command = ""; // Hard code

        // ProcessBuilder类是Java中用于执行外部命令的工具类,它提供了一种安全的方式来执行命令
        ProcessBuilder builder = new ProcessBuilder(command);
        List parameters = Arrays.asList(args);
        builder.command().addAll(parameters); // 使用command()方法将其添加到ProcessBuilder对象中
        Process process = builder.start(); // 调用start()方法来启动进程

        BufferdReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); // 使用BufferedReader读取输出流中的数据
        String line;

        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }


        int exitCode = process.waitFor();
        System.out.println("Exit code: " + exitCode);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

3. 如果不可避免地使用用户提供的输入调用操作系统命令,则必须执行强输入验证:
    a. 添加白名单验证;
    b. 控制输入字符(仅包含字母数字字符,不包含其他语法/空格/特殊字符等)
4. 不建议仅通过转义来控制输入,容易出错,并且很容易被熟练的攻击者绕过。

    对参数进行Base64编码,Base64编码可以作为一种简单的安全措施来保护不受信任的参数,只能保证攻击者无法在传输过程中直接执行。

标签:Shell,浅谈,命令,主机,漏洞,line,OS,注入
From: https://www.cnblogs.com/overfly/p/17551938.html

相关文章

  • @ConfigurationProperties 前缀注入属性
     importjava.util.LinkedHashMap;importjava.util.Map;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.context.annotation.Configuration;@ConfigurationProperties(prefix="zoo")@Configura......
  • 依赖注入DI
    依赖:指Bean对象的创建依赖于容器.Bean对象的依赖资源注入:指Bean对象所依赖的资源,由容器来设置和装配(即注入)构造器注入Set方式注入!扩展注入方式p命名空间注入:导入约束:xmlns:p="http://www.springframework.org/schema/p"<!--P(属性:properti......
  • 06_sar:敏感文件泄露、文件上传、组件漏洞、反弹shell、计划任务提权
    1.信息收集1.1主机发现1.2端口扫描1.3具体扫描1.4目录扫描1.5nmap默认脚本扫描2.信息利用2.1访问网站:只有一个apache2的页面2.2访问robots.txt因为robots.txt大多数都是存的目录,所以尝试访问一下可以看到一个带有版本号的文件,这个可能是一个软件,下载压缩包通过观察里面的描述确定......
  • 【漏洞复现】CVE-2023-27372 RCE漏洞
    产品介绍SPIP是一个互联网发布系统,其中非常重视协作工作,多语言环境和Web作者的易用性。它是自由软件,在GNU/GPL许可证下分发。这意味着它可以用于任何互联网站点,无论是个人的还是机构的,非营利的还是商业的。漏洞概述SPIPCmsv4.2.1之前版本允许通过公共区域中的表单值远程执行......
  • 【Netty】「优化进阶」(二)浅谈 LengthFieldBasedFrameDecoder:如何实现可靠的消息分割?
    前言本篇博文是《从0到1学习Netty》中进阶系列的第二篇博文,主要内容是通过不同的应用案例来了解LengthFieldBasedFrameDecoder是如何处理不同的消息,实现自动分割,往期系列文章请访问博主的Netty专栏,博文中的所有代码全部收集在博主的GitHub仓库中;介绍LengthFieldBasedFrameDe......
  • 【漏洞复现】用友NC uapjs RCE漏洞(CNVD-C-2023-76801)
    产品介绍    用友NC是一款企业级ERP软件。作为一种信息化管理工具,用友NC提供了一系列业务管理模块,包括财务会计、采购管理、销售管理、物料管理、生产计划和人力资源管理等,帮助企业实现数字化转型和高效管理。漏洞概述     用友NC及NCCloud系统存在任意文件上......
  • 自动装配注入与集合装配注入
    自动装配注入特征关键词autowireapplicationContext.xml<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&qu......
  • [渗透测试]—3.3 漏洞评估和报告编写
    在渗透测试过程中,漏洞评估和报告编写是非常重要的环节。漏洞评估可以帮助你确定哪些漏洞更加关键,需要优先修复。而报告则是向客户或公司领导展示渗透测试结果的关键文档。本节将介绍漏洞评估和报告编写的基本概念、方法和要点。1.漏洞评估漏洞评估是对已发现的安全漏洞进行分析......
  • 浅谈DevOps
    1.DevOps概述1.1定义DevOps(DevelopmentandOperations)是一种软件开发和运维的方法论和实践,旨在通过加强开发团队和运维团队之间的协作和整合,提高软件交付和运维的效率、可靠性和质量。传统上,开发团队负责软件开发、功能实现和变更管理,而运维团队负责部署、配置和维护生产环......
  • service 无法注入bean问题
    Noqualifyingbeanoftype'com.unqd.api.weituo.service.IamCustomerService'available:expectedatleast1beanwhichqualifiesasautowirecandidate.Dependencyannotations:{@org.springframework.beans.factory.annotation.Autowired(required=true......