
CVE-2024-4577 RCE PoC
PHP를 구현하는 동안 팀은 Windows 운영 체제 내의 인코딩 변환 Best-Fit 기능을 인지하지 못했습니다. 이로 인해 인증되지 않은 공격자가 특정 문자 시퀀스를 통해 이전 CVE-2012-1823 보호를 우회할 수 있습니다. 인수 주입 공격을 통해 원격 PHP 서버에서 임의 코드를 실행할 수 있습니다.
이 PoC는 학습 및 연구 목적으로만 제공됩니다. 불법 활동에 사용하지 마십시오; 모든 법적 책임은 사용자에게 있습니다.
이 취약점은 DEVCORE (@d3vc0r3)의 Orange Tsai (@orange_8361)에 의해 발견되었습니다. 그의 뛰어난 연구를 꼭 확인하세요, 우리의 역할은 이 문제에 대한 익스플로잇을 재현하고 개발하는 것뿐이었습니다.
이미 온라인에 많은 공개 PoC가 있는데 왜 익스플로잇 스크립트를 다시 작성해야 할까요?
많은 공개 PoC가 동일한 원본 익스플로잇을 기반으로 하기 때문에, 많은 벤더들이 이러한 PoC를 참고하여 특정 키워드를 차단하여 악용을 방지했습니다. 그러나 잠재적인 모든 익스플로잇 벡터를 차단하는 경우는 종종 간과됩니다. 이를 해결하기 위해 스크립트에는 무작위 매개변수 생성을 위한 간단한 메커니즘과 다양한 LFI-to-RCE 악용 방법이 포함되어 있어, RCE로 이어지는 PHP CGI 인젝션의 성공률을 높입니다.
환경 취약점을 재현하려는 테스트 중에, 조정에도 불구하고 PoC가 계속해서 HTTP 500 오류를 발생시키는 것을 발견했습니다. 취약한 환경에서 작업하고 있었기 때문에 오류 원인을 조사하기 시작했습니다. 그러다 Devcore의 기사를 떠올렸는데, 특정 익스플로잇 시나리오에서 RCE 익스플로잇이 실제로 성공했음에도 서버가 HTTP 500 오류를 반환한다고 언급했습니다. 이를 염두에 두고 로컬에서 calc.exe를 실행할 수 있는지 테스트해 보았고, 놀랍게도 작동했습니다—블라인드 RCE였습니다!
(그리고 여전히 근본 원인을 완전히 이해하지 못했습니다; 통찰력이 있으시면 연락 주세요.) 이로 인해 블라인드 RCE 테스트 옵션도 포함된 익스플로잇을 만들게 되었습니다😊.
대상이 Windows 7 이전 운영 체제 버전인 경우에도 다른 방법을 통해 가시적인 RCE 또는 리버스 셸로 권한 상승할 수 있습니다. 그러나 이러한 기술은 이 문서의 범위를 벗어나므로 자세히 다루지 않겠습니다. 침투 테스터 또는 레드 팀 전문가로서 다른 해결책을 비교적 빠르게 찾을 수 있을 것이며, 이는 흥미로운 과정이 될 수 있습니다😉.
2024년 11월 15일 업데이트
업무 요구로 인해, 스크립트를 계속 개선하여 모든 환경과 최대한 호환되도록 하고 RCE 성공 가능성을 최대화했습니다. 많은 공개 PoC가 일부 대상에서 PHP를 성공적으로 실행하지 못했기 때문에 이러한 노력이 필요했습니다. 결국 예상치 못하게 이 문제를 해결하여, 오류 500이 발생하는 거의 모든 경우를 극복하고 PHP 실행 결과를 성공적으로 표시했습니다. 그 결과, 블라인드 RCE는 더 이상 중요하게 보이지 않았습니다. 😧
악용 조건
종속 항목을 설치해야 합니다:
$ python3 -m pip install requests 스크립트를 직접 실행하여 사용법을 확인할 수 있습니다. 아래 명령어를 실행하여 대상이 취약한지 확인할 수 있습니다.
$ python3 CVE-2024-4577.py <target> <php shell>

대상에 익스플로잇이 존재하면 PHP 실행 결과를 로컬에 저장할 수 있으며, 이는 phpinfo를 확인해야 하는 사람들에게 유용합니다.
$ python3 CVE-2024-4577.py <target> "phpinfo()" --save info.html

대상이 블라인드 RCE에 취약한 경우, 스크립트는 로컬 포트에서 수신 대기하고 대상 서버가 PHP를 실행하도록 트리거하여 익스플로잇의 존재를 확인하는 요청을 보냅니다. 요청이 수신되면 대상 서버가 명령을 성공적으로 실행했음을 나타냅니다.
