VulnHubでBrainpan: 1をやってみたよ~!
VulnHubでBrainpan: 1をやってみたよ~!ということでやっていく。
https://www.vulnhub.com/entry/brainpan-1,51/
まずはいつもどおりアドレスをゲットするところから始める。
次はポートスキャン。
9999番ポートでabyssなるもの、10000番ポートでhttpサーバーが可動している模様。
まずはブラウザからhttpにアクセス。
う~ん、ヒントはなさそう。
9999番ポートで稼働中のabyssなるものはざっと検索してみたところWebサーバーぽい。netcatでアクセスしてみる。
何やらバナーが表示されパスワードの入力を求められた。
適当な文字列を入力してみても当然弾かれる。
う~ん。
dirbでもう少し10000番ポートを探索してみることにする。
/binがあるらしいのでアクセスしてみる。
ダウンロードして中身をざっと見てみる。
これは9999番ポートで出力されたバナーと全く同じ…
さらに含まれている文字列を見てみる。
文字列比較やネットワーク系の命令が見えるなぁ。
Windows Emulatorことwineを使って実行してみる。
9999番ポートにバインドしている…やっぱりBrainpanVMの9999番ポートで稼働中のものと同じものっぽい。
netcatで自分自身の9999番ポートに接続してみる。
パスワードの入力を求められているので適当な文字を入力。当然ACCESS DENIED…残念。
と思いきや次のような出力がされていた。
これはBOF攻撃ができるのか…?
Pythonでシンプルなファザーを書いてファジングしてみる。
ファジングに使ったコードは以下。
すると次のように出力された。
702bytesコピーしたところでオーバーフローしたとのこと。
ということは、オーバーフローしたポイントが502~702bytesにあるということだ。
具体的に何byte目でオーバーフローするのかさらに調査する。
文字列中の3bytes特定できれば、それが文字列中のどの部分なのかが一意に特定できる文字列を、次のコマンドで出力する。
さてこの文字列をbrainpan.exeに流し込む。
書いたコードは以下。
結果は次のようになった。
アドレス0x35724134にアクセスしようとしてエラーを起こしている。
0x35724134をascii変換すると5rA4で、このことからバッファーの大きさは先程用意した文字列の先頭からちょうど5rA4までだとわかる。
では次のようにしてその長さを求めてみよう。
バッファーの大きさは524bytesだと判明した。
さて、ここからどうするのかだが…
BOF攻撃を使ってKaliへリモートシェルを張らせるようなコマンドを実行させることができれば、BrainpanVMのシェルが取れそうだ。
msfvenomを使ってリバースシェルを張らせるペイロードを作成する。
ペイロードを含んだコードを作成して、
ncでリバースシェルを待ち受け後、実行!
すると次のような出力が得られた。
たぶんこれをBrainpanVMの9999ポートに試せば、シェルが得られるんだと思う。
ペイロードを書き込んだファイルのアドレスをBrainpanVMのアドレスに書き換えて実行してみる。ncで待ち受けるのを忘れないように!
素晴らしい!シェルが得られているようだ。
さっそく内部を調査する。
シェルを操作していると変な挙動を示す。bashのつもりで動かすとうまくいかない。
多分いま操作しているのはwindowsのシェルであってbashではないからだろう。
動かしづらいと思っていたら矢先に/bin/bashを見つけた。
ただbashが使えるのは使えるのだがいちいち直接bashを指定してやらねばならず、不便この上ない。
リバースシェルを貼らせてみる。
うまくいったようだ。いつもどおりのbashの要領で操作ができる。
さておもむろに、root権限で実行可能なファイルを調べて見ると、あるではないか!
これを使ってrootへの昇格をねらう。
このanansi_utlはいくつかのコマンドを実行できるようだ。試しにmanualコマンドを実行してみよう。
これによるとanansi_utl manualは引数に与えられたコマンドのmanページを表示するものらしい。
これは怪しい。
以下のページにあるように、vimやmanなどはその中でさらにコマンドを実行可能だということが知られている。
https://www.hackingarticles.in/linux-privilege-escalation-using-exploiting-sudo-rights/
これを利用すればroot権限を引き継いだshを呼び出すことが可能だろう。
よし!
やったね!
Thanks to superkojiman for this CTF!
あとから気づいたんだけど画像が全部透けててぜんぜんやったねじゃないじゃん…