内容简介:在github上进行Tag对比。分析patch,定位
在github上进行Tag对比。
分析patch,定位 问题点 。
环境搭建
根据漏洞作者的博客描述,直接使用Struts2-2.3.34的showcase项目,修改struts-actionchaining.xml。
使用${1+1}验证漏洞存在。
漏洞分析
DefaultActionMapper
调用 parseNameAndNamespace()
解析 namespace
和 name
。当 alwaysSelectFullNamespace
为 true
时, namespace
的值可以通过URL控制。
Action执行结束时,调用 ServletActionRedirectResult.execute()
进行重定向Result的解析,通过 ActionMapper.getUriFromActionMapping()
重组 namespace
和 name
后,由 setLocation()
将带 namespace
的 location
放入父类 StrutsResultSupport
中。
StrutsResultSupport
拿到 location
后,通过 TextParseUtil.translateVariables()
调用 OgnlTextParser.evaluate()
解析执行URL中的OGNL表达式,导致代码执行。
利用条件
最小条件:
-
alwaysSelectFullNamespace
值为true
- Struts2配置文件中,
action
元素未设置namespace
属性,或使用了通配符
漏洞场景:
- 在Struts2配置文件中,对未正确配置的action元素提供如下三类返回元素:
- Redirect Action
- Action Chaining
- Postback Result
- 在模板中使用url元素标记:
构造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-045的Payload进行一下简单改造即可。
成功弹出计算器。
另外,由于Struts2.5中,几个excluded的map使用的是immutable collection,不允许修改,因此该PoC只适用于Struts2.3环境。 (2.5可以尝试使用 setXXX()
覆盖map值。)
再多说一嘴,Struts2的showcase项目没有通过大家知道的 struts.mapper.alwaysSelectFullNamespace
配置项控制 alwaysSelectFullNamespace
的值,而是通过 @Inject
进行了IoC。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 漏洞分析:OpenSSH用户枚举漏洞(CVE-2018-15473)分析
- 【漏洞分析】CouchDB漏洞(CVE–2017–12635, CVE–2017–12636)分析
- 【漏洞分析】lighttpd域处理拒绝服务漏洞环境从复现到分析
- 漏洞分析:对CVE-2018-8587(Microsoft Outlook)漏洞的深入分析
- 路由器漏洞挖掘之 DIR-815 栈溢出漏洞分析
- Weblogic IIOP反序列化漏洞(CVE-2020-2551) 漏洞分析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
算法设计与应用
迈克尔 T. 古德里奇(Michael T. Goodrich)、罗伯特·塔马契亚(Roberto Tamas / 乔海燕、李悫炜、王烁程 / 机械工业出版社 / 2017-11-20 / CNY 139.00
本书全面系统地介绍算法设计和算法应用的各个领域,内容涵盖经典数据结构、经典算法、算法分析方法、算法设计方法以及算法在各个领域的应用,还包含一些高级主题。本书采用应用驱动的方法引入各章内容,内容编排清晰合理,讲解由浅入深。此外,各章都附有巩固练习、创新练习和应用练习三种类型的题目,为读者理解和掌握算法设计和应用提供了很好的素材。 本书可作为高等院校计算机及相关专业“数据结构和算法”课程的本科生......一起来看看 《算法设计与应用》 这本书的介绍吧!