关于双查询(double injection)的思考

问题一:什么是双查询?

之前理解成了二次注入,其实不是,自己也是个憨憨!

二次查询指是在一条查询语句当中包含一条select语句,而这条语句则是我们最终要使用的语句,外边的是一种包装,暂时就先这么理解

问题二:双查询的格式?

Select 1,(select database());

关于双查询(double injection)的思考

进入正题(以sqli-labs为例)

0x01什么条件下使用double injectin

输入参数正确的时候页面显示正确对应的结果(less-13)

关于双查询(double injection)的思考

输入错误对应的页面:

关于双查询(double injection)的思考

没有任何的回显信息!但是但是!!如果错误的话他会显示错误信息

所以这个错误就是我们的突破口,所以就给我们提供了一个思路:

可不可以把我们想得到的数据库信息在错误中显示出来

所以我们可以使用双查询,让第一条的语句报错爆出内部语句的错误

同样可以使用其他函数进行暴库:

关于双查询(double injection)的思考

0x02要用到的几个函数

Rand():产生随机数:

关于双查询(double injection)的思考

Floor():取整数:

关于双查询(double injection)的思考

 

Count():根据主键进行计数

0x03函数的组合实现暴库

语句:

Select count(*),concat(0x3a,0x3a,(selectdatabase()),0x3a,0x3a,floor(rand(0)*2))as a group by a;

Floor(rand(0)*2)得到的是有规律的数字

关于双查询(double injection)的思考

首先我们建立了一个虚拟表a 并以a为主键进行group,同时计数(count)在这里如果主键重复的话count就不能正常使用

由于在虚拟表a中的结果是这个样子的:

关于双查询(double injection)的思考

在以此为主键进行分组的同时,0-->计数,1-->计数,1-->计数(主键重复就会发生报错,会告诉我们xxx有错,这个xxx就是我们想获得的信息)

实践检验一下子:

实践出真知!!!!!!!

1.成功登录页面

关于双查询(double injection)的思考

  1. 由于是post方式提交的参数,所以我们要去找到对应提交的参数

关于双查询(double injection)的思考

  1. 修改post参数:

3.1首先通过order by 确定字段数

关于双查询(double injection)的思考

(由此可见字段数为2)

3.2修改参数:成功实现暴库

关于双查询(double injection)的思考