SQL双查询注入

时间:2015-07-16 17:52:32

标签: mysql sql

我跟我有以下问题

select 
    count(*),
    concat((select database()), floor(rand() * 2)) as x        
from users 
group by x;

当我一遍又一遍地在MYSQL客户端中运行此查询时,我得到了2个不同的响应。有时候,我最终会遇到这个错误(我希望根据我正在阅读的博客)

ERROR 1062 (23000): Duplicate entry 'mobile10' for key 'group_key'

在其他时候,我得到的结果如下:

+----------+------------------+
| count(*) | x                |
+----------+------------------+
|     6444 | mobile_app_dev10 |
|     6505 | mobile_app_dev11 |
+----------+------------------+
  1. 为什么我会看到2个不同的结果?
  2. 第一个回复中的错误究竟是什么意思?

1 个答案:

答案 0 :(得分:0)

在Double Query注入中,信息只能通过错误转储。当你使用 floor(rand()* 2)函数和 group by 子句时,它不会每次都出错,但是当group_key出现任何重复条目时。在这里,你强制发生错误,虽然你随机化了内部查询,但你再次使用 floor()来产生重复的条目,因为它产生了最接近的最大整数值。好。而不是 rand()* 2 使用 rand()* 4 执行查询但在多次成功尝试显示第二个结果后发生相同的错误。随机数据的整数值现在增加,现在发生错误的机会相对减少。您可以阅读有关Double Query here的更多信息。