OverTheWire のbanditをやる(途中)
途中までだけど、とりあえず詰まってしまったのでできてるところまで...
周辺知識を理解するところまでが最終的な目標ですが、まずは解ききることを優先します。どうしてもわからない所はwrite upを見るつもりですがなるべく自分で...
※ちょっと放棄気味(18/12/29/14:34)
Level0→1
ユーザ名bandit0,ホスト名bandit.labs.overthewire.orgでsshするだけ。パスワードは書いてある通りbandit0に。
Level1→2
ホームディレクトリのreadmeをcat等で読むだけ
boJ9jbbUNNfktd78OOpsqOltutMc3MY1
Level2→3
-っていうファイル名なので、"cat -" とかやるとオプションと勘違いされちゃう。絶対パスで指定する。
$ cat /home/bandit1/-
CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9
Level3→4
ファイル名にスペースが入ってるのでバックスラッシュ\でエスケープさせる
$cat spaces\ in\ this\ filename
UmHadQclWmgdLOKQ3YNgjWxGoRMb5luK
Level4→5
$ls -a すると、隠しファイル”.hidden”があったからcatで読む。
pIwrPrtPN36QITSp3EQaw936yaFoFgAB
Level5→6
”-file00”から”-file09”の9つのファイルがあってhuman-readableなものを探せってことだった。
$ file /home/bandit4/inhere/-file0*
って打ってみたら-file07だけASCII textだったのでcatで読んだ。
koReBOKuIDDepwhWk7jZC0RTdopnAYKh
Level6→7
inhereディレクトリのなかに更にmaybeinhere01からmaybeinhere19まであって、更にその中にもいくつかファイルがある。人間が読める,1033バイト,実行不可っていう条件があるのでfindコマンドで探すことにした。
$ find /home/bandit5/inhere/ -size 1033c
って打ったら、/home/bandit5/inhere/maybehere07/.file2だけが条件に当てはまった(他の条件は使わなかった)のでこれをcatした。
DXjZPULLxYr17uwoI01bNLQbtFemEgo7
Level7→8
level6と同じ感じだけれど今度は検索すべき範囲がサーバ全体っていうことに加えて条件も変わった。所有者はbandit7、所有グループはbandit6,サイズが33バイト。findのオプションについて調べていたら-lsが使えそうだったので
$ find / -size 33c -ls|grep bandit7
ってやったらだいぶ絞り込めた。
適当にcatして、/var/lib/dpkg/info/bandit7.passwordというところにあった。
HKBPTKQnIay4Fw76bEy8PVxKEDQRKTzs
Level8→9
”英単語 + flagっぽい文字列”っていうのがひたすら並んでた。
これはgrepするだけででいい。
cvX2JJa4CFALtqS87jk27qwqGhBM9plV
Level9→10
ひたすら並んでる中で、重複していない行のものがフラグだよってこと。“cat 重複”とかGoogleで調べてるうちにuniqコマンドがあったことを思い出した。
$ sort data.txt |uniq -u
UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR
Level10→11
catすると一見文字化けして読めないように見えるけれど、いくつかの’=‘文字で始まるhuman-readableな文字列があるらしい。そういうことならstringsコマンドで良さそう。
$ strings data.txt とやって該当するものが見つかった
truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk
Level11→12
Base64で暗号化されてるので、
$ base64 data.txt -d
でデコードするだけだった。(この程度なら反射的に解けちゃうんだけども、そもそも暗号周り全然知らないから勉強しなきゃなぁ…)
IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR
Level12→13
ROT13。戻してくれるページを調べて、そこに投げておしまい。
5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu
Level13→14
去年一回解いたはずの問題なんだけど、改めて見たらそもそもhexdump(16進ダンプ)ってなんだっけって感じになって色々調べた。どうやらバイナリとか色んなデータをそのまま16進数の形式で表示するらしい。xxdコマンドの-rオプションを使えば復元出来るみたいなので、/tmp下にディレクトリを作って
$ xxd -r data.txt > /tmp/myname_yamahiro/test
とやってみて、次にこいつをfileコマンドで調べてみた。
/tmp/myname_yamahiro/test: gzip compressed data, was…(略)ということで、どうやらgzipで圧縮されているらしい。gzip -d testってやったらunknown suffix -- ignored って出てきて、どうやら拡張子を.gzにしないとダメみたいだったのでmv test test.gz でファイル名を変更してからgzip -d test.gzってやったらちゃんと展開できた。
ここで出てきたtestっていうファイル(さっきのtestとは別物)をfileコマンドで調べるとbzip2だったから、拡張子.bz2を付けて更に展開。
こんな感じで出てきたものを何度も展開していくとbata5.binというやつが出てくる…と思ったらこいつもtarだった時はイラッとしたけど、本当に最後まで展開したら8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYLというflagが出てきた…疲れたなぁ。
Level14→15
次のlevelに進むために必要なパスワード(flag)が別のユーザしか読めないファイルに書いてある。パスワードはわからないけどssh鍵はあるということなので、sshの-iオプション使い、ssh -i sshkey.private bandit14@localhost で入って、さっきのファイルをcat。4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e
Level15→16
ネットワークは今までロクに勉強してこなかったから、サーバに文字列投げるだけだけど分からなかった。仕方ないのでとりあえずnc(というコマンドがネットワークのスイスアーミーナイフってことだけは授業で習って知っていたので)調べた。…まぁncの一番基本的な使い方なので秒で出てきた。
nc localhost 30000 ってやって、前問で得たflagを投げてみたらcorrect!って言ってflagを得られた。BfMYroe26WYalil77FoDi9qh59eK5xNr
Level16→17
SSL暗号化通信してlocalhostの30001番ポートに前問のパスワードを投げる問題。openSSL調べて、ヒットしたサンプルをコピーしてごちゃごちゃやってたら出来たんだけど、そもそもopensslの引数のとり方とかなんかもう色々よくわからないから後で調べてまとめる(なので余裕があれば追記予定)
$ echo "BfMYroe26WYalil77FoDi9qh59eK5xNr"|openssl s_client -connect localhost:30001 -ign_eof
とやったらcorrect!と帰ってきてcluFn7wTiGryunymYOu4RcffSxQluehd
Level17→18(途中)
再びパスワード提出系の問題。ポート番号31000-32000のどこかがlistenになっているとのこと。
$ nmap -sT -p 31000-32000 localhost
とやってみると、ポート番号31518と31790の2つが開いていた。
echo "cluFn7wTiGryunymYOu4RcffSxQluehd"|openssl s_client -connect localhost:31518 -ign_eof
と
echo "cluFn7wTiGryunymYOu4RcffSxQluehd"|openssl s_client -connect localhost:31790 -ign_eof
どちらも試したら後者の方でcorrect!って帰ってきた。しかし今回得られたはflagではなくてRSA秘密鍵だった。これ使ってssh -iでログインするんだと思ったけれどホームディレクトリにはファイル作れないっぽいので、/tmp下に適当にファイル作ってコピペした。これでログインを試みたら、”他のユーザも見れるようになってるパーミッション”ではダメだよって起こられたから600に設定して再度試したけれどこれもダメ。今度のエラーは.ssh/known_hostsに書き込めないよってことみたい(そもそもls -aしても無い)。ここで手詰まり中。