🕊️
[Level 10 ~ 19] OverTheWire Bandit Writeup
はじめに
←←(Level0~9)
→→(Level20~29)
サイト
環境
- macOS
- Intelチップ
Tips
macOS 使いは,パスワードをコピーした度に,下記のコマンドをローカルで実行すると,良い感じにパスワードが保存できてタイヘンヨーイ
pbpaste >> password && echo "" >> password && cat -n password
ルール
ログインの前提
前回レベルのユーザー名
を指定し,(ssh -p 2220 bandit.labs.overthewire.org -l <前回レベルのユーザー名>
) 前回レベルのパスワード
を入力し,ログインしたものとします.(i.e. シェルはローカルではなく,ログイン後の bandit.labs.overthewire.org
上を想定しています.)
→Level10
- 一旦
grep
でバイナリを見て(-a
オプション),=====
で検索をかけてみる. - いくつかの
==========
が見えたすぐ次にパスワードらしきものが見えたので,awk
コマンドを使って少し見やすくする.-
==========
を区切り文字とし(-F
),/==========/
で区切って,二つ目の中身を出力するprint $2
.
-
bandit9@bandit:~$ cat data.txt | grep -a "====="
// <省略>
bandit9@bandit:~$ awk -F '==========' '/==========/{ print $2 }' data.txt
the // <省略>
password // <省略>
is // <省略>
<パスワード>
→Level11
- 中身を適当に確認すると,エンコードされた文字列っぽいのが見つかった.
-
base64
でデコード(--decode
)すれば良さそう.
bandit10@bandit:~$ base64 --decode data.txt
→Level12
- シーザー暗号を解けば良い.
- せっかくなので,
awk
コマンドの練習じゃ.
bandit11@bandit:~$ awk 'BEGIN {a="abcdefghijklmnopqrstuvwxyz"; A="ABCDEFGHIJKLMNOPQRSTUVWXYZ";} \
{ans=""; for (i=1; i<=length($0); i++) { c=substr($0,i,1); \ if (c ~ /[a-z]/) { pos=index(a,c); ans=ans substr(a,(pos-13+26)%26,1) } \
else if (c ~ /[A-Z]/) { pos=index(A,c); ans=ans substr(A,(pos-13+26)%26,1) } \
else { ans=ans c } } \
print ans }' data.txt
→Level13
-
file
コマンドと展開を繰り返していく. -
data9.bin
を見る時の注意点として,.bin
ファイルをless
で見ようとすると,ISO
ファイルと勘違いするので,cat
で見よう.
bandit12@bandit:/tmp$ cd "$(mktemp -d)"
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ cp ~/data.txt .
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ file data.txt
data.txt: ASCII text
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ less data.txt
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ xxd -r data.txt > data1
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ file data1
data1: gzip compressed data, was "data2.bin", last modified: Thu Sep 19 07:08:15 2024, max compression, from Unix, original size modulo 2^32 574
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ mv data1 data1.gz
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ gzip -dc data1.gz > data2.bin
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ file data2.bin
data2.bin: bzip2 compressed data, block size = 900k
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ bzip2 -dc data2.bin > data3
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ file data3
data3: gzip compressed data, was "data4.bin", last modified: Thu Sep 19 07:08:15 2024, max compression, from Unix, original size modulo 2^32 20480
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ mv data3 data3.gz
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ gzip -dc data3.gz > data4.bin
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ file data4.bin
data4.bin: POSIX tar archive (GNU)
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ tar -xf data4.bin
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ ls
data1.gz data2.bin data3.gz data4.bin data5.bin data.txt
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ file data5.bin
data5.bin: POSIX tar archive (GNU)
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ tar -xf data5.bin
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ ls
data1.gz data2.bin data3.gz data4.bin data5.bin data6.bin data.txt
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ file data6.bin
data6.bin: bzip2 compressed data, block size = 900k
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ bzip2 -dc data6.bin > data7
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ file data7
data7: POSIX tar archive (GNU)
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ tar -xf data7
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ ls
data1.gz data2.bin data3.gz data4.bin data5.bin data6.bin data7 data8.bin data.txt
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ file data8.bin
data8.bin: gzip compressed data, was "data9.bin", last modified: Thu Sep 19 07:08:15 2024, max compression, from Unix, original size modulo 2^32 49
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ mv data8.bin data8.gz
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ gzip -dc data8.gz > data9.bin
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ file data9.bin
data9.bin: ASCII text
bandit12@bandit:/tmp/tmp.zgCaP7CjwA$ cat data9.bin
→Level14
-
ssh
のキーを指定してbandit14
としてログインする.-
-p
でポート指定も忘れずに
-
-
bandit14
になったら指定の場所で鍵を入手する.
bandit13@bandit:~$ ls
sshkey.private
bandit13@bandit:~$ ssh -p 2220 -i sshkey.private bandit14@localhost
bandit14@bandit:~$ less /etc/bandit_pass/bandit14
→Level15
- パスワードは普通に
echo
で直入力でも良いが,今回はcat
でやった. -
nc
コマンドを用いて実行した(あんまこのコマンドよくわかってない).
bandit14@bandit:~$ cat /etc/bandit_pass/bandit14 | nc localhost 30000
→Level16
-
→Level15
と同じことをSSL/TLS
をして実行すれば良い. - cf:
$ cat /etc/bandit_pass/bandit15 | openssl s_client -ign_eof -connect localhost:30001
bandit15@bandit:~$ cat /etc/bandit_pass/bandit15 | ncat --ssl localhost 30001
→Level17
-
nmap
で空いてるポートを探す. - 全てに対してアクセスを試みると,
PEM
形式の秘密鍵が特定のポートのみから届く. - 秘密鍵を
sshkey.private
にコピペする. -
chmod
で権限を600
にする. - あとは
→Level14
と一緒.
bandit16@bandit:~$ nmap -p 31000-32000 localhost
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-19 04:01 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00018s latency).
Not shown: 996 closed tcp ports (conn-refused)
PORT STATE SERVICE
31046/tcp open unknown
31518/tcp open unknown
31691/tcp open unknown
31790/tcp open unknown
31960/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds
bandit16@bandit:~$ nmap -p 31000-32000 localhost | grep "tcp open" | awk -F '/tcp' '{system("cat /etc/bandit_pass/bandit16 | ncat --ssl localhost " $1)}'
Ncat: Input/output error.
<key>
Ncat: Input/output error.
Correct!
<【ここから】>
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
<【ここをコピー】>
Ncat: Input/output error.
bandit16@bandit:~$ cd /tmp/
bandit16@bandit:/tmp$ cd "$(mktemp -d)"
bandit16@bandit:/tmp/tmp.UMySK2SVGz$ vim sshkey.private # ここでペーストする.
bandit16@bandit:/tmp/tmp.UMySK2SVGz$ chmod 600 sshkey.private
bandit16@bandit:/tmp/tmp.UMySK2SVGz$ ssh -p 2220 -i sshkey.private
bandit17@bandit:~$ cat /etc/bandit_pass/bandit17
→Level18
-
diff
をとって終了.
bandit17@bandit:~$ diff passwords.old passwords.new
→Level19
-
ssh
してもすぐlogout
されてしまう. -
ssh
に続けてls
をするとreadme
が見つかる. - じゃあ,
ssh
に続けてcat readme
をするとOK.
mattsunkun@Taube:~/experiment/ctf/overthewire/bandit$ ssh -p 2220 bandit.labs.overthewire.org -l bandit18
<省略>
Byebye !
mattsunkun@Taube:~/experiment/ctf/overthewire/bandit$ ssh -p 2220 bandit.labs.overthewire.org -l bandit18 ls
<省略>
readme
mattsunkun@Taube:~/experiment/ctf/overthewire/bandit$ ssh -p 2220 bandit.labs.overthewire.org -l bandit18 cat readme
<省略>
<答え>
おわりに
←←(Level0~9)
→→(Level20~29)
筆者について
Discussion