由于MySQL中的错误(?),COUNT()
函数以及GROUP BY
子句可能导致MySQL泄漏数据库详细信息,如下所示 -
mysql> select count(*), floor(rand()*2)x from users group by x;
ERROR 1062(23000):键'group_key'重复输入'1'
这里可以通过精心设计的查询揭示敏感细节。这个 是出乎意料的行为,也许是一个错误?
mysql> select count(*), floor(rand()*2)x from users group by x;
+----------+---+
| count(*) | x |
+----------+---+
| 8 | 0 |
| 5 | 1 |
+----------+---+
2 rows in set (0.00 sec)
< - 有时查询运行时没有任何错误(预期行为)
有谁知道究竟是什么导致MySQL错误。
我正在使用的试验台是这个优秀的资源 - https://github.com/Audi-1/sqli-labs
答案 0 :(得分:1)
这看起来是一个报告的(和旧的!)错误:http://bugs.mysql.com/bug.php?id=58081
描述:GROUP BY查询在某些情况下返回此错误 情况:
重复输入' 107374182410737418241'对于关键' group_key'
' group_key'不是表中的真正列名。它看起来像一个 临时表中分组列的名称。
如何重复:设置名称latin1;删除表如果存在t1;创建表 t1(a int)engine = myisam;插入t1值(0),(0),(1),(0),(0); 从t1,t1 t2 group中选择count(*)('',t2.a, t1.a,(@@ global.max_binlog_size));
ERROR 1062(23000):重复输入' 107374182410737418241'为了钥匙 ' group_key'
注释表明建议的解决方法是增加可用的堆和临时表大小:
我找到的解决方法是增加tmp_table的大小:
SET SESSION max_heap_table_size = 536870912; SET SESSION tmp_table_size的= 536870912;
现在我的请求正常工作!
或检查可用磁盘空间