【问题标题】:SQL Double Query InjectionSQL 双查询注入
【发布时间】:2015-07-16 17:52:31
【问题描述】:

我有以下疑问

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

【问题讨论】:

  • 这和sql注入有什么关系?
  • @mikeTheLiar :我猜这是当 SQL 错误暴露给攻击者时用来获取数据库数据的技术之一。

标签: mysql sql


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-02
    • 2021-10-12
    • 2021-12-20
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 2023-04-03
    相关资源
    最近更新 更多