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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
TwoMillion-Machine-Writeup — code.jsの難読化解除からルートまで、CVE-2023-0386 | Kitploit
ツール/GitHubGitHub/anxs3c/twomillion-machine-writeup
特権昇格偵察エクスプロイト横移動リバースエンジニアリングウェブアプリケーション悪用CTFペネトレーションテスト学習と教育ラボと実践
GitHubanxs3c/twomillion-machine-writeup

TwoMillion-Machine-Writeup

183ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

code.jsの難読化解除からルートまで、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ファイルが読み込まれており、難読化されたコードが含まれていることに気付きました:

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が得られました:


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関数が原因ではないかと推測しました。

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

$username = $json->username;

exec("/usr/bin/cat /var/www/html/VPN/user/$username.ovpn");
ツールをダウンロード