这两个查询的含义(SQL注入)

时间:2019-04-01 20:26:03

标签: sql sql-injection

有人可以解释为什么这两个查询有时会导致错误吗?我用谷歌搜索了一些解释,但没有一个是正确的。我不想修复它。此查询应实际用于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;

2 个答案:

答案 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 |
+----------+------------------+