---
description: >-
  Environment
  はデバッグモードのLaravelサイトに対し、URL経由のCVEを悪用して環境を「preprod」に設定。デバッグクラッシュによる認証バイパスを利用して内部サイトにアクセス。さらに別のCVEでLaravelファイルマネージャーの制限を回避しWebシェルを設置。GPG鍵を取得してユーザー昇格後、BASH_ENVを保持できるsudo権限を悪用しルートへ昇格。
---

# Environment 【M】

{% hint style="success" %}
**Lab URL:** [**https://app.hackthebox.com/machines/Environment**](https://app.hackthebox.com/machines/Environment)

**宛先IP** : <mark style="color:red;">**10.10.11.67**</mark>
{% endhint %}

## <mark style="color:orange;">偵察（Recon）</mark>

### <mark style="color:$primary;">Nmap</mark>

> sudo nmap -sV -sC -oA environment 10.10.11.67

```javascript
# Nmap 7.95 scan initiated Sun Sep  7 21:39:59 2025 as: /usr/lib/nmap/nmap -sV -sC -vv -oA nmap/environment 10.10.11.67
Nmap scan report for environment.htb (10.10.11.67)
Host is up, received reset ttl 63 (0.18s latency).
Scanned at 2025-09-07 21:40:00 JST for 14s
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 63 OpenSSH 9.2p1 Debian 2+deb12u5 (protocol 2.0)
| ssh-hostkey: 
|   256 5c:02:33:95:ef:44:e2:80:cd:3a:96:02:23:f1:92:64 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGrihP7aP61ww7KrHUutuC/GKOyHifRmeM070LMF7b6vguneFJ3dokS/UwZxcp+H82U2LL+patf3wEpLZz1oZdQ=
|   256 1f:3d:c2:19:55:28:a1:77:59:51:48:10:c4:4b:74:ab (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ7xeTjQWBwI6WERkd6C7qIKOCnXxGGtesEDTnFtL2f2
80/tcp open  http    syn-ack ttl 63 nginx 1.22.1
| http-methods: 
|_  Supported Methods: GET HEAD
|_http-favicon: Unknown favicon MD5: D41D8CD98F00B204E9800998ECF8427E
|_http-title: Save the Environment | environment.htb
|_http-server-header: nginx/1.22.1
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Read data files from: /usr/share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sun Sep  7 21:40:14 2025 -- 1 IP address (1 host up) scanned in 15.07 seconds
```

`OpenSSH`と`nginx`のバージョンから判断すると、ホストは`Debian12 Bookworm`を実行していると思われます。Webサーバーは`environment.htb`にリダイレクトしています。<kbd>ffuf</kbd>で簡単なスキャンを実行し、異なる応答を返すサブドメインがないか確認してみましたが、見つかりません。

初めに`/etc/hosts`ファイルに以下を追加します。

10.10.11.67 environment.htb

### <mark style="color:$primary;">Website - TCP 80</mark>

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FXpbxggrr6SmuVqPfw1sL%2Fimage.png?alt=media&#x26;token=4dfea571-9b92-47e7-b364-8dde58554a8e" alt="" width="563"><figcaption></figcaption></figure>

ページにはリンクがありませんでした。下部にはメーリングリストにメールアドレスを追加するフォームがあります。メールアドレスを入力すると、追加が成功した旨が表示されます：

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FsncrWIfHk9ds757jbGVR%2Fimage.png?alt=media&#x26;token=6c34b2cd-5446-4388-91d8-6a818b8f403e" alt=""><figcaption></figcaption></figure>

そして、ページフッターには、サイトのバージョンが「Production v1.1」と記載されています：

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FiDG0lk09omuZB3qFm08m%2Fimage.png?alt=media&#x26;token=cacaa63c-8122-4a0f-becf-f3b2b9c7529b" alt=""><figcaption></figcaption></figure>

### <mark style="color:$success;">Nuclei</mark>

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2Fj77B0nNM4fiNZcTNXixL%2Fimage.png?alt=media&#x26;token=16e0c003-71ca-483c-a1cd-dd4b2103d966" alt=""><figcaption></figcaption></figure>

次に、[Nuclei](https://github.com/projectdiscovery/nuclei)スキャンを実行しました。Nucleiは、バージョン情報やHTTPレスポンスヘッダー、およびその2つのクッキーに関する詳細情報を列挙するのに役立ちます。このクッキーの情報から、それが[Laravel](https://laravel.com/)であることがほぼ判明します。これらのクッキーはLaravelのクッキーです。2つ目の`laravel_session`は、アプリケーションによって`<何か別の名前>_session`に改名される可能性がありますが、Laravelは常に`XSRF-TOKEN`クッキーと`_session`クッキーの両方を設定します。

Laravelは私が何度もハッキング（調査・解析）した経験があるPHPフレームワークです。この404ページは、デフォルトのLaravelの404ページです。

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FBVx857pyEz3pl6r8TsHq%2Fimage.png?alt=media&#x26;token=679622a7-a748-4698-8416-5488ab01feac" alt=""><figcaption></figcaption></figure>

どうやって判断しましたかといいますと[0xdfさん](https://0xdf.gitlab.io/cheatsheets/404#laravel)のウェブでおきる404エラーページのチートシートがあります。

### <mark style="color:$primary;">ディレクトリブルートフォース</mark>

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FFig28DQ2ncw27FzsBM6b%2FScreenshot%202025-09-08%20134852.png?alt=media&#x26;token=01f6c846-7057-43fb-a057-10f397757a4e" alt=""><figcaption></figcaption></figure>

1. -b = ネガティブステータスコード（設定されている場合、status-codesを上書きします）。 403&404のエラーよく出てたため...

/login はログインフォームを表示します:

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FRr9SCcP5FHMmclIybRAL%2Fimage.png?alt=media&#x26;token=ace87e29-6862-4880-aaa2-670a3646acee" alt="" width="563"><figcaption></figcaption></figure>

/mailing は、ユーザーがメールアドレスを送信した際の POST リクエストを受け取ります。

/up はステータスページを表示します：

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FQLnVPr9MjUEdmt1KrQS8%2Fimage.png?alt=media&#x26;token=97fd73f4-3459-43d9-a38e-5bda78c5a5c2" alt="" width="563"><figcaption></figcaption></figure>

/storage は 403 を返します。ここにはさらに多くのものが存在する可能性があります。これはファイルストレージなどに使用される Laravel の標準ディレクトリです。/build と /vendor も 403 を返し、Laravel にとってあまり重要ではないディレクトリです。

/upload は Laravel のデバッグページを返します：

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FhQYiD4dNpymg3bzhKXdZ%2FScreenshot%202025-09-08%20135844.png?alt=media&#x26;token=0c3f208b-a50d-477e-b008-639b24396461" alt=""><figcaption></figcaption></figure>

こちらでは、Laravel 11.30.0 というバージョン番号以外に、あまり多くの情報を漏らしていません。

## <mark style="color:orange;">www-data ユーザーとしてシェルを実行</mark>

### <mark style="color:$primary;">アクセス管理ダッシュボード</mark>

#### <mark style="color:$warning;">CVE-2024-52301 背景</mark>

このような場合、最も手っ取り早い方法は、対象ソフトウェアのバージョンのリリース日を確認することです。もし古いバージョンであれば、それに関連するCVE（共通脆弱性識別子）やPoC（概念実証コード）を調べるとよいでしょう。



CVE-2024-52301 は、このバージョンの Laravel に存在する脆弱性です：

> PHP の register\_argc\_argv ディレクティブが有効に設定されている場合、ユーザーが特別に細工されたクエリ文字列を含む任意の URL を呼び出すと、リクエスト処理時にフレームワークが使用する環境を変更することが可能になります。

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FsmiYE4tYZyQz9xNzrb9b%2Fimage.png?alt=media&#x26;token=3f0c516a-24fc-492f-b8a9-aa76110fbc12" alt="" width="513"><figcaption><p><a href="https://github.com/Nyamort/CVE-2024-52301">https://github.com/Nyamort/CVE-2024-52301</a></p></figcaption></figure>

これは少し曖昧です。[このページ](https://github.com/Nyamort/CVE-2024-52301)でより詳細に説明されています。`php.ini`ファイルで`register_argc_argv`が有効になっている場合、ユーザーは`--env=dev`のようなGETパラメータを注入して、フレームワークが使用する環境を変更できます。



・<kbd>http://environment.htb/?--env=local</kbd> にアクセスすると、ページフッターのバージョンが変更されます：

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FJEhzLcHbqMrs7iJWVaMM%2Fimage.png?alt=media&#x26;token=7aba3b3d-5ba8-4920-a981-f8b0df6b5f43" alt=""><figcaption></figcaption></figure>

実際、任意の文字列（`akuma`）に変更可能です：

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FeBLE1K2REVuAtTsWdZ07%2Fimage.png?alt=media&#x26;token=56c6a5fb-b77b-47a8-b1b2-a5ababb01f8a" alt=""><figcaption></figcaption></figure>

もう少しPHPスクリプト（`<?php echo "Hello World" ?>`）とかで遊んでみると：

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2F9TmkHTAbs5r00ghJOtkr%2Fimage.png?alt=media&#x26;token=92ce81be-1cc6-40f1-a4a3-e0e531685f90" alt=""><figcaption></figcaption></figure>

私個人の間違えでもありますがスクリプト書き間違ったら（`<?php echo＝"Hello World" ?>`）スペースを＝に：

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FEKwXvSgFyjLrQvkPnqRY%2Fimage.png?alt=media&#x26;token=359f1298-7632-4dcd-9eb5-4d8fb9fa619f" alt=""><figcaption></figcaption></figure>

クロスサイトスクリプティングもできなかった。ですが、これがどのように役立つかはまだ明らかではありません。

#### <mark style="color:$danger;">ログインページのエラー</mark>

明らかにLaravelのデバッグモードが動作しているようだ。Burp RepeaterにログインPOSTリクエストを送信し、少し試してみる。再送信するとリダイレクトが返ってくる：

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FbefVjgw6bqAYtgiSAKpU%2FScreenshot%202025-09-08%20151013.png?alt=media&#x26;token=8eba6ea8-7622-4c83-9014-fd020d468d87" alt=""><figcaption></figcaption></figure>

空のメールやパスワードを送信しても、同じリダイレクトが送られるだけです。しかし、メールパラメータを完全に削除すると、クラッシュします：

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FzWDoEz2NtHTh1OS4A9oE%2FScreenshot%202025-09-08%20151143.png?alt=media&#x26;token=0b2afba9-1d4d-4c7c-a58f-2faae5f1d504" alt=""><figcaption></figcaption></figure>

デバッグモードであるため、多くの情報を含むようにレンダリングされます：

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FIeZmuIVlHCqoF8xKt6cf%2Fimage.png?alt=media&#x26;token=c1f2c4e6-c80a-40f9-9ca8-68536c734043" alt=""><figcaption></figcaption></figure>

<kbd>$keep\_loggedin</kbd> は `if / elseif` で True または False に設定されています。７５行目見ると、送信された値が「False」でも「True」でもない場合、75行目でクラッシュします。

メールパラメータを再追加し、`remember`を「`hello`」に設定します：

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FJqzEKXjsJsGelP5qeuXa%2Fimage.png?alt=media&#x26;token=de3b2741-8d52-4edd-aecd-33755091556e" alt=""><figcaption></figcaption></figure>

７９行目から８３行目までアプリの環境変数が「preprod」に設定されている場合、認証検証をバイパスし、ID 1のユーザーとしてログインできることを示しています！

#### <mark style="color:$danger;">ログインバイパス</mark>

ログインページに戻り、Burp Proxyのインターセプトを有効にします。クライアントサイドの検証を満たす任意の認証情報でログインします。インターセプトされたリクエストでは、パスに <kbd>?--env=preprod</kbd> を追加してみると:

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FaVsCZRy4MKv1uB1vegCk%2Fimage.png?alt=media&#x26;token=f4b795bd-11ca-4768-92e4-93bbbdc5a464" alt=""><figcaption></figcaption></figure>

ログインバイパスできいて、ブラウザが管理ダッシュボードを読み込んでくれました：

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FWgh4pbN1sr0SkH5nj3Xs%2Fimage.png?alt=media&#x26;token=c5d4cdf5-6dfc-48e7-bfcc-81d5b0d586a6" alt=""><figcaption></figcaption></figure>

### <mark style="color:$primary;">Shell経由のLaravelファイルマネージャー</mark>

#### <mark style="color:$danger;">ダッシュボード列挙</mark>

メインダッシュボードページはかなりシンプルです。操作できる要素は何もありません。「プロフィール」リンクから、現在のユーザーのプロフィール写真を更新できます：

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2Flo8PKQ78v5yulbnMHKy1%2Fimage.png?alt=media&#x26;token=f7380223-94de-4eda-a489-259e70e2d8e6" alt=""><figcaption></figcaption></figure>

現在、<kbd>`http://environment.htb/management/dashboard`</kbd> にアクセス可能ですが、先ほどバイパスログインに使用した <kbd>?--env=preprod</kbd> のパラメータも、この<kbd>`http://environment.htb/management/dashboard?--env=preprod`</kbd>で利用できます。何か隠されたページが存在しないかを確認するため、このパラメータを付けてアクセスしてみました。その結果、phpinfo のページが表示されました。

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FXDALDxiIdBU3v4gjV4HQ%2FScreenshot%202025-09-08%20164013.png?alt=media&#x26;token=9b4075cf-7e35-4bbe-9592-bf515fb933ed" alt=""><figcaption></figcaption></figure>

同様にこの方法(<kbd>http://environment.htb/management/info?--env=preprod</kbd>)で info ファイルにもアクセスでき、中身を確認したところ、特に有用な情報やパスワードなどは含まれていませんでした。

<figure><img src="https://2332894340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEdOMDo0CmDiko2Wp2e9E%2Fuploads%2FZtJ03jUw9sDmpzgwvspe%2Fimage.png?alt=media&#x26;token=9008e615-7619-4cbc-ba06-301abab558e3" alt="" width="563"><figcaption></figcaption></figure>



























