sqli-labs系列——第五关(二次查询注入)

判断注入

一开始我以为这是一个常规的sql盲注,操作之后发现事情并没有那么简单,为了方便学习,我直接把sql语句输出出来了:
在这里插入图片描述
然后就去看题目名称,Double Injection(双查询注入),就明白怎么回事了。

什么是二次查询注入

双查询注入其实就是一个select语句中再嵌套一个select语句,嵌套的这个语句称作子查询,例如:

select concat((select database()));

在这里插入图片描述

这里我解释一下,这条sql语句先执行select database(),然后在执行外边的concat()函数来输出结果,后续注入,需要先了解count()、rand()、floor()、concat()这三个函数的功能以及group by语句的用法。

  1. count():汇总数据函数
  2. rand():随机输出一个小于1的正数
  3. floor():把输出的结果取整
  4. group by语句:把结果分组输出
  5. concat():连接两条语句
rand()函数

先来看这个函数的作用:

select rand();

在这里插入图片描述

就是随机输出一个小于1的正数

floor()函数

现在加上floor()函数,效果就不一样了,floor是取整函数,为了体现的更直观,我们把rand()*2来输出,也就是输出0或1.

select floor(rand()*2);

在这里插入图片描述

concat()函数

现在我们再加上一个concat()函数,看看效果:

select concat((select database()),floor(rand()*2));

在这里插入图片描述

两条语句的结果是不是连接起来了,这就是concat()函数的作用。

group by语句

group by就是分组语句,举个例子大家就明白了

select concat((select database()),floor(rand()*2))as a from information_schema.tables group by a;

在这里插入图片描述
这里解释一下,把select database()和floor(rand()*2)的结果输出到a里,然后最大长度根据information_schema.tables来决定,然后用a进行分组,bees1一组,bees0一组:
在这里插入图片描述
这里的database()你也可以换成version()、user():
在这里插入图片描述

count()函数

最后在语句中加个count(*),整合一下结果,就明白count()函数是干嘛的了:
在这里插入图片描述

现在才是真正展现二次查询注入威力的时候,当我们第二次去查询的时候,数据库竟然报错了:
在这里插入图片描述
这就说明,如果想要页面爆出你想要的数据来,点击一次是没用的,只有点第二次数据库才会报错,才会回显。

开始注入

http://192.168.1.113:86/Less-5/?id=1' union SELECT null,count(*),concat((select database())
  • 17
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值