繁体   English   中英

SQL双查询注入

[英]SQL Double Query Injection

我有以下查询

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. 第一个响应中的错误究竟是什么意思?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM