β

S2-057原理分析与复现过程(POC)

Harries Blog™ 587 阅读

0x00 漏洞 简介

S2-057原理分析与复现过程(POC)

加固建议:

对 Structs 2 版本进行升级以更新 安全 补丁:

Struts 2.3.x 版本升级到 2.3.35

Struts 2.5.x 版本升级到 2.5.17

0x01 补丁分析

git hub上进行Tag对比

S2-057原理分析与复现过程(POC)

分析patch,定位问题点

https ://github.com/ apache /struts/commit/918182344cc97515353cc3dcb09b9fce19c739c0

S2-057原理分析与复现过程(POC)

0x02 环境搭建

根据漏洞作者的 博客 描述,直接使用 Struts2 -2.3.34的showcase,修改struts-actionchaining.xml

S2-057原理分析与复现过程(POC)

使用${1+1}验证漏洞存在

S2-057原理分析与复现过程(POC)

0x03 漏洞分析

Default Action Mapper调用 parse NameAndNamespace() 解析 namespace和name。当always Select FullNamespace为true时,namespace的值可以通过uri控制

S2-057原理分析与复现过程(POC)

Action执行结束时,调用ServletActionRedirectResult.execute()进行重定向Result的解析,通过ActionMapper.getUriFromActionMapping()重组namespace和name后,由setLo cat ion() 将带namespace的location放入父类StrutsResultSupport中

S2-057原理分析与复现过程(POC)

StrutsResultSupport拿到location后,通过TextParseUtil.translateVariables()调用OgnlTextParser.evaluate()解析执行url中的OGNL表达式,导致 代码 执行

S2-057原理分析与复现过程(POC)

0x04 利用条件

最小条件:

1. alwaysSelectFullNamespace值为true

2. Struts2 配置 文件中,action元素未设置namespace属性,或使用了通配符

漏洞场景:

1. 在Struts2配置文件中,对未正确配置的action元素提供如下三类返回元素:

a. Redirect Action

b. Action Chaining

c. Postback Result

S2-057原理分析与复现过程(POC)

2. 在模板中使用url元素标记:

S2-057原理分析与复现过程(POC)

S2-057原理分析与复现过程(POC)

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来获得相应对象

S2-057原理分析与复现过程(POC)

S2-057原理分析与复现过程(POC)

获取不到context就无法进行后续Struts2的沙盒绕过。通过分析,发现在#request域下的struts.ValueStack对象中存在context属性,因此对S2-052的Payload进行一下简单改造即可

成功弹出计算器

S2-057原理分析与复现过程(POC)

另外,由于Struts2.5中,几个excluded的 map 使用的是immu tab le collection,不允许修改,因此该PoC只适用于Struts2.3环境

再多说一嘴,Struts2的showcase项目没有通过大家知道的struts. mapper .alwaysSelectFullNamespace配置项控制alwaysSelectFullNamespace的值,而是通过@Inject进行了IoC

0x06 参考

1. http s://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

原文

https://mp.weixin.qq.com/s/iBLrrXHvs7agPywVW7TZrg

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。 PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处: Harries Blog™ » S2-057原理分析与复现过程(POC)

作者:Harries Blog™
追心中的海,逐世界的梦
原文地址:S2-057原理分析与复现过程(POC), 感谢原作者分享。

发表评论