
CVE-2024-4577 RCE PoC
При реализации PHP команда не заметила функцию Best-Fit преобразования кодировок в операционной системе Windows. Это упущение позволяет неаутентифицированным злоумышленникам обойти предыдущую защиту CVE-2012-1823 с помощью определённых последовательностей символов. Произвольный код может быть выполнен на удалённых PHP-серверах через атаку с внедрением аргументов.
Этот PoC предназначен только для обучения и исследований. Не используйте его для незаконных действий; вы несёте единоличную ответственность за любые юридические последствия.
Эта уязвимость была обнаружена Orange Tsai (@orange_8361) из DEVCORE (@d3vc0r3). Обязательно следите за его выдающимися исследованиями; наша роль заключалась лишь в воссоздании и разработке эксплойта для этой проблемы.
Почему необходимо переписывать скрипт эксплойта, если в интернете уже есть много общедоступных PoC?
Поскольку многие общедоступные PoC основаны на одном и том же оригинальном эксплойте, многие поставщики использовали эти PoC в качестве эталона и заблокировали определённые ключевые слова, чтобы предотвратить их эксплуатацию. Однако они часто упускают блокировку всех возможных векторов атаки. Чтобы решить эту проблему, скрипт включает простой механизм генерации случайных параметров, а также различные методы эксплуатации LFI-to-RCE для повышения вероятности успешной инъекции PHP CGI, ведущей к RCE.
Во время теста, когда я пытался воспроизвести уязвимость в определённом окружении, я обнаружил, что мой PoC постоянно вызывал ошибку HTTP 500, несмотря на корректировки. Поскольку я работал в уязвимой среде, я начал расследовать причину ошибки. Затем я вспомнил статью от Devcore, в которой упоминалось, что в некоторых сценариях эксплуатации сервер возвращает ошибку HTTP 500, хотя эксплойт RCE фактически успешен. С учётом этого я решил проверить, смогу ли я локально запустить calc.exe, и, к моему удивлению, это сработало — это была слепая RCE!
Однако, проверив журнал ошибок Apache, я нашёл ошибку, ссылающуюся на allow_url_include, несмотря на то, что атака была выполнена успешно (и я до сих пор не до конца понимаю первопричину; если у вас есть идеи, пожалуйста, свяжитесь со мной). Это побудило меня создать эксплойт, который также включает опцию для тестирования слепой RCE😊.
Если ваша цель — версия операционной системы до Windows 7, вы всё ещё можете повысить привилегии до видимой RCE или обратного шелла с помощью других методов. Однако эти методы выходят за рамки данной статьи, поэтому мы не будем вдаваться в подробности. Как специалист по пентесту или красной команде, вы сможете довольно быстро найти альтернативные решения, что может быть интересным процессом😉.
Обновлено 15 ноября 2024 года
В связи с рабочими требованиями я продолжил улучшать скрипт, чтобы сделать его максимально совместимым со всеми окружениями и увеличить шансы на достижение RCE. Это было вызвано тем, что некоторые цели не могли успешно выполнить PHP с помощью многих общедоступных PoC. В конце концов, я неожиданно решил эту проблему, сумев преодолеть почти все случаи возникновения ошибки 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, отправив запрос для проверки существования эксплойта. Когда запрос получен, это указывает на то, что целевой сервер успешно выполнил команду.
