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.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
POC-GeoLeak-CVE-2026-52715 — PoC funcional de CVE-2026-52715 (GeoLeak): SQLi no autenticada en GEO my WordPress <= 4.5.5 vía swlatlng/nelatlng. Laboratorio Docker + exploit basado en tiempo/booleano + exfiltración sin comas en payload. | Kitploit
Herramientas/GitHubGitHub/686f6c61/poc-geoleak-cve-2026-52715
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónDesarrollo de PayloadsLabs y Práctica
GitHub
686f6c61/poc-geoleak-cve-2026-52715

POC-GeoLeak-CVE-2026-52715

PoC funcional de CVE-2026-52715 (GeoLeak): SQLi no autenticada en GEO my WordPress <= 4.5.5 vía swlatlng/nelatlng. Laboratorio Docker + exploit basado en tiempo/booleano + exfiltración sin comas en payload.

Ver Repositorio
15hace 1 mesAún no revisado

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

GeoLeak — PoC de CVE-2026-52715

Proof of Concept educativa de GeoLeak (CVE-2026-52715), inyeccion SQL no autenticada (CVSS 9.3) en el plugin GEO my WordPress <= 4.5.5 para WordPress. Los parametros swlatlng y nelatlng de los limites del mapa se interpolan sin saneado en la clausula WHERE. Laboratorio Docker autocontenido + exploit con tecnicas time-based, boolean-based y exfiltracion caracter a caracter.


Tabla de contenidos

  1. Resumen ejecutivo
  2. Aviso legal
  3. Arquitectura de la cadena
  4. Requisitos
  5. Estructura del repositorio
  6. Guia rapida de uso
  7. Verificacion de la explotacion
  8. Analisis tecnico
  9. El parche oficial (4.5.5.1)
  10. Mitigacion
  11. Creditos
  12. Licencia

Resumen ejecutivo

CVE-2026-52715 es una inyeccion SQL (CWE-89) en la funcion gmw_get_locations_within_boundaries_sql() del plugin GEO my WordPress, que afecta a todas las versiones <= 4.5.5 y esta parcheada desde la 4.5.5.1 (15 de junio de 2026). Fue descubierta por el investigador alvarodh5 y publicada via Patchstack.

La cadena bautizada GeoLeak demuestra como, partiendo unicamente de acceso de lectura a cualquier pagina publica que contenga el shortcode [gmw], un atacante puede:

  1. Inyectar SQL arbitrario a traves del parametro swlatlng (o nelatlng) del query string, sin cookies, sin nonce y sin autenticacion.
  2. Forzar retardos medibles con SLEEP() (time-based blind) evaluado por cada fila del INNER JOIN contra wp_gmw_locations.
  3. Usar el oraculo "total_results":N que el propio plugin embebe en el JSON de configuracion del mapa para inferir condiciones booleanas (boolean-based blind).
  4. Exfiltrar la base de datos completa caracter a caracter sorteando la restriccion de que el payload no puede contener comas (PHP trocea el valor con explode(',', ...)), mediante CASE WHEN y SUBSTRING(x FROM n FOR 1).

El resultado es lectura arbitraria de la base de datos de WordPress: tabla wp_users (hashes de contrasenas), opciones de configuracion, claves y datos de terceros almacenados en plugins.

En la PoC se verifica la extraccion completa de VERSION() de MariaDB unicamente con peticiones GET.


Aviso legal

Este repositorio contiene material estrictamente educativo y defensivo.

  • Proposito: demostrar la cadena de explotacion con fines de formacion, auditoria propia y validacion de parches.
  • Uso autorizado: ejecutalo unicamente contra sistemas que te pertenezcan o sobre los que dispongas de autorizacion escrita explicita. El laboratorio Docker incluido es el unico entorno previsto.
  • Prohibido: cualquier uso contra sistemas de terceros sin consentimiento. El autor del repositorio no se responsabiliza del uso indebido del material aqui incluido.
  • Responsabilidad: el operador es el unico responsable del cumplimiento de la legislacion aplicable (LOPD/RGPD en Espana, CFAA en EE. UU., etc.).

Arquitectura de la cadena

┌─────────────────────────────────────────────────────────────────────┐
│  1. Peticion publica sin autenticar                                 │
│     GET /?page_id=5&form=1&action=fs&swlatlng=<payload>&nelatlng=…  │
│     pagina publica con shortcode [gmw form="1"]                     │
└──────────────────────────────────────────────────┬──────────────────┘
                                                   ▼
┌─────────────────────────────────────────────────────────────────────┐
│  2. GMW_Form::set_default_values()                                  │
│     action=fs => formulario marcado como enviado                    │
│     get_form_values() toma $_SERVER['QUERY_STRING']                 │
└──────────────────────────────────────────────────┬──────────────────┘
                                                   ▼
┌─────────────────────────────────────────────────────────────────────┐
│  3. gmw_get_form_values() (gmw-functions.php:512)                   │
│     parse_str($query_string, $output)  sin lista de permitidos      │
│     $output['swlatlng'] llega intacto                               │
└──────────────────────────────────────────────────┬──────────────────┘
                                                   ▼
┌─────────────────────────────────────────────────────────────────────┐
│  4. parse_query_args() (class-gmw-form-core.php:794)                │
│     gmw_swlatlng / gmw_nelatlng copiados a los argumentos de busqueda│
└──────────────────────────────────────────────────┬──────────────────┘
                                                   ▼
┌─────────────────────────────────────────────────────────────────────┐
│  5. gmw_get_locations_within_boundaries_sql() (gmw-functions:669)   │
│     $sw = explode(',', $southwest);                                 │
│     "AND ( gmw_locations.latitude BETWEEN {$sw[0]} AND {$ne[0]} )"  │
│     interpolacion directa: sin prepare, sin validacion              │
└──────────────────────────────────────────────────┬──────────────────┘
                                                   ▼
┌─────────────────────────────────────────────────────────────────────┐
│  6. WP_Query -> $wpdb->get_results()                                │
│     SQL: ... AND ( gmw_locations.latitude BETWEEN                   │
│            1 AND SLEEP(5) AND 40.416775 AND 41 ) ...                │
│     respuesta retardada 5s / total_results = oraculo                │
└─────────────────────────────────────────────────────────────────────┘

Requisitos

  • Docker y Docker Compose (probado con Docker 29.4.1 / Compose v5.2.0)
  • curl y awk para el exploit
  • Puerto 3080 libre (o cambia el mapeo en docker-compose.yml)

Estructura del repositorio

POC-GeoLeak-CVE-2026-52715/
├── docker-compose.yml          WordPress 6.8 (PHP 8.2) + MariaDB 11
├── docker/
│   ├── Dockerfile              Imagen WP + WP-CLI + entrypoint del laboratorio
│   ├── lab-entrypoint.sh       Arranque + siembra automatica en el primer boot
│   ├── seed.sh                 Instalacion WP, formulario, post geolocalizado
│   └── geo-my-wp/              Plugin GEO my WordPress 4.5.5 (codigo vulnerable)
├── poc/
│   └── poc.sh                  Exploit: time-based + boolean-based + exfiltracion
├── docs/
│   ├── analisis-tecnico.md     Cadena completa request -> SQL, con codigo
│   └── diff-parche-4.5.5.1-gmw-functions.php.diff   Parche oficial real
├── LICENSE
└── README.md

Guia rapida de uso

# 1. Levantar el laboratorio (primer arranque: 60-90 s)
docker compose up -d --build

# 2. Comprobar que la siembra termino
docker compose logs wordpress | grep lab-entrypoint
# [lab-entrypoint] laboratorio listo

# 3. Ejecutar la PoC
./poc/poc.sh

# 4. Destruir el laboratorio
docker compose down -v

Parametros configurables del exploit:

TARGET=http://localhost:3080 PAGE_ID=5 FORM_ID=1 SLEEP=5 ./poc/poc.sh

Acceso a WordPress: http://localhost:3080 con admin/admin. La pagina con el formulario vulnerable es http://localhost:3080/?page_id=5.

Nota: la fila semilla en wp_gmw_locations es imprescindible. La consulta usa INNER JOIN contra esa tabla: sin filas el WHERE inyectado no se evalua y SLEEP() no duerme.


Verificacion de la explotacion

Salida real de la ultima ejecucion contra el laboratorio (14 de agosto de 2026):

Descargar herramienta