远程命令执行之基本介绍

news2025/4/8 4:24:28

一.远程命令执行漏洞

1.命令执行

命令执行是指计算机程序接受用户输入的命令,并按照命令的要求执行相应的操作。命令可以执行各种操作,例如读取文件、创建文件、修改文件、运行程序、删除文件等。

命令执行通常是通过一个命令行界面或终端窗口进行的。在命令行界面中,用户可以输入各种命令来操作计算机系统,而系统会相应地执行这些命令。命令行界面通常用于系统管理员、程序员或高级用户等需要更精细控制计算机系统的人员使用。

2.命令执行漏洞

远程命令执行漏洞(remote command execution),简称RCE。一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口,比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上,一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后后台会对该IP地址进行一次ping测试,并返回测试结果。 如果设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交恶意命令,从而导致漏洞的发生。

3.漏洞危害
  • 系统控制方面:攻击者可完全控制服务器,如安装恶意软件;修改系统配置,如防火墙规则;操纵系统服务,如停用安全监控服务。
  • 数据安全方面:窃取服务器数据,如用户信息和商业机密;篡改或删除数据,如修改价格或删除业务记录。
  • 网络攻击传播方面:发动 DDoS 攻击;进行横向渗透,以被入侵服务器为跳板攻击其他设备。
4.命令执行相关函数

PHP:system()、exec()、shell_exec()、passthru()、penti_exec()、popen()、proc_pen()等,此外还有反引号命令执行,这种方式实际上是调用 shell_exec()函数来执行。

ASP.NET:System.Diagnostics.Start.Process、System.Diagnostics.Start.ProcessStartInfo等

Java:java.lang.runtime.Runtime.getRuntime、java.lang.runtime.Runtime.exec等

Python:system()、popen()、subprocess.call

PHP命令执行相关函数
  1. exec

    • 格式:exec(string $command,array &$output, int &$return_var)​

      • ​$command​:要执行的命令,这是一个字符串,包含了你想要执行的系统命令。
      • ​$output​(可选):一个引用参数,用于存储命令的输出结果。如果命令输出多行,每一行将作为数组的一个元素存储在此数组中。
      • ​$return_var​(可选):另一个引用参数,用于存储命令的返回状态码。通常,返回状态码为 0 表示命令执行成功,非零值表示出现错误。
    • 作用:执行一个外部程序并返回结果,通常执行成功返回0。

      <?php echo exec('whoami');?>
      
      • PS:exec执行命令时不会输出全部结果,而是返回结果的最后一行。


  2. system

    • 格式:system(string $command,int &$return_var)​

      • ​$command​:要执行的命令,是一个字符串,包含你想要运行的系统命令。
      • ​$return_var​(可选):一个引用参数,用于存储命令的返回状态码。和 exec​ 函数一样,通常返回状态码为 0 表示命令执行成功,非零值表示出现错误。
    • 作用:用于执行外部程序的一个函数。

      <?php system('whoami');?>
      
      • PS:system和exec的区别在于,system在执行系统外部命令时,直接将命令的输出打印到标准输出(通常是网页或命令行终端),而不会像 exec​ 函数那样将输出存储在一个数组中。


  3. shell_exec

    • 格式:shell_exec(string $command)​

      • ​$command​:要执行的命令,是一个字符串,包含你想要运行的系统命令。
    • 作用:用于执行外部 shell 命令的一个函数。

      <?php
      # 将 ipconfig 命令的执行结果存储在变量 $output 中。
      $output = shell_exec('ipconfig');
      # 使用 echo 函数将存储在 $output 中的结果输出到网页上。
      # <pre> 标签:格式化输出文本,使输出更具可读性。
      echo "<pre>$output</pre>";
      ?>
      
  4. 反引号``​

    • 作用:效果等同 shell_exec​

      <?php echo `ipconfig`;?>
      
拓展知识
  • 除了以上的函数可以造成命令执行之外,php中还有许多其它的函数可以造成命令执行漏洞,比如:passthru、popen()等。

  • 命令执行常见绕过方式

    1. ​cmd1;cmd2​:cmd1执行完再执行cmd2,windows下无法用(;)
    2. ​cmd1|cmd2​:不管cmd1命令成功与否,都会去执行cmd2命令
    3. ​cmd1||cmd2​:首先执行cmd1命令再执行cmd2命令,如果cmd1命令执行成功,就不会执行cmd2命令;相反,如果cmd1命令执行不成功,就会执行cmd2命令。
    4. ​cmd1&cmd2​:&也叫后台任务符,代表首先执行命令cmd1,把cmd1放到后台执行再执行命令cmd2,如果cmd1执行失败,还是会继续执行命令cmd2。也就是说命令cmd2的执行不会受到命令cmd1的干扰。
    5. ​cmd1&&cmd2​:首先执行命令cmd1再执行命令cmd2,但是前提条件是命令cmd1执行正确才会执行命令cmd2,在cmd1执行失败的情况下不会执行cmd2命令。所以又被称为短路运算符。
  • 当cat被过滤时,可以使用以下命令代替

    ca""t
    ca\t
    more:一页一页的显示档案内容
    less:与 more 类似
    head:查看头几行
    tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
    tail:查看尾几行
    nl:显示的时候,顺便输出行号
    od:od指令会读取所给予的文件的内容,并将其内容以八进制字码呈现出来
    vi:一种编辑器,这个也可以查看
    vim:一种编辑器,这个也可以查看
    sort:将文本文件内容加以 ASCII 码的次序排列
    uniq:用于检查及删除文本文件中重复出现的行列
    file -f:报错出具体内容
    paste:把每个文件以列对列的方式,一列列地加以合并
    反引号+base64编码:`echo Y2F0IC9ldGMvcGFzc3dk |base64 -d​`

  • 空格被过滤

    < 、<>、$IFS$9、${IFS}、$IFS、$IFS[*]、$IFS[@]等

  • /etc/passwd被过滤

    /e?c/?asswd
    /e*c/*asswd
    /??c/?asswd
    /??c/?assw?

二.组件、开发框架中的命令执行漏洞

由于新的漏洞不断被发现和修复,所以这些组件、开发框架是否存在漏洞随着时间的推移而变化。以下是一些已知的开发框架和库,它们在过去的一段时间内曾经存在过命令执行漏洞:

  • Apache Struts:Apache Struts是一个用于构建企业级Java Web应用程序的框架,它在过去曾经多次发现命令执行漏洞,例如2017年发现的漏洞CVE-2017-5638。
  • Ruby on Rails:Ruby on Rails是一个使用Ruby语言编写的Web应用程序框架,它在过去也曾经发现过多个命令执行漏洞,例如2013年发现的漏洞CVE-2013-0156。
  • Django:Django是一个使用Python语言编写的Web应用程序框架,它在过去也曾经发现过多个命令执行漏洞,例如2015年发现的漏洞CVE-2015-5143。
  • Laravel:Laravel是一个使用PHP语言编写的Web应用程序框架,它在过去也曾经发现过多个命令执行漏洞,例如2021年发现的漏洞CVE-2021-3129。
  • jQuery:jQuery是一个广泛使用的JavaScript库,它在过去也曾经发现过多个命令执行漏洞,例如2015年发现的漏洞CVE-2015-9251。

这里只是列举了一些已知的开发框架和库,在实际情况中,任何开发框架和库都可能存在安全漏洞,因此在开发应用程序时,需要不断关注它们的安全更新和漏洞修复。

1.Apache Shiro远程命令执行漏洞
  1. Shiro:Apache Shiro是一个Java安全框架,提供了身份验证、授权、加密、会话管理等安全功能。它可以集成到任何Java应用程序中,包括Web、企业、桌面和移动应用程序。
  2. Shiro-550:Shiro-550是Apache Shiro项目的一个问题编号,指的是一个已经被修复的漏洞。该漏洞存在于Shiro的RememberMe功能中,攻击者可以使用Cookie中的信息重新创建会话并获取未经授权的访问权限。该漏洞的CVE编号为CVE-2016-4437。
A.漏洞原理

Apache Shiro 框架提供了记住密码的功能( RememberMe ),用户登录成功后用户信息会经过加密编码后存储在 cookie 中。在 Cookie 读取过程中有用 AES 对 Cookie 值解密的过程,对于 AES 这类对称加密算法,一旦 秘钥泄露 加密便形同虚设。若秘钥可控,同时 Cookie 值是由攻击者构造的恶意Payload ,就可以将流程走通,触发危险的 Java 反序列化,从而导致远程命令执行漏洞。

所以此漏洞的关键点就是密钥的泄露,一些网站使用了默认的密钥就存在泄露的风险。

B.漏洞复现
  1. 环境搭建

    1. 新建docker-compose.yml文件,将以下内容复制进去

      version: '2'
      services:
       web:
          image: vulhub/shiro:1.2.4
          ports:
           - "8080:8080"
      
    2. 然后执行:docker-compose up -d​

    3. 启动后访问:http://your-ip:port/


  2. 漏洞复现

    1. 组件发现

      • 首先需要知道目标是否使用该组件,在访问及登录时抓包,如果响应头 set-cookie​ 中显示 rememberMe=deleteMe​ ,说明使用了 Shiro 组件。


      • 除此之外,还可以自己在请求包中的Cookie处添加 rememberMe=1 然后查看响应头是否有 rememberMe=deleteMe​


      • 还可以使用一些指纹探测工具 -- Finger指纹探测工具

      • 以及Burp Suite插件进行被动扫描。

    2. 漏洞利用

      • 在获取到目标网站使用了Shiro组件之后,可以再使用其他的工具爆破密钥,例如LiqunKit综合漏洞利用工具,运行该工具需要有java环境。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2269532.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构-单调队列】力扣2762. 不间断子数组

给你一个下标从 0 开始的整数数组 nums 。nums 的一个子数组如果满足以下条件&#xff0c;那么它是 不间断 的&#xff1a; i&#xff0c;i 1 &#xff0c;…&#xff0c;j 表示子数组中的下标。对于所有满足 i < i1, i2 < j 的下标对&#xff0c;都有 0 < |nums[i1…

扩充vmware磁盘大小以及分区

扩充vmware磁盘大小以及分区 扩充vmware磁盘大小 分区 目前使用vmware版本为17.5.2 gparted fdisk cxqubuntu:~$ sudo fdisk -l Disk /dev/loop0: 219 MiB, 229638144 bytes, 448512 sectors Units: sectors of 1 * 512 512 bytes Sector size (logical/physical): 512 …

【Python图像处理】进阶实战续篇(七)

在上一篇文章中&#xff0c;我们探讨了Python在图像处理中的几个前沿技术&#xff0c;包括语义分割和视频帧间插值。本篇将继续深化这些话题&#xff0c;并进一步拓展到其他相关的高级技术应用中&#xff0c;以便为读者提供更为详尽的知识体系。 12. 深度学习在语义分割中的应…

TIOBE 指数 12 月排行榜公布,VB.Net排行第九

IT之家 12 月 10 日消息&#xff0c;TIOBE 编程社区指数是一个衡量编程语言受欢迎程度的指标&#xff0c;评判的依据来自世界范围内的工程师、课程、供应商及搜索引擎&#xff0c;今天 TIOBE 官网公布了 2024 年 12 月的编程语言排行榜&#xff0c;IT之家整理如下&#xff1a; …

从零开始开发纯血鸿蒙应用之UI封装

从零开始开发纯血鸿蒙应用 一、题引二、UI 组成三、UI 封装原则四、实现 lib_comps1、封装 UI 样式1.1、attributeModifier 属性1.2、自定义AttributeModifier<T>类 2、封装 UI 组件 五、总结 一、题引 在开始正文前&#xff0c;为了大家能够从本篇博文中&#xff0c;汲…

ChatBI来啦!NBAI 正式上线 NL2SQL 功能

NebulaAI 现已正式上线 NL2SQL 功能&#xff0c;免费开放使用&#xff01; 什么是 NL2SQL&#xff1f;NL2SQL 即通过自然语言交互&#xff0c;用户可以轻松查询、分析和管理数据库中的数据&#xff08;ChatBI&#xff09;&#xff0c;从此摆脱传统复杂的数据库操作。 欢迎免费…

UE5材质节点Frac/Fmod

Frac取小数 Fmod取余数 转场效果 TimeMultiplyFrac很常用 Timesin / Timecos 制作闪烁效果

二叉树的三种遍历方式以及示例图

二叉树的三种基本遍历方式是前序遍历&#xff08;Pre-order Traversal&#xff09;、中序遍历&#xff08;In-order Traversal&#xff09;和后序遍历&#xff08;Post-order Traversal&#xff09;。这三种遍历方式各有特点&#xff0c;适用于不同的场景。下面是每种遍历方式的…

数据表中列的完整性约束概述

文章目录 一、完整性约束概述二、设置表字段的主键约束三、设置表字段的外键约束四、设置表字段的非空约束五、设置表字段唯一约束六、设置表字段值自动增加七、设置表字段的默认值八、调整列的完整性约束 一、完整性约束概述 完整性约束条件是对字段进行限制&#xff0c;要求…

如何解决Eigen和CUDA版本不匹配引起的错误math_functions.hpp: No such file or directory

Apollo9针对RTX40的docker环境里的Eigen库版本是3.3.4&#xff0c;CUDA是11.8: 编译我们自己封装模型的某些component代码时没问题&#xff0c;编译一个封装occ模型的component代码时始终报错: In file included from /usr/include/eigen3/Eigen/Geometry:11:0, …

【非关系型数据库Redis 】 入门

Redis入门 一、非关系型数据库概述 &#xff08;一&#xff09;概念 非关系型数据库&#xff08;NoSQL&#xff0c;Not Only SQL&#xff09;是相对于传统的关系型数据库而言的一种数据存储管理系统。它摒弃了关系型数据库中严格的表结构、SQL 语言操作以及复杂的事务等特性…

0基础跟德姆(dom)一起学AI 自然语言处理10-LSTM模型

1 LSTM介绍 LSTM&#xff08;Long Short-Term Memory&#xff09;也称长短时记忆结构, 它是传统RNN的变体, 与经典RNN相比能够有效捕捉长序列之间的语义关联, 缓解梯度消失或爆炸现象. 同时LSTM的结构更复杂, 它的核心结构可以分为四个部分去解析: 遗忘门输入门细胞状态输出门…

Ribbon源码分析

一、Spring定制化RestTemplate&#xff0c;预留出RestTemplate定制化扩展点 org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration 二、Ribbon定义RestTemplate Ribbon扩展点功能 org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguratio…

【C++】智能指针详解(实现)

在本篇博客中&#xff0c;作者将会带领你理解并自己手动实现简单的智能指针&#xff0c;以加深对智能指针的理解。 一.什么是智能指针&#xff0c;为什么需要智能指针 智能指针是一种基于RAII思想实现的一种资源托管方式&#xff0c;至于什么是RAII&#xff0c;后面会讲到。 对…

【微服务】【Sentinel】认识Sentinel

文章目录 1. 雪崩问题2. 解决方案3. 服务保护技术对比4. 安装 Sentinel4.1 启动控制台4.2 客户端接入控制台 参考资料: 1. 雪崩问题 微服务调用链路中的某个服务故障&#xff0c;引起整个链路中的所有微服务都不可用&#xff0c;这就是雪崩。动图演示&#xff1a; 在微服务系统…

macos 支持外接高分辩率显示器开源控制软件

macos 支持外接高分辩率显示器开源控制软件 软件&#xff08;app应用&#xff09;名&#xff1a;BetterDisplay 官方地址&#xff1a; https://github.com/waydabber/BetterDisplay

JVM实战—7.如何模拟GC场景并阅读GC日志

大纲 1.动手模拟出频繁Young GC的场景 2.JVM的Young GC日志应该怎么看 3.代码模拟动态年龄判定规则进入老年代 4.代码模拟S区放不下部分进入老年代 5.JVM的Full GC日志应该怎么看 6.问题汇总 1.动手模拟出频繁Young GC的场景 (1)程序的JVM参数示范 (2)如何打印出JVM GC…

javaEE-文件操作和IO-文件

目录 一.什么是文件 1.文件就是硬盘(磁盘)上的文件。 2.计算机中存储数据的设备&#xff1a; 3.硬盘的物理特征 4.树型结构组织和⽬录 5.文件路径 文件路径有两种表示方式&#xff1a; 6.文件的分类 二、java中文件系统的操作 1.File类中的属性&#xff1a; 2.构造方…

使用 Docker 搭建 Hadoop 集群

1.1. 启用 WSL 与虚拟机平台 1.1.1. 启用功能 启用 WSL并使用 Moba 连接-CSDN博客 1.2 安装 Docker Desktop 最新版本链接&#xff1a;Docker Desktop: The #1 Containerization Tool for Developers | Docker 指定版本链接&#xff1a;Docker Desktop release notes | Do…

数据结构(系列)

在Python中&#xff0c;列表&#xff08;list&#xff09;是一种基本的数据结构&#xff0c;它可以存储一系列的元素。列表是可变的&#xff0c;即可以对其进行增删改查操作。 栈&#xff08;Stack&#xff09;是一种具有特定限制的线性数据结构&#xff0c;在栈中&#xff0c…