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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
adminer_CVE-2021-43008 — Adminerの脆弱性CVE-2021-43008のデモ環境:実際の影響を観察し、緩和策をテストする。 | Kitploit
ツール/GitHubGitHub/bamolitho/adminer_cve-2021-43008
脆弱性分析エクスプロイトウェブアプリケーション悪用学習と教育データベースセキュリティラボと実践
GitHubbamolitho/adminer_cve-2021-43008

adminer_CVE-2021-43008

Adminerの脆弱性CVE-2021-43008のデモ環境:実際の影響を観察し、緩和策をテストする。

リポジトリを見る
18ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2021-43008 — Adminer の脆弱性

悪意のある MySQL サーバーを介した任意のファイル読み取り

1. Adminer とは?

Adminer は、MySQL、PostgreSQL、SQLite、SQL Server のデータベースを簡単に管理できる Web ツール(PHP)です。軽量な phpMyAdmin の代替としてよく使われます。

影響を受けるバージョン: Adminer ≤ 4.6.2


2. 脆弱性の本質は?

2.1. アクセス制御の欠陥

Adminer は 任意のリモート MySQL サーバー への接続を許可します。しかし、MySQL サーバーに接続する際、クライアント(ここでは Adminer)は次のものを受け入れます:

  • サーバーからの初期命令のセット
  • その中には LOAD DATA LOCAL INFILE コマンドが含まれており、サーバーがクライアントにローカルファイルを送信するよう要求できます。

2.2. 問題点

脆弱性のあるバージョンでは、Adminer は MySQL サーバーからの応答を 正しく 検証しません。

結果: 攻撃者が制御する MySQL サーバーは次のように要求できます:

「Adminer をホストしているマシンまたはコンテナ上のこのローカルファイルを読み取り、私に送信してください。」

このメカニズムは MySQL パケットに関連しています: 0xFB | ファイル名 → ローカルファイルの読み取りをトリガーします。

なぜバージョン 4.6.2 が脆弱なのか

Adminer 4.6.2 では、ユーザーが 外部 MySQL サーバーを指定 し、自由に接続することができました。さらに、MySQL ではデフォルトで次の使用が許可されていました:

  • LOAD DATA LOCAL INFILE
  • 一部のサーバーがファイルを要求した場合に自動モードで動作します。

つまり: Adminer → 悪意のあるサーバーに接続 → 悪意のあるサーバーがファイルを要求 → Adminer がそれを送信。

これが脆弱性の本質です。


3. 悪用条件

攻撃者は以下を行う必要があります:

  1. 悪意のある MySQL サーバー(Rogue MySQL Server)をホストする。
  2. Adminer を自分のサーバーに接続させる:
    • 設定ミスを介して
    • 公開されたインターフェースを介して
    • ユーザーの操作(「ホスト指定」攻撃)を介して
  3. 悪意のある MySQL サーバーが LOAD DATA LOCAL INFILE パケットを送信する。
  4. Adminer がローカルファイルを読み取る。
  5. ファイルが攻撃者に送信される。

ローカルファイルを抜き出すために root パスワードは不要です。Adminer がターゲットサーバー上で PHP アプリケーションとしてアクションを実行するからです。


4. 脆弱性の影響

4.1. 機密性の侵害

攻撃者は以下を読み取ることができます:

  • /etc/passwd(Adminer をホストするエンティティ: ホストマシンまたはコンテナ)
  • /etc/shadow(PHP ユーザーの権限による)
  • 設定ファイル の取得
  • MySQL 接続資格情報 の盗難
  • Web ユーザーがアクセスできるすべての情報 の抽出

4.2. 影響の拡大

盗んだ MySQL 資格情報(二次的なステップ)を使って、攻撃者は:

  • 実際の内部データベースに接続する
  • データを読み取る
  • テーブルに書き込む
  • 悪意のあるペイロードを注入する

5. 実証実験 (PoC) — ラボの構成

PoC は 隔離 された コンテナ化 された環境で実施され、リスクを回避します。

5.1. ラボのコンポーネント

  1. 脆弱な Adminer (バージョン 4.6.2) 役割: 被害者 localhost:8080 でローカル公開
  2. 正規の MySQL (オプション) 役割: 実際のデータベースをシミュレート
  3. Rogue MySQL Server (Python) 役割: 攻撃者 0xFB ファイル名 パケットを送信し、Adminer にローカルファイルを読み取らせます。

5.2. フォルダ構造

root@kitploit:~
adminer_CVE-2021-43008/
│
├── README.md
├── docker-compose.yml
│
└──rogue_mysql_server/
	├── rogue_mysql_server.py
	├── requirements.txt
	└── Dockerfile

6. PoC の流れ: 脆弱性はどのように現れるか?

6.1. ラボの起動

root@kitploit:~
docker compose build && docker compose up -d

6.2. Adminer から Rogue Server への接続

http://localhost:8080 で:

  • システム: MySQL
  • サーバー: rogue_mysql:33306
  • ユーザー: 任意
  • パスワード: 任意

6.3. 自動的な流れ

  1. Adminer がハンドシェイクを送信。
  2. Rogue MySQL が LOAD DATA LOCAL INFILE '/etc/passwd' を返す。
  3. Adminer が /etc/passwd を読み取る。
  4. Adminer がその内容を rogue に送信。
  5. rogue がテキストを stolen_file.txt に保存。

6.4. 観測される結果

次のコマンドで rogue のログを確認:

root@kitploit:~
docker logs -f rogue_mysql

期待される出力:

root@kitploit:~
2025-11-27 16:59:54,248:INFO:Serving on ('0.0.0.0', 33306)
2025-11-27 17:02:55,213:INFO:Conn from: ('172.18.0.3', 37200)
2025-11-27 17:02:55,214:INFO:Last packet
2025-11-27 17:02:55,214:INFO:Query
2025-11-27 17:02:55,214:INFO:Requesting file: /etc/shadow
2025-11-27 17:02:55,215:INFO:-- Received file data
2025-11-27 17:02:55,215:INFO:Result length: 1 bytes
2025-11-27 17:02:55,216:INFO:Last packet
2025-11-27 17:02:55,216:INFO:Query
2025-11-27 17:02:55,216:INFO:Requesting file: /etc/passwd
2025-11-27 17:02:55,216:INFO:-- Received file data
2025-11-27 17:02:55,217:INFO:Result length: 920 bytes
2025-11-27 17:02:55,217:INFO:File content received: 919 bytes
2025-11-27 17:02:55,217:INFO:File saved to stolen_file.txt

stolen_file.txt の内容を確認:

root@kitploit:~
docker exec -it rogue_mysql sh

コンテナ内で、stolen_file.txt などのファイルの内容を表示:

root@kitploit:~
# ls
mysql.log  requirements.txt  rogue_mysql_server.py  stolen_file.txt
root@kitploit:~
# cat stolen_file.txt

結果:

root@kitploit:~
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/bin/false

この結果は、脆弱性を明確に示しています。


7. 緩和策

A. Adminer の更新(これだけで十分)

最も信頼性の高い解決策: Adminer ≥ 4.6.3 にアップグレード

それ以降のバージョンではネットワーク動作が修正されています。

以降のバージョンで修正された内容

Adminer 4.7.x 以降では、いくつかの保護が導入されました:

Adminer はデフォルトで LOAD DATA LOCAL INFILE を禁止するようになりました。

つまり:

  • 完全に無効化
  • またはユーザーが明示的に許可した場合のみ有効

→ 結果: Rogue MySQL はファイルを抜き出せなくなります。

Adminer はサーバーに送信する前にクライアントのアクションをフィルタリングします。

これにより、外部接続が危険な機能を使用するのを防ぎます。

追加の入力検証メカニズム

新しいバージョンでは以下をチェックします:

  • ターゲットサーバーが期待されたものかどうか
  • アクションが危険でないかどうか
  • クエリが正当なユーザーアクションに対応しているかどうか

B. 外部接続を無効にする

Adminer を内部ホストのみに制限:

  • ファイアウォール(OUTPUT + DOCKER NETWORKS)経由
  • フィルタリングされたリバースプロキシ経由
  • 厳密にローカライズされたネットワーク設定経由

本番環境の Adminer は 常に 内部 MySQL を指すようにすべきです。


C. MySQL 側で LOCAL INFILE を無効にする

正規の MySQL クライアント経由の盗難を防ぐ:

root@kitploit:~
[mysqld]
local_infile=0

または:

root@kitploit:~
SET GLOBAL local_infile=0;

D. Adminer を公開しない

Adminer はインターネットからアクセス可能にしてはいけません。

本番環境では:

  • VPN 経由でのアクセス制限
  • SSO または強力な認証
  • 自動期限切れ

E. 使用後は Adminer を削除する

Adminer は 一時的 なツールと見なすべき:

  • 特定のタスクのためにデプロイ
  • その後削除

8. 信頼できるリソースと参照

  • 使用した Python スクリプトのソース: https://github.com/Gifts/Rogue-MySql-Server/blob/master/rogue_mysql_server.py
  • Adminer 公式サイト https://www.adminer.org/en/
  • Sansec(初の公開) https://sansec.io/research/adminer-4.6.2-file-disclosure-vulnerability
  • Podalirius(技術解説 + PoC) https://podalirius.net/en/cves/2021-43008/
  • vulhub: https://github.com/vulhub/vulhub/blob/master/adminer/CVE-2021-43008/

9. 最終まとめ

CVE-2021-43008 は Adminer ≤ 4.6.2 の深刻な脆弱性であり、次のことを可能にします:

  • MySQL サーバーを制御する攻撃者が
  • Adminer にローカルファイルを読み取らせ
  • その内容を攻撃者に流出させる

これは以下の重要性を示す完璧な例です:

  • ネットワーク制御
  • MySQL クライアントの制限
  • 管理ツールの非公開
  • ソフトウェアバージョン管理

ツールをダウンロード