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

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

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

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

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

Категории

Все категории
Loading categories
cve-2019-11043 — CVE-2019-11043 PHP远程代码执行 | Kitploit
Инструменты/GitHubGitHub/shadow-horse/cve-2019-11043
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationLabs & Practice
GitHubshadow-horse/cve-2019-11043

cve-2019-11043

CVE-2019-11043 PHP远程代码执行

Репозиторий
116 лет назадЕщё не проверено

Популярное

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

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

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

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

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

Удаленное выполнение кода в PHP (CVE-2019-11043)

1. Предыстория

26 сентября PHP официально опубликовал уведомление об уязвимости, в котором указано, что на серверах, использующих Nginx + php-fpm, при определенных конфигурациях существует уязвимость удаленного выполнения кода. Данная конфигурация широко используется, поэтому угроза велика.

PoC уязвимости был опубликован 22 октября, и отечественные СМИ по безопасности своевременно выпустили предупреждения.

2. Описание уязвимости

При обработке запроса, содержащего %0a, в Nginx через fastcgi_split_path_info из-за символа новой строки \n PATH_INFO становится пустым. В то же время php-fpm имеет логический дефект при обработке пустого PATH_INFO. Злоумышленник может добиться удаленного выполнения кода путем тщательного конструирования и использования.

На серверах Nginx + php-fpm при использовании следующей конфигурации существует вероятность уязвимости удаленного выполнения кода.

root@kitploit:~
 location ~ [^/]\.php(/|$) {

    fastcgi_split_path_info ^(.+?\.php)(/.*)$;

    fastcgi_param PATH_INFO       $fastcgi_path_info;

    fastcgi_pass   php:9000;

    ...
}

3. Решение

Без ущерба для нормальной работы удалите из конфигурационного файла Nginx следующие строки:

root@kitploit:~
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO       $fastcgi_path_info;

4. POC, опубликованный на github

github: https://github.com/neex/phuip-fpizdam

Данный POC использует оптимизацию в переменной FastCGI _fcgi_data_seg, которая доступна только в PHP 7, поэтому опубликованный эксплойт работает только в среде PHP 7. Для PHP 5 требуется другой эксплойт.

5. Воспроизведение уязвимости

1. Настройка NGINX+PHP-FPM (php7)

Настройка окружения, развертывание nginx + php-fpm, проверка работоспособности.

  1. Скачать php7, распаковать и перейти в каталог

    root@kitploit:~
     wget -c http://cn2.php.net/distributions/php-7.2.4.tar.gz
     tar -xzvf php-7.2.4.tar.gz
    
  2. Установить зависимости: сжатие, ssl и т.д.

    root@kitploit:~
     yum install -y libxml2*
     yum install -y openssl*
     yum install -y libcurl*
     yum install -y libjpeg*
     yum install -y libpng*
     yum install -y freetype*
     yum install -y libmcrypt*
    
  3. configure, скомпилировать исходный код

    root@kitploit:~
     ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysqli --with-pdo-mysql --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-simplexml --enable-xml --disable-rpath --enable-bcmath --enable-soap --enable-zip --with-curl --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-mbstring --enable-sockets --with-gd --with-openssl --with-mhash --enable-opcache --disable-fileinfo
    
     make & make install
    
  4. Настроить php-fpm. Если настраивается несколько PHP, можно изменить порт 9000 на 9001.

    root@kitploit:~
     Редактирование конфигурационного файла php-fpm:
     $ cd /usr/local/php/etc
     $ cp php-fpm.conf.default php-fpm.conf
     $ vi php-fpm.conf
     Убрать точку с запятой перед pid = run/php-fpm.pid
     $ cd php-fpm.d
     $ cp www.conf.default www.conf  (изменить порт)
     $ vi www.conf
     Изменить user и group на не-root пользователя
    

2. Настройка уязвимого парсера PHP

В nginx.cof добавить следующую конфигурацию:

root@kitploit:~
location ~ [^/]\.php(/|$) {
        root /opt/apache/www;
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO  $fastcgi_path_info;
        fastcgi_pass   127.0.0.1:9001;
        include     fastcgi_params;
     }

Перезапустить nginx.

  1. Установить go, скомпилировать POC

    root@kitploit:~
     go get github.com/neex/phuip-fpizdam(файлы загружаются в каталог src go)
    
     go build github.com/neex/phuip-fpizdam(полный путь, в текущем каталоге будет создан исполняемый файл)
    
  2. Запустить POC

    root@kitploit:~
     ./phuip-fpizdam http://website.com/index.php
     ./phuip-fpizdam http://website.com/index.php?a=command
     
    

[К сожалению, из-за проблем с настройкой окружения, верификация не удалась]

root@kitploit:~
	2019/10/29 01:13:19 Detect() returned error: no qsl candidates found, invulnerable or something wrong

4. Docker окружение для интеграционной верификации

Оригинальная ссылка: https://github.com/vulhub/vulhub/tree/master/php/CVE-2019-11043

  1. Скачать файлы данного docker-проекта

  2. docker-compose up -d запустить docker-контейнер

  3. Запустить программу, отображается успешное выполнение. Использовать уязвимость для выполнения команды "id"

  4. Остановить docker-сервис docker ps
    docker stop id

Скачать инструмент
  • ./php-fpm