SQL Server允许DBA(数据库管理员)设置可信数据库。简单的说可信数据库就是可以进入外部资源,就像网络分享,Email function,其他数据库对象。这并不总是坏事,但是当系统管理员创建一个可信数据库但是没有将拥有权限设置完美,那么风险也就暴露出来了。在这篇文章中,我将展示用户普遍是怎样为Web应用创建数据库,当SQL Server数据库所有权配置不合理时我们怎么进行提权。我想渗透测试师,应用开发者,以及网络安全爱好者会喜欢这篇文。话说大多数DBA应该已经知道这些东西了。
我会提供基础的实验步骤指导,如果你认为没有性趣(Ps.小编任性了)可以随意挑着看:
Setting up a Lab
Attacking Vulnerable Databases
Automating the Attack PowerShell
Automating the Attack Metasploit
Automating the Attack via SQL Injection with Metasploit
Options for Fixing the Issue
创建实验环境
接下来我会提供一个实例来演示建立一个SQL Server服务器的基本步骤。
下载Microsoft SQL Server Express 并安装SQL Server Management Studio。
按照向导一步步安装SQL Server,但请确保开启了混合验证模式以及在本地开启了相关服务。
在安装使用SQL Server Management Studio程序时使用“SA”帐户登录SQL Server并进行设置。单击“New Query”(新建查询)按钮使用TSQL,下面就创建一个名为“MyAPPDb”的数据库吧。
-- Create database
CREATE DATABASE MyAppDb
-- Verify sa is the owner of the application database
SELECT suser_sname(owner_sid)
FROM sys.databases
WHERE name = 'MyAppDb'
单击新建查询,使用TSQL,接下来我们我们创建一个名为“MyAppUser”的SQL Server用户。在真实场景中DBA会创建一个帐户用来连接数据库服务器。
-- Create login
CREATE LOGIN MyAppUser WITH PASSWORD = 'MyPassword!';
单击新建查询然后还是看到TSQL窗口。接下来为MyAppUser用户在MyAppDb数据库中分配权限。在真实环境中DBA可能这样做,这样一个SQL Server帐户登录后,就可以使用他能够使用的数据库。
-- Setup MyAppUsers the db_owner role in MyAppDb
USE MyAppDb
ALTER LOGIN [MyAppUser] with default_database = [MyAppDb];
CREATE USER [MyAppUser] FROM LOGIN [MyAppUser];
EXEC sp_addrolemember [db_owner], [MyAppUser];
确认MyAppUser已经添加了所有权。
-- Verify the user was added as db_owner
select rp.name as database_role, mp.name as database_user
from sys.database_role_members drm
join sys.database_principals rp on (drm.role_principal_id = rp.principal_id)
join sys.database_principals mp on (drm.member_principal_id = mp.principal_id)
设置MyAppDb数据库为可信
ALTER DATABASE MyA