
이 익스플로잇은 XXE(XML External Entity)를 악용하기 위해 만들어졌습니다. 이를 통해 웹 서비스의 백엔드 코드를 읽었고, RCE에 취약한 Zabbix에서 gopher를 사용하여 내부 요청을 할 수 있는 엔드포인트를 발견했습니다.
python exploit.py --ip <Zabbix_IP> --sid <LowPrivileged_SID> --hostid <HostID> --phpsessid <PHPSESSID> --false_time <FalseTime> --true_time <TrueTime>
이 익스플로잇은 XXE(XML External Entity)를 악용하기 위해 만들어졌습니다. 이를 통해 웹 서비스의 백엔드 코드를 읽었고, 원격 코드 실행에 취약한 Zabbix 6.0.27 버전에 gopher를 사용하여 내부 요청을 보낼 수 있는 엔드포인트를 찾았습니다.
정찰 단계에서 외부 웹 서버에 무차별 대입(brute-force) 공격을 수행하여 docker-compose.yml 파일을 얻었고, 이를 통해 내부 Zabbix 서버의 컨테이너 이름을 확인했습니다. 이 정보를 사용하여 gopher를 통해 웹 애플리케이션의 루트에 POST 요청을 보냈고, 웹 서버는 쿠키에 base64로 인코딩된 JSON 안에 낮은 권한 사용자의 호스트 ID와 세션 ID를 반환했습니다.
이러한 세부 정보를 바탕으로 원본 익스플로잇을 수정하여 zabbix-server:10051의 SQL 인젝션 취약점을 악용해 관리자의 세션 ID를 얻은 후, 스크립트를 생성 및 실행하여 원격 코드 실행을 달성했습니다.
gopher를 사용하여 이 Zabbix 취약점을 악용해야 한다면, InternalRequest 함수를 필요한 방식으로 수정할 수 있습니다.
10.0.46.27:5555)로 다시 연결합니다.리버스 셸을 받기 위해 사용자의 시스템이 지정된 포트(스크립트의 5555)에서 리스닝 중인지 확인하세요. netcat을 사용할 수 있습니다:
nc -lvnp 5555
CreateScript 함수의 IP 10.0.46.27과 포트 5555를 자신의 IP와 원하는 포트로 바꿔 리버스 셸을 수신하세요.