Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
TwoMillion-Machine-Writeup — From deobfuscating code.js to root, CVE-2023-0386 | Kitploit
ツール/GitHubGitHub/anxs3c/twomillion-machine-writeup
Privilege EscalationReconnaissanceExploitationLateral MovementReverse EngineeringWeb Application ExploitationCTFPenetration TestingLearning & EducationLabs & Practice
GitHubanxs3c/twomillion-machine-writeup

TwoMillion-Machine-Writeup

2ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

From deobfuscating code.js to root, CVE-2023-0386

リポジトリを見る

マシンについて

TwoMillionは、HackTheBoxで200万人のユーザーに到達したことを記念してリリースされた、Easy難易度のLinuxボックスです。このボックスには、古いハッキング可能な招待コードを含む、HackTheBoxプラットフォームの旧バージョンが搭載されています。招待コードをハッキングすると、プラットフォームにアカウントを作成できます。このアカウントを使用してさまざまなAPIエンドポイントを列挙でき、そのうちの1つを使用してユーザーを管理者に昇格させることができます。管理者アクセスを取得すると、管理者用VPN生成エンドポイントでコマンドインジェクションを実行し、システムシェルを獲得できます。また、.envファイルにデータベースの資格情報が含まれていることが判明し、パスワードの再利用により、攻撃者はボックス上でadminユーザーとしてログインできます。システムカーネルが古いことが判明したため、CVE-2023-0386を使用してrootシェルを獲得できます。

スキャン結果

ポートサービス詳細
22/tcpsshsyn-ack ttl 63 OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcphttpsyn-ack ttl 63 nginx 2million.htb

ホスト設定

2million.htb を /etc/hots ファイルに追加しました。


パス探索

gobuster を使用して 2million.htb 全体のパス探索を実行しました。

列挙中に /invite エンドポイントを発見しました。


/invite ページに移動した後


ページを調査していると、inviteapi.min.js という名前のJavaScriptファイルが読み込まれており、難読化されたコードが含まれていることに気付きました:

root@kitploit:~
eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1 i(4){h 8={"4":4};$.9({a:"7",5:"6",g:8,b:\'/d/e/n\',c:1(0){3.2(0)},f:1(0){3.2(0)}})}1 j(){$.9({a:"7",5:"6",b:\'/d/e/k/l/m\',c:1(0){3.2(0)},f:1(0){3.2(0)}})}',24,24,'response|function|log|console|code|dataType|json|POST|formData|ajax|type|url|success|api/v1|invite|error|data|var|verifyInviteCode|makeInviteCode|how|to|generate|verify'.split('|'),0,{}))

難読化解除

de4js を使用してコードの難読化を解除し、以下の読みやすいJavaScriptが得られました:


root@kitploit:~
function verifyInviteCode(code) {
    var formData = {
        "code": code
    };
    $.ajax({
        type: "POST",
        dataType: "json",
        data: formData,
        url: '/api/v1/invite/verify',
        success: function (response) {
            console.log(response)
        },
        error: function (response) {
            console.log(response)
        }
    })
}

function makeInviteCode() {
    $.ajax({
        type: "POST",
        dataType: "json",
        url: '/api/v1/invite/how/to/generate',
        success: function (response) {
            console.log(response)
        },
        error: function (response) {
            console.log(response)
        }
    })
}

makeInviteCode() : 新しい招待コードを生成する
verefyInviteCode(code) : コードが有効かどうかをチェックする

さらに理解を深めるため、検証リクエストを傍受しました:


API は JSON レスポンスを使用します


招待コードの生成とROT13の復号

ブラウザのコンソールに移動し、makeInviteCode() を実行しました。


データが ROT13 暗号で暗号化されていることに気付きました。


復号後、エンドポイント /api/v1/invite/generate を発見し、招待コードを生成しました。


Base64デコード

キー
キー 2F4BN-YI8OH-B0SCL-L8OE6 を挿入し、正常に受理されました。

登録

ホームページ

アクセスページ
このサイトで正常に動作するページは多くありませんが、アクセスページが興味深い箇所です。

APIエンドポイントの列挙
connection pack ボタンをクリックしてVPNファイルをアップロードし、GETリクエスト を傍受しました。


次に、verboseオプションとsilentオプションを指定したcurlリクエストを実行し、利用可能なAPIエンドポイントを列挙しました。



サーバーはAPIエンドポイントのJSONリストで応答しました。

管理者には、GET、POST、PUTメソッドを持つ3つのAPIエンドポイントがありました。

管理者エンドポイント /api/v1/admin/vpn/generate で管理者キーの生成を試みたところ、管理者ではなかったためキーは生成されませんでした。最初の管理者エンドポイント /api/v1/admin/auth がこれを確認しました。





Webアプリケーションの垂直権限昇格:現在の標準ユーザーを管理者に昇格させる


Content-Type: application/json と必須パラメータを備えた正しいPUTリクエストの形式を発見した後、自分のユーザーを管理者に昇格させることに成功しました。











OSコマンドインジェクション

ユーザー名フィールドに ;whoami; を注入しました。管理者専用機能に共通し、適切なサニタイズ処理が欠けていることの多い exec() や system() というPHP関数が原因ではないかと推測しました。

例えば、脆弱なコードはおそらく次のようなものだったでしょう:

root@kitploit:~
$username = $json->username;

exec("/usr/bin/cat /var/www/html/VPN/user/$username.ovpn");

このエンドポイント POST /api/v1/admin/vpn/generate には脆弱性があり、OSコマンドインジェクションが正常に実行されました。




初期アクセス:OSコマンドインジェクションによるリバースシェル(base64バイパス)

制限をバイパスするためのペイロードのエンコード

アプリケーションには特殊文字を防ぐ制限があったため、この制限をバイパスするためにリバースシェルのペイロードコマンドをbase64でエンコードしました。


エンコードしたペイロードの注入

usernameパラメータにペイロードを注入し、base64 -d | bash にパイプしてデコードと実行を行いました:


Netcatリスナー


初期アクセスの獲得

ペイロードは正常に実行され、www-dataユーザーとしてリバースシェルが返ってきました。


ラテラルムーブメント

さまざまな手法を用いて、www-dataユーザーからadminユーザーへのラテラルムーブメントを試みました。

/var/www/html ディレクトリを調査していると、データベースの資格情報を含む .env ファイルを発見しました:


発見したパスワードは、SSH と MySQL での認証に正常に再利用されました。

SSH

MySQL


OS権限昇格

adminユーザーとして初期アクセスを獲得した後、潜在的な権限昇格ベクターを特定するためにシステム列挙を実行しました。

SUIDバイナリ、ケーパビリティ、sudo権限、cronジョブなど、主要な権限昇格テクニックをすべて試しましたが、どれも機能しませんでした。そこで、PATHハイジャックや機密性の高い変数がないか環境変数を確認したところ、/var/mail/admin を指す MAIL変数 を発見しました。


メールの内容を確認したところ、管理者がOverlayFS/FUSEの脆弱性に対してカーネルにパッチを適用するよう警告されていたことに気付きました。


カーネルバージョン

OSバージョン

カーネルは更新されておらず、管理者がセキュリティ警告を無視または忘れていたことが確認されました。

カーネルの列挙により、バージョン 5.15.70-051570-generic が判明しました。これは CVE-2023-0386 OverlayFS/FUSEローカル権限昇格の影響を受けます。

脆弱性が確認できたので、公開されているPOCエクスプロイトを入手しました。

POCをクローンし、ターゲットマシンに転送しました。

その後、それを実行してrootアクセスの獲得に成功しました。


アタックチェーン



リソース

CVE-2023-0386 - CVE-2023-0386 - OSコマンドインジェクション



免責事項: このマシンは、許可されたペネトレーションテスト環境で攻略されました。

ツールをダウンロード
フェーズ手法ターゲット結果
1. 偵察ポートスキャン22 (SSH), 80 (HTTP)サービス発見
パス探索/invite招待ページを発見
JS難読化解除inviteapi.min.jsAPIエンドポイントが露出
2. 初期アクセス招待コード生成POST /api/v1/invite/generate有効な招待コード
登録POST /api/v1/user/register標準ユーザーを作成
3. Web権限昇格API列挙GET /api/v1管理者エンドポイントを発見
垂直昇格PUT /api/v1/admin/settings/updateis_admin: 0 -> 1
4. システムアクセスコマンドインジェクションPOST /api/v1/admin/vpn/generateusername=test;id;
リバースシェルBase64エンコードしたペイロードwww-data シェル
5. ラテラルムーブメントファイル発見/var/www/html/.envadmin:SuperDuperPass123
SSHパスワード再利用ssh [email protected]admin ユーザーアクセス
6. root権限昇格カーネル列挙uname -r -> 5.15.70CVE-2023-0386を特定
メール警告/var/mail/adminOverlayFS/FUSEを確認
エクスプロイト実行./fuse && ./exprootシェル