远程命令执行之基本介绍

一.远程命令执行漏洞

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.4ports:- "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.mzph.cn/news/891395.shtml

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

相关文章

ReactiveStreams、Reactor、SpringWebFlux

注意&#xff1a; 本文内容于 2024-12-28 21:22:12 创建&#xff0c;可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容&#xff0c;请访问原文地址&#xff1a;ReactiveStreams、Reactor、SpringWebFlux。感谢您的关注与支持&#xff01; ReactiveStreams是…

Android笔试面试题AI答之Android基础(8)

Android入门请看《Android应用开发项目式教程》&#xff0c;视频、源码、答疑&#xff0c;手把手教 文章目录 1.Android新建工程需要注意的地方有哪些&#xff1f;**1. 选择合适的项目模板****2. 配置项目基本信息****3. 选择最低 SDK 版本****4. 配置构建工具****5. 选择编程…

【阻塞队列】- ArrayBlockingQueue 的原理-迭代器

文章目录 1. 前言2. 迭代器3. Itrs3.1 参数3.2 迭代器 Itr3.2.1 参数3.2.2 构造器3.2.3 hasNext3.2.4 next3.2.5 remove3.2.6 shutdown3.2.7 removedAt3.2.8 takeIndexWrapped 3.3 doSomeSweeping&#xff08;tryHandler&#xff09;3.4 register3.5 takeIndexWrapped3.6 remov…

ARM 汇编基础总结

GNU 汇编语法 编写汇编的过程中&#xff0c;其指令、寄存器名等可以全部使用大写&#xff0c;也可以全部使用小写&#xff0c;但是不能大小写混用。 1. 汇编语句的格式 label: instruction comment label即标号&#xff0c;表示地址位置&#xff0c;有些指令前面可能会有标…

【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库

**前言&#xff1a;**本节内容介绍使用C/C访问数据库&#xff0c; 包括对数据库的增删查改操作。 主要是学习一些接口的调用&#xff0c; 废话不多说&#xff0c; 开始我们的学习吧&#xff01; ps:本节内容比较容易&#xff0c; 友友们放心观看哦&#xff01; 目录 准备mysql…

华为配置 之 RIP

简介&#xff1a; RIP&#xff08;路由信息协议&#xff09;是一种广泛使用的内部网关协议&#xff0c;基于距离向量算法来决定路径。它通过向全网广播路由控制信息来动态交换网络拓扑信息&#xff0c;从而计算出最佳路由路径。RIP易于配置和理解&#xff0c;非常适用于小型网络…

1.GPU简介及英伟达开发环境配置

前言 This book shows how, by harnessing the power of your computer’s graphics process unit (GPU), you can write high-performance software for a wide rangeof applications.Although originally designed to render computer graphics ona monitor (and still used…

电脑cxcore100.dll丢失怎么办?

电脑运行时常见问题解析&#xff1a;应对DLL文件丢失、文件损坏与系统报错的实用指南 在数字时代&#xff0c;电脑已成为我们工作、学习和娱乐不可或缺的工具。然而&#xff0c;正如任何精密机械都可能遇到故障&#xff0c;电脑在运行过程中也难免会遇到各种问题&#xff0c;如…

【无线传感网】时间同步技术

文章目录 时间同步模型时钟模型1. 节点本地时钟模型2. 节点逻辑时钟模型 通信模型1. 单向报文传递2. 双向报文交换3. 广播参考报文4. 参数拟合技术 时钟同步的误差来源 时间同步协议时钟同步的类别1. 时钟速率同步与偏移同步2. 同步期限&#xff1a;长期同步与按需同步3. 同步范…

C# 实用工具分享(1)

大家好&#xff0c;今天分享一些在开发过程中比较实用的工具。 首先在软件开发的过程中不可避免的要使用截图这样的功能&#xff0c;以前这样的功能我自己也是选择开发出新功能。但是自己开发还是非常费时费力的&#xff0c;并且效果也不一定特别好。 于是我找到了一个现成的…

积分图(Integral Image)与均值滤波的快速实现

积分图&#xff08;Integral Image&#xff09;也称为求和图&#xff08;Summed Area Table&#xff09;&#xff0c;是一种用于快速计算图像中任意矩形区域像素值总和的技术。 基本概念 积分图的每个位置(i, j)存储的是从图像左上角(1, 1)到当前位置(i, j)所有像素值的累积和…

curl+openssl 踩坑笔记

curl编译&#xff1a;点击跳转 踩坑一 * SSL certificate problem: unable to get local issuer certificate * closing connection #0 curl: (60) SSL certificate problem: unable to get local issuer certificate More details here: https://curl.se/docs/sslcerts.html …

[AI] 深度学习的“黑箱”探索:从解释性到透明性

目录 1. 深度学习的“黑箱”问题&#xff1a;何为不可解释&#xff1f; 1.1 为什么“黑箱”问题存在&#xff1f; 2. 可解释性研究的现状 2.1 模型解释的方法 2.1.1 后置可解释性方法&#xff08;Post-hoc Explanations&#xff09; 2.1.2 内在可解释性方法&#xff08;I…

python-Flask:SQLite数据库路径不正确但是成功访问到了数据库,并对表进行了操作

出现了这个问题&#xff0c;就好像是我要去找在南方的人&#xff0c;然后我刚好不分南北&#xff0c;我认为的方向错了&#xff0c;实则方向对了。 在我针对复盘解决&#xff1a;sqlite3.OperationalError: unrecognized token: “{“-CSDN博客这个内容的时候&#xff0c;又出现…

对称密码算法(分组密码算法 序列密码算法 密码杂凑算法)中的基本操作

对称密码算法(分组密码算法 序列密码算法 密码杂凑算法)中的基本操作 相比非对称加密算法&#xff0c;对称加密算法因为加解密效率较高&#xff0c;因而在日常使用中更加广泛。为了让大家更加熟悉常见的对称加密算法&#xff0c;本文列举出了对称密码算法设计中经常用到的13种基…

大数据治理,数字化转型运营平台建设方案(PPT完整版)

1、大数据治理整体运营思路 2、数据资产定义及流程规范 3、治理规范及质量管控 4、质量考核标准及提升方案 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划…

专题十四——BFS

目录 一BFS解决FloodFill算法 1图像渲染 2岛屿数量 3岛屿的最大面积 4被环绕的区域 二BFS解决蛋源最短路径问题 1迷宫中离入口最近的出口 2最小基因变化 3单词接龙 4为高尔夫比赛砍树 三BFS解决多源最短路径问题 1 01矩阵 2飞地的数量 3地图中的最高点 4地图分…

DMDRS部署:搭建DM8-DM8数据同步

一、部署要求 1.1 硬件要求 DMDRS服务描述源DMDRS 内存要求至少2GB的内存空间。推荐配置4GB及以上的内存空间。 源DMDRS对内存空间的需求主要与装载的并发数相关。当内存空间配置低于2GB时&#xff0c;可以调整装载的线程数来降低源DMDRS对内存空间的需求。 磁盘要求至少10GB…

仓颉笔记——windows11安装启用cangjie语言,并使用vscode编写“你好,世界”

2025年1月1日第一篇日记&#xff0c;大家新年好。 去年就大致看了一下&#xff0c;感觉还不错&#xff0c;但一直没上手&#xff0c;这次借着元旦的晚上安装了一下&#xff0c;今年正式开动&#xff0c;公司众多的应用国产化正等着~~ 第一步&#xff1a;准备 官网&#xff1a;…

datalist的作用?怎么用的?

在 HTML 中&#xff0c;<datalist> 元素用于为 <input> 元素提供一个可选项列表&#xff0c;帮助用户通过预定义的选项进行快速选择。它是一个增强输入体验的功能&#xff0c;类似于自动完成&#xff08;autocomplete&#xff09;&#xff0c;但与传统的 <selec…