天天看點

XWork ParameterInterceptor類繞過安全限制漏洞-解決2

ActionContext ac = invocation.getInvocationContext();

Map parameters = ac.getParameters();

事實上,随着項目應用的廣泛,參數的多樣性,這個“參數攔截器”并沒有幫助我們過慮,這個問題,應該是交給開發者,根據實際的情況來處理。

個人的辦法:

1、使用自己定義的ParametersInterceptor

修改項目中的:struts2-core-2.0.14.jar

檢視struts-default.xml

<a href="http://jooben.blog.51cto.com/attachment/201007/19/253727_1279528658PMXq.png"></a>

找到:

&lt;interceptor

name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/&gt;

将它注釋掉,該為:

&lt;interceptor name="params" class="com.YourCompany.filter.YourParametersInterceptor"/&gt;

然後儲存,增加一個你定義的參數攔截器,就搞定

我項目的包,經測試,該項目中沒有發現此漏洞,沒有使用屬性驅動和OGNL表達式。

<a href="http://jooben.blog.51cto.com/attachment/201007/19/253727_1279528660ZM64.png"></a>

2、官方給出的更新檔:

<a href="http://svn.apache.org/viewvc?view=revision&amp;revision=956389">http://svn.apache.org/viewvc?view=revision&amp;revision=956389</a>

同樣,在這個類中:

<a href="http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/ParametersInterceptor.java?view=markup&amp;pathrev=956389">http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/ParametersInterceptor.java?view=markup&amp;pathrev=956389</a>

修改了:

    @Override

     public String doIntercept(ActionInvocation invocation) throws Exception {

        Object action = invocation.getAction();

        if (!(action instanceof NoParameters)) {

            ActionContext ac = invocation.getInvocationContext();

            final Map&lt;String, Object&gt; parameters = retrieveParameters(ac);

            if (LOG.isDebugEnabled()) {

                LOG.debug("Setting params " + getParameterLogMap(parameters));

            }

。。。。。。。。。

2010-07-19 15:59:21,203

DEBUG [com.opensymphony.xwork2.interceptor.StaticParametersInterceptor] - Setting static parameters {}

DEBUG [com.opensymphony.xwork2.interceptor.ParametersInterceptor] - Setting params NONE

DEBUG [com.opensymphony.xwork2.interceptor.ParametersInterceptor] - Setting params ('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh) =&amp;gt; [ true ] (aaa)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew java.lang.Boolean("false"))) =&amp;gt; [  ] (asdf)(('\u0023rt.exit(1)')(\u0023rt\[email protected]@getRuntime())) =&amp;gt; [ 1 ]

exit(1),強迫伺服器正常退出了,這個讓我很吃驚!

就是這段參數:

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

目前問題解決

從svn下載下傳,獲得最新xwork-core-2.1.6

反編譯,其實他就修改了正則。

本文轉自jooben 51CTO部落格,原文連結:http://blog.51cto.com/jooben/352958