有人可以解释为什么这两个查询有时会导致错误吗?我用谷歌搜索了一些解释,但没有一个是正确的。我不想修复它。此查询应实际用于SQL注入攻击(我认为基于错误的sql注入)。触发的错误应该是“重复输入”。我试图找出为什么有时会纠正错误。
谢谢。
select
count(*)
from
information_schema.tables
group by
concat(version(),
floor(rand()*2));
select
count(*),
concat(version(),
floor(rand()*2))x
from
information_schema.tables
group by
x;
答案 0 :(得分:1)
好的,我要发布一个答案-这更多是对问题本身的挑战。
基本上:此查询很愚蠢,应该写出来;找出要执行的操作并以合理的方式对其进行重写。
查询当前做什么?
看起来它正在获取当前数据库中的表计数...除了它是按计算列分组的。该列看起来像是Version(),并在其后附加了“ 0”或“ 1”(随机选择)。
那么最终结果呢?两行,每个行都有一个数值,其总和加起来到当前数据库中的表总数。如果有30张桌子,您可能一次获得13/17,下次获得19/11,然后获得16/14。
我很难相信这是应该要做的。因此,与其尝试修复“错误”,不如挖掘并找出它应该返回什么数据,然后重写proc来完成。
答案 1 :(得分:1)
第二个似乎正在尝试猜测注入的受害者正在使用哪个数据库。
第二个给我这个:
+----------+------------------+ | count(*) | x | +----------+------------------+ | 88 | 10.1.38-MariaDB0 | | 90 | 10.1.38-MariaDB1 | +----------+------------------+