关于双查询(double injection)的思考
问题一:什么是双查询?
之前理解成了二次注入,其实不是,自己也是个憨憨!
二次查询指是在一条查询语句当中包含一条select语句,而这条语句则是我们最终要使用的语句,外边的是一种包装,暂时就先这么理解
问题二:双查询的格式?
Select 1,(select database());
进入正题(以sqli-labs为例)
0x01什么条件下使用double injectin
输入参数正确的时候页面显示正确对应的结果(less-13)
输入错误对应的页面:
没有任何的回显信息!但是但是!!如果错误的话他会显示错误信息
所以这个错误就是我们的突破口,所以就给我们提供了一个思路:
可不可以把我们想得到的数据库信息在错误中显示出来
所以我们可以使用双查询,让第一条的语句报错爆出内部语句的错误
同样可以使用其他函数进行暴库:
0x02要用到的几个函数
Rand():产生随机数:
Floor():取整数:
Count():根据主键进行计数
0x03函数的组合实现暴库
语句:
Select count(*),concat(0x3a,0x3a,(selectdatabase()),0x3a,0x3a,floor(rand(0)*2))as a group by a;
Floor(rand(0)*2)得到的是有规律的数字
首先我们建立了一个虚拟表a 并以a为主键进行group,同时计数(count)在这里如果主键重复的话count就不能正常使用
由于在虚拟表a中的结果是这个样子的:
在以此为主键进行分组的同时,0-->计数,1-->计数,1-->计数(主键重复就会发生报错,会告诉我们xxx有错,这个xxx就是我们想获得的信息)
实践检验一下子:
实践出真知!!!!!!!
1.成功登录页面
- 由于是post方式提交的参数,所以我们要去找到对应提交的参数
- 修改post参数:
3.1首先通过order by 确定字段数
(由此可见字段数为2)
3.2修改参数:成功实现暴库