摘要
Apache官方的struts2產品,最近出了一個遠程代碼執行漏洞,編號“S2-013”,目前是0DAY,官方沒有修補方案出現。
http://struts.apache.org/development/2.x/docs/security-bulletins.html — (公告)
官方安全公告給出了編號和簡要介紹,“A vulnerability, present in the includeParams attribute of the URL and Anchor Tag, allows remote command execution”。
但是并沒有說原理,也沒有發布任何補丁。
分析
事實上,這次struts2官方一共發了兩個漏洞,還有個叫s2-012,但是這個漏洞,看題目,應該是我之前在《Xcon2012 攻擊JAVA WEB》時的已經爆出來了,所以本文只說另一個。
struts2官方的開發傻乎乎的,比如這個漏洞,要么官方就不要發出來,既然發出來了,就應該發補丁,但是官方僅僅發了這段話,對于詳細內容,普通用戶不開放訪問。
從這段話可以大致總結一下幾點:
1、未修補的遠程代碼執行漏洞
2、includeParams參數在URLTAG中出現了問題。
僅根據這兩點,熟悉struts2運行機制和之前漏洞原理的人,都可以輕易分析出具體利用POC。
漏洞觸發:
由于官方沒有發補丁,所以最新版本的struts2還是有漏洞的,可以下載最新:Apache Struts 2.3.14 GA的示例應用。
經過簡單測試,就看到了想要的結果。
根據官方給的信息,問題出在a標簽,所以寫個jsp頁面,內容如下:
Click here.
這個是struts2標簽庫的a標簽,該標簽會在頁面上顯示當前URL,當includeParams=all時,就會顯示具體參數內容。
唯一需要解的迷,就是如何讓參數內容作為OGNL表示試執行,但是這個迷未免太好猜了,我隨手測試就出結果。
訪問url:
http://localhost:8080/blank/error.jsp?aaa=${struts2的常用POC,你懂得}
就可以直接彈計算器,POC代碼大家都有的,我只截個圖:
幾乎沒有什么分析過程,就拿到了POC,最終為了研究修補方案,只好被迫研究了漏洞原理。
漏洞原理:
Struts2標簽庫中的url標簽和a標簽的includeParams這個屬性,代表顯示請求訪問參數的含義,一旦它的值被賦予ALL或者GET或者POST,就會顯示具體請求參數內容。按照正常的需求,把參數urlEncode一下也就夠了, 問題在于,struts竟然多做了一步,這丫把參數做了OGNL解析!
代碼:
最終TextParseUtil.translateVariables會直接調用OGNL解析執行。
【編輯推薦】
- Struts2漏洞瘋狂來襲 WEB安全危機四伏
- Struts2漏洞淺析之Ongl代碼執行分析
- Struts2漏洞分析之Ognl表達式特性引發的新思路
推薦閱讀
甲骨文稱,考慮到零日漏洞補丁的增加,所以有必要重新編號。甲骨文改變了Java安全更新的號碼排列。如一位專家所言:“好像Java更新還不夠復雜一樣。”上周Oracle 支持文檔就發布了這次的改變通知。“>>>詳細閱讀
本文標題:Struts2再爆遠程代碼執行漏洞
地址:http://www.hnbrwh.com/anquan/buding/33717.html
1/2 1