前言
本文为作者的学习笔记,主要介绍了floor注入原理,利用注入代码(payload)分析每个部分的作用以此来解释floor注入的原理。在解释过程中会使用phpstudy搭建的MySQL环境,并且利用iwebsec漏洞库来实践。最后顺带介绍updatexml和extractvalue报错注入。
提示:以下是本篇文章正文内容,下面案例可供参考
一、什么是floor报错注入
1 and (select 1 from (select
count(*),concat(database(),
floor(rand(0)*2))x
from information_schema.tables group by x)a)
// 注入的时候payload不要有回车
上述图片可以看到报错注入已经成功地把数据库的名称爆出来了。接下来我们将payload分成几块来详细的解释一下floor报错注入的原理。
首先我们探讨一下是什么导致了报错,真是floor()这个函数吗?
floor这个函数,它的作用是返回参数的最小整数。也就是向下取整(2.2 ==》)。很显然这个函数不可能导致报错。再者count(*)就是一个计数的函数,也不是。其实真正发生作用的是第二层括号里面的代码
select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x
Mysql在执行 select count() from XXX group by x这一类语句时会先创建一个虚拟表,然后在虚拟表中插入数据,key是主键,不可重复。记住,不可重复,这个是重点。key就是后面那个x
假设我们现在有这样一个表
那我们执行这样的语句
select age,count() from admins group by age
它的过程可以简化为如下图所示