内容简介:0x00 漏洞简介加固建议:
0x00 漏洞简介
加固建议:
对 Structs 2 版本进行升级以更新安全补丁:
Struts 2.3.x 版本升级到 2.3.35
Struts 2.5.x 版本升级到 2.5.17
0x01 补丁分析
在github上进行Tag对比
分析patch,定位问题点
https://github.com/apache/struts/commit/918182344cc97515353cc3dcb09b9fce19c739c0
0x02 环境搭建
根据漏洞作者的博客描述,直接使用Struts2-2.3.34的showcase,修改struts-actionchaining.xml
使用${1+1}验证漏洞存在
0x03 漏洞分析
DefaultActionMapper调用parseNameAndNamespace()解析namespace和name。当alwaysSelectFullNamespace为true时,namespace的值可以通过uri控制
Action执行结束时,调用ServletActionRedirectResult.execute()进行重定向Result的解析,通过ActionMapper.getUriFromActionMapping()重组namespace和name后,由setLocation() 将带namespace的location放入父类StrutsResultSupport中
StrutsResultSupport拿到location后,通过TextParseUtil.translateVariables()调用OgnlTextParser.evaluate()解析执行url中的OGNL表达式,导致代码执行
0x04 利用条件
最小条件:
1. alwaysSelectFullNamespace值为true
2. Struts2配置文件中,action元素未设置namespace属性,或使用了通配符
漏洞场景:
1. 在Struts2配置文件中,对未正确配置的action元素提供如下三类返回元素:
a. Redirect Action
b. Action Chaining
c. Postback Result
2. 在模板中使用url元素标记:
0x05 PoC编写
使用Struts2老版本的PoC无法正常弹出计算器,会在获取#context时得到null值,导致['com.opensymphony.xwork2.ActionContext.container']求值时的source为空,抛出异常
通过跟踪OGNL底层代码发现,在比较新的版本的OGNL包中,OgnlContext移除了CONTEXT_CONTEXT_KEY、CLASS_RESOLVER_CONTEXT_KEY和MEMBER_ACCESS_CONTEXT_KEY,使OGNL表达式无法继续使用#context、#_classResolver和#_memberAccess来获得相应对象
获取不到context就无法进行后续Struts2的沙盒绕过。通过分析,发现在#request域下的struts.ValueStack对象中存在context属性,因此对S2-052的Payload进行一下简单改造即可
成功弹出计算器
另外,由于Struts2.5中,几个excluded的map使用的是immutable collection,不允许修改,因此该PoC只适用于Struts2.3环境
再多说一嘴,Struts2的showcase项目没有通过大家知道的struts.mapper.alwaysSelectFullNamespace配置项控制alwaysSelectFullNamespace的值,而是通过@Inject进行了IoC
0x06 参考
1. https://cwiki.apache.org/confluence/display/WW/S2-057
2. https://lgtm.com/blog/apache_struts_CVE-2018-11776
3. https://semmle.com/news/apache-struts-CVE-2018-11776
以上所述就是小编给大家介绍的《S2-057原理分析与复现过程(POC)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- ThinkPHP远程命令执行漏洞原理及复现
- 路由器漏洞复现:从原理到第一步验证
- 【漏洞复现】WordPress插件Quizlord 2.0 XSS漏洞复现与分析
- Ghost Tunnel复现
- Paxos与“幽灵复现”
- CVE-2010-3333漏洞复现
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
一站式学习C编程
宋劲杉 / 电子工业出版社 / 2011-3 / 59.00元
《一站式学习c编程》有两条线索,一条线索是以linux平台为载体全面深入地介绍c语言的语法和程序的工作原理,另一条线索是介绍程序设计的基本思想和开发调试方法。本书分为两部分:第一部分讲解编程语言和程序设计的基本思想方法,让读者从概念上认识c语言;第二部分结合操作系统和体系结构的知识讲解程序的工作原理,让读者从本质上认识c语言。 《一站式学习c编程》适合做零基础的初学者学习c语言的第一本教材,......一起来看看 《一站式学习C编程》 这本书的介绍吧!