PostgreSQL 高权限命令执行 (CVE-2019-9193)漏洞复现&实战

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: PostgreSQL 高权限命令执行 (CVE-2019-9193)漏洞复现&实战

漏洞简介


postgreSQL是一个功能强大对象关系数据库管理系统。由于9.3增加一个“COPY TO/FROM PROGRAM”功能。这个功能就是允许数据库的超级用户以及pg_read_server_files组中的任何用户执行操作系统命令。


漏洞利用


这个漏洞是一个版本漏洞

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

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

所以要先弱口令爆破之后,然后查看是否是高权限,这个漏洞才有得玩。

这里之所以选择复现这个漏洞,因为其中的思路比较有意思,也就是看回显的思路。

先大体讲一下这个漏洞是怎么看回显的,他是通过命令执行然后把回显写入创建的一张表里面,下面来具体操作。

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

DROP TABLE IF EXISTS cmd_exec; 

d9bd02d431e5e5376c660cb2f995dbef_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

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


CREATE TABLE cmd_exec(cmd_output text);

940deab6a6ca5cb13e2380f8bb735d3f_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

  • 执行系统命令 利用特定函数copy xxxx from program


aa82ae387d4dbaafe90f07fc59b7ab3e_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

查看执行结果

e6d7e4499487c6078ebdfdda99767d55_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

这里要强调的点就是命令执行的看回显方法,其他倒是没什么,我觉得这个写入表来看回显的方法很好玩。


实战引申


那么下面给一个实战的例子 也是sql注入没有回显 然后通过把命令执行的结果写入表中 然后用select看回显 由于项目敏感这里只给出部分截图和思路

这里的条件

1、sql注入没有回显

2、后台是mssql可以执行xp_cmdshell

3、后台有功能可以select查看对应的表

  • 通过抓取后台和数据库相关的接口找到这个接口

/PH_SystemModule/DatabaseTable/GetList?tableName=test&databaseLinkId=f2d587de-43e5-4310-b968-4544f4961a39&_=1634809489388

  • 通过对应接口审计源码

上述接口中获取到的关键词为

PH_SystemModule

DatabaseTable

GetList

应该是目录结构 先记下来

然后看到项目的路径

833a09d5bb3d5c394cd6af7d0ea21e96_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


是一个比较典型的mvc架构的项目,虽然不是熟悉的语言,但是架构都是共通的,其中module代表数据库相关的代码

再结合之前的路径名

8b14ee8f936f8ba0a446db65dc5c4e25_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

  • everything全局搜索对应的关键词


64ab79711176613bcf5278fe78e1d16f_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


  • 成功定位到对应的代码文件


1fddf820734567dfb239f4dbe6038579_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

  • 打开代码进行审计

这个strSql是直接从前台传入的,用?strSql=传入即可

5d849baee680a0e4c075b7199321b122_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

跟进FindTable方法看看有没有waf

91b0345107b19f8098216aca5332bec6_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

f827a98a3d722b6df849a32321c90363_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

没有发现waf,可以直接构造参数来进行注入

然后通过这个注入点注入进去之后,后台并没有回显,于是构造语句写入数据库的表中然后后台用select进行查看

这里不能放图了,只能描述了,大体就是这么个思路,用来看命令执行的回显。


反弹shell


  • 这里的漏洞其实可以使用反弹shell,但是直接执行会有问题,看例子

bea54359a2956dd51899aec4e3611e29_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

直接报错了


  • vps也没有得到shell


4d8e000849aed863aa179760db0d8b4c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

这里可以用编码来解决

1b73686d7861d7f2bf3317a03c6bf67d_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

  • 执行命令,直接上线


3ac2f8fea8ed452f826c438cda7f9bf9_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

d4be4ded8d94be99ea24f2f6d94d4b49_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

这里的编码不仅仅限于base64 b32 等等都可以 主要是为了解决数据传输过程中的特殊字符被异常解析的问题


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
6月前
|
存储 JSON 关系型数据库
《Postgresql实战》笔记(二)
《Postgresql实战》笔记(二)
82 0
|
3月前
|
关系型数据库 数据库 数据安全/隐私保护
PostgreSQL基础之教你如何轻松管理用户角色与权限
PostgreSQL基础之教你如何轻松管理用户角色与权限
119 0
|
3月前
|
SQL 关系型数据库 数据库
PostgreSQL常用命令,启动连接,pg_dump导入导出
PostgreSQL常用命令,启动连接,pg_dump导入导出
|
4月前
|
JavaScript 关系型数据库 API
Nest.js 实战 (二):如何使用 Prisma 和连接 PostgreSQL 数据库
这篇文章介绍了什么是Prisma以及如何在Node.js和TypeScript后端应用中使用它。Prisma是一个开源的下一代ORM,包含PrismaClient、PrismaMigrate、PrismaStudio等部分。文章详细叙述了安装PrismaCLI和依赖包、初始化Prisma、连接数据库、定义Prisma模型、创建Prisma模块的过程,并对比了Prisma和Sequelize在Nest.js中的使用体验,认为Prisma更加便捷高效,没有繁琐的配置。
181 7
Nest.js 实战 (二):如何使用 Prisma 和连接 PostgreSQL 数据库
|
5月前
|
SQL 关系型数据库 PostgreSQL
PostgreSQL和greenplum的copy命令可以添加字段吗?
【6月更文挑战第5天】PostgreSQL和greenplum的copy命令可以添加字段吗?
91 3
|
5月前
|
监控 关系型数据库 数据库
PostgreSQL和greenplum的copy命令如何使用?
【6月更文挑战第5天】PostgreSQL和greenplum的copy命令如何使用?
153 2
|
6月前
|
关系型数据库 数据库 PostgreSQL
postgresql|【基于pg_basebackup命令的归档备份和恢复---热备冷恢复方式】
postgresql|【基于pg_basebackup命令的归档备份和恢复---热备冷恢复方式】
283 0
|
6月前
|
SQL 关系型数据库 数据库
Postgresql基本操作命令
这些是PostgreSQL数据库的一些基本操作命令,用于创建、管理和查询数据库。根据您的需求,可以使用这些命令执行各种数据库操作。
116 4
|
关系型数据库 数据管理 Go
《PostgreSQL数据分区:原理与实战》
《PostgreSQL数据分区:原理与实战》
201 0
|
6月前
|
SQL 关系型数据库 数据库
SQL 42501: Postgresql查询中的权限不足错误
SQL 42501: Postgresql查询中的权限不足错误
443 0