CTFやってみた

今日,このようなイベントがありました.

atnd.org

ここで,CTFをしてきました.

OverTheWire: Bandit

このCTFは初歩だということで,CTF初心者の僕にちょうど良いです.

前提

今回のCTFでは,UNIXコマンドを使います. なので,Linuxを使えるようにしましょう.

CTFではおなじみの,Kali Linuxというものをインストールします.

https://www.kali.org/

インストール方法は検索すれば簡単に見つかるので,省略.

https://qiita.com/mah-nyan/items/754206330c0d43c71935

実際に解く

Kali Linuxを使って OverTheWire: Bandit を解いていきます.

Level 0 → Level 1

この問題は,sshするという問題です.普通に,ポートを指定してsshします. Kali で端末を開いて,

ssh bandit0@bandit.labs.overthewire.org -p 2220

すると,readmeというファイルがあるので,

cat readme

これが次のパスワードです.

Level 1 → Level 2

新しく端末を開く,もしくは exit して bandit1 でログインします.パスワードは,マウスでコピペすると簡単に入力ができます.

ログイン後,lsをすると - という名前のファイルがあります. cat - としても見ることができないので,

cat ./-

これで表示されます.

Level 2 → Level 3

lsをすると, spaces in this filename というファイルが出てきます. このファイルをcat すれば良さそうですが,普通に入力するとダメなので,スペースをエスケープしてあげる必要があります. なので,

cat spaces\ in\ this\ filename

Level 3 → Level 4

lsをすると,inhereというフォルダがあるので,中に入ります.

cd inhere

再びlsをしてみますが,中に何もありません. もしかしたら,隠しファイルがあるかもしれないので,

ls -a

.hiddenというファイルがあるとわかります. なので,

cat .hidden

Level 4 → Level 5

先程同様 inhereに入って,lsをします. -file00 ~ -file09 というものがあります.

とりあえず,cat で -file00 を見てみると,

cat ./-file00

文字化けしたようなものが出てきます. 人間が読めるものが出てくるものがあるはずなので,確認します.

file ./*

すると,-file07だけ ASCII text と出てきます.なので,

cat ./-file07

Level 5 → Level 6

inhereに入ると,大量のディレクトリが出てきます. この中から,1033 bytes のものを探します.

find -size 1033c

すると, ./maybehere07/.file2 と出て来るので,

cat ./maybehere07/.file2

Level 6 → Level 7

somewhere on the server と書かれているので,全体から探します. 検索するものは,user が bandit7,group が bandit6,size が 33 bytes なので,

find / -user bandit7 -group bandit6 -size 33c 

Permission denied のファイルも出てきているので,

find / -user bandit7 -group bandit6 -size 33c 2>/dev/null

出てきたものをcat すればOK

cat /var/lib/dpkg/info/bandit7.password

Level 7 → Level 8

lsをすると,data.txtというものがあり,この中から "millionth"が入った単語を探します.

grep millionth data.txt

すると 一つだけ表示されるので,これが bandit8のパスワードです.

Level 8 → Level 9

一回だけ出てきているものを探します.なので sortした後,uniqなものを表示します.

sort data.txt | uniq -u

Level 9 → Level 10

file data.txt

をすると,形式がdataとなっています. そのため,stringsコマンドで文字にします. また,連続する=が含まれているということなので,

strings data.txt | grep ==

Level 10 → Level 11

data.txtはbase64エンコードされているらしいので,デコードします.

base64 -d data.txt

Level 11 → Level 12

問題文に13文字ぶんずらしていると書かれています. ということは,aがn, zがmなので,

cat data.txt | tr ‘[a-zA-Z]’ ‘[n-za-mN-ZA-M]’

この問題,メンバーはpythonで解いていたみたい.

ここで,時間が終わってしまいました.

感想

問題が解けたときの快感が凄まじいです.

次 何をすれば雰囲気が分かるので,man でどのようなオプションがあるのか見ると,大体理解できます.(それでも分からなければGoogle先生に)

あと今回,グループでこのCTFをしていたので,わからないことを気軽に聞けた点がとても良かったです.

CTF少し勉強してみようかな...

ではでは👋


[追記]

しゃしん氏が,level 20までの解き方を載せてくれています.

kutsurogenai.net