S2-052 远程代码执行漏洞检测与利用

2024-03-14 00:10

本文主要是介绍S2-052 远程代码执行漏洞检测与利用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

调试环境搭建

使用官方的rest-sample即可,下载2.5.12版本的源码https://github.com/apache/struts/archive/STRUTS_2_5_12.zip,然后将apps下面的rest-showcase源码脱下来。

Eclipse中新建一个maven工程,web.xml,pom.xml和struts.xml如下:

pom.xml

<!-- struts2依赖包 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.12</version>
</dependency>
<!-- struts restful 依赖包 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.5.12</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-rest-plugin</artifactId>
<version>2.5.12</version>
</dependency>

struts.xml(src/main/resources/下)


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- Overwrite Convention -->
<constant name="struts.convention.action.suffix" value="Controller"/>
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<constant name="struts.convention.default.parent.package" value="rest-default"/>
<constant name="struts.convention.package.locators" value="action"/>
<constant name="struts.convention.result.path" value="/WEB-INF/"/>
</struts>

其他的action文件、jsp文件复制过来到maven工程的对应目录即可,右键启动项目,然后浏览器可以访问到:http://127.0.0.1:8080/struts2-052/orders,说明调试环境搭建成功。

漏洞分析

根据该漏洞发现者文章https://lgtm.com/blog/apache_struts_CVE-2017-9805所述,是一个叫ContentHandler的东西有问题。

在2.5.12源码中搜索这个字符串:

在struts-plugin.xml配置了很多的bean,这些bean按照content-type进行分类,并唯一指定一个具体的Handler。这些Handler都实现了ContentTypeHandler接口。

从API DOC上描述

Handles transferring content to and from objects for a specific content type

来看,这个ContentTypeHandler实际上是按照Content-type的不同,将请求的数据丢给指定的子类进行处理,具体是怎么处理的呢,以XStreamHandler为例:

这里实际上就是把XML和java对象之间进行转化,比较专业的词汇叫“marshal“和”“unmarshal”。从以往的例子看,这种情况导致的命令执行也不是一次两次了,json转换库如fastjson,jackson都有过漏洞,

这次换成了Struts2里的XML的对象转换。其实就是XStreamHandler的toObject方法中触发了漏洞,我们就先在这行代码下断点,执行poc之后,会发现断点生效了。

我们来看看调用函数流程信息:

在Restful模式下,对Action的路由处理是使用Rest系列的代码,这里是ContentTypeInterceptor类调用的XStreamHandler方法。我们来看看上层代码中的intercept方法:

首先是从HttpServletRequest里判断ContentType,可以很清晰的看到,通过ContentType将request的字节流分发给对应的Handler进行处理。当ContentType为application/xml的时候,

很自然的就分发给了XStreamHandler这个类来处理,这个类没有进行任何校验,直接进行了转换。我们可以用marsshalsec工具来生成payload。

(1)下载源码https://github.com/mbechler/marshalsec

(2)maven编译 mvn clean package -DskipTests

(3)去target目录下找到jar文件,执行:
 

java -cp marshalsec-0.0.1-SNAPSHOT-all.jar marshalsec.XStream ImageIO "calc" > 1.txt

然后将这段XML用POST发给struts2-rest,当然,ContentType要设置为xml的,然后就可以触发了。当命令中有空格时,提交多个<string>节点即可。

后话

关于如何从XML到命令执行的过程,实际上是Moritz Bechler大神的一个paper,https://github.com/mbechler/marshalsec/blob/master/marshalsec.pdf,这个paper随着marshalsec工具发布。

这里只分析Struts2的漏洞原因,关于XML->RCE过程,大家可以仔细阅读这个paper进行深入了解。
 

参考

https://lgtm.com/blog/apache_struts_CVE-2017-9805

 

这篇关于S2-052 远程代码执行漏洞检测与利用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/806660

相关文章

通过SSH隧道实现通过远程服务器上外网

搭建隧道 autossh -M 0 -f -D 1080 -C -N user1@remotehost##验证隧道是否生效,查看1080端口是否启动netstat -tuln | grep 1080## 测试ssh 隧道是否生效curl -x socks5h://127.0.0.1:1080 -I http://www.github.com 将autossh 设置为服务,隧道开机启动

IDEA配置Tomcat远程调试

因为不想把本地的Tomcat配置改乱或者多人开发项目想测试,本文主要是记录一下,IDEA使用Tomcat远程调试的配置过程,免得一段时间不去配置到时候忘记(毕竟这次是因为忘了,所以才打算记录的…) 首先在catalina.sh添加以下内容 JAVA_OPTS="-Dcom.sun.management.jmxremote=-Dcom.sun.management.jmxremote.port

基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别

转发来源:https://swift.ctolib.com/ooooverflow-chinese-ocr.html chinese-ocr 基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别 环境部署 sh setup.sh 使用环境: python 3.6 + tensorflow 1.10 +pytorch 0.4.1 注:CPU环境

LoRaWAN在嵌入式网络通信中的应用:打造高效远程监控系统(附代码示例)

引言 随着物联网(IoT)技术的发展,远程监控系统在各个领域的应用越来越广泛。LoRaWAN(Long Range Wide Area Network)作为一种低功耗广域网通信协议,因其长距离传输、低功耗和高可靠性等特点,成为实现远程监控的理想选择。本文将详细介绍LoRaWAN的基本原理、应用场景,并通过一个具体的项目展示如何使用LoRaWAN实现远程监控系统。希望通过图文并茂的讲解,帮助读

基于深度学习的轮廓检测

基于深度学习的轮廓检测 轮廓检测是计算机视觉中的一项关键任务,旨在识别图像中物体的边界或轮廓。传统的轮廓检测方法如Canny边缘检测和Sobel算子依赖于梯度计算和阈值分割。而基于深度学习的方法通过训练神经网络来自动学习图像中的轮廓特征,能够在复杂背景和噪声条件下实现更精确和鲁棒的检测效果。 深度学习在轮廓检测中的优势 自动特征提取:深度学习模型能够自动从数据中学习多层次的特征表示,而不需要

自动驾驶---Perception之Lidar点云3D检测

1 背景         Lidar点云技术的出现是基于摄影测量技术的发展、计算机及高新技术的推动以及全球定位系统和惯性导航系统的发展,使得通过激光束获取高精度的三维数据成为可能。随着技术的不断进步和应用领域的拓展,Lidar点云技术将在测绘、遥感、环境监测、机器人等领域发挥越来越重要的作用。         目前全球范围内纯视觉方案的车企主要包括特斯拉和集越,在达到同等性能的前提下,纯视觉方

Chromium 调试指南2024 - 远程开发(下)

1. 引言 在《Chromium 调试指南2024 - 远程开发(上)》中,我们探讨了远程开发的基本概念、优势以及如何选择合适的远程开发模式。掌握了这些基础知识后,接下来我们将深入了解如何在远程环境中高效地进行Chromium项目的调试工作。 调试是开发过程中至关重要的一环,特别是对于像Chromium这样复杂的大型项目。远程调试不仅可以充分利用远程服务器的强大计算资源,还能确保开发环境的一致

YOLOv9摄像头或视频实时检测

1、下载yolov9的项目 地址:YOLOv9 2、使用下面代码进行检测 import torchimport cv2from models.experimental import attempt_loadfrom utils.general import non_max_suppression, scale_boxesfrom utils.plots import plot_o

plsql远程访问数据库

本机为win7 32位系统,为了学习oracle,装了个vbox虚拟机,再装了个win7虚拟机,内装oracle 11g(win7如果要装10g,要选择vista版本,win版本会安装报错).oracle11g安装完后有报了个错误,当时没注意,现在也忘了什么错了,但是不影响使用.后来想在本机安装plsql来远程连接虚win7上的oracle.查了一些资料,步骤如下: 1.下载plsql,安

【漏洞复现】畅捷通T+ keyEdit.aspx SQL漏洞

0x01 产品简介 畅捷通 T+ 是一款灵动,智慧,时尚的基于互联网时代开发的管理软件,主要针对中小型工贸与商贸企业,尤其适合有异地多组织机构(多工厂,多仓库,多办事处,多经销商)的企业,涵盖了财务,业务,生产等领域的应用,产品应用功能包括: 采购管理、库存管理、销售管理、生产管理、分销管理、零售管理、往来管理、现金银行管理、总账、移动应用等,融入了社交化、移动化、电子商务、互联网信息订阅等元素