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

这两个查询的含义(sql注入),sql,sql-injection,Sql,Sql Injection,有人能解释为什么这两个查询(有时)会导致错误吗?我在谷歌上搜索了一些解释,但没有一个是对的。我不想修理它。这个查询实际上应该用于SQL注入攻击(我认为是基于错误的SQL注入)。触发的错误应为“重复输入”。我想知道为什么他们有时会指摘错误 谢谢 select count(*) from information_schema.tables group by concat(version(), floor(rand()*2)); select co

有人能解释为什么这两个查询(有时)会导致错误吗?我在谷歌上搜索了一些解释,但没有一个是对的。我不想修理它。这个查询实际上应该用于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;

好的,我将发布一个答案——这更像是对问题本身的框架挑战

基本上:这个查询很愚蠢,应该编写;找出它应该做什么,并以合理的方式重写它。

查询当前做什么

看起来它正在获取当前数据库中的表计数。。。但它是按计算列分组的。该列看起来像是Version(),并在其后面附加“0”或“1”(随机选择)

那么最终的结果呢?两行,每行有一个数值,其总和等于当前数据库中表的总数。如果有30张桌子,你可能一次得到13/17,下一次得到19/11,然后是16/14


我很难相信这就是查询应该做的。因此,与其只是试图修复“错误”——深入研究并找出它应该返回的数据段——然后重写程序来完成它。

第二个问题似乎是试图猜测注射受害者正在使用哪个数据库

第二个是给我这个:

+----------+------------------+ | count(*) | x | +----------+------------------+ | 88 | 10.1.38-MariaDB0 | | 90 | 10.1.38-MariaDB1 | +----------+------------------+ +----------+------------------+ |计数(*)x| +----------+------------------+ |88 | 10.1.38-MariaDB0| |90 | 10.1.38-MariaDB1| +----------+------------------+
到底是什么样的错误?在哪个数据库产品(和版本)上发生这种情况?您提到“有时”…那么导致错误的情况有什么不同呢?我的问题是:WTF从这个查询开始。它是通过随机抛硬币来分组的?然后计算硬币翻转的结果?我是真的很困惑这个查询的意义到底是什么。它可能在试图改变缓存结果的想法。没有上下文很难说。嗨,凯文,谢谢你的回答。这是一种可以用来进行sql注入攻击的特定错误。所以,我并没有试图修复它,我只是试图了解攻击可能使用的错误类型(我试图在数据库中使用它,但它根本不起作用——可能是因为旧版本的数据库或其他原因)。但再次感谢你的时间和支持:)嗯。。。什么我的意思是,如果攻击者正在形成SQL语句,在当前访问级别控制下查询他们想要的任何表。。。攻击已经成功了。也许我不明白,但为什么你需要在那一点上生成一个错误呢?我能想象的唯一可能的事情是“权限升级”,但我怀疑触发一个简单的查询错误是否会让您的权限级别提高。让我解释一下,穿上我的红色队服。如果我发现一个SQL注入漏洞(例如,地址字段未经参数化(甚至清理)而按原样被查询),我可以将自己的命令添加到发送给SQL的搜索语句中。因此,我开始向WHERE子句添加我自己的元素,系统地获取有关服务器实例及其数据库的基本信息。一旦发现漏洞,我不想触发任何错误(可能会提醒您注意我的存在),如果您没有发现漏洞,你没有运行cmd的引擎。我只是在学习,所以我的答案可能有点不对劲,但我认为这将是基于错误的SQL输入,所以你想触发一个错误来查看数据。我现在找到了一些有趣的工作人员。我应该触发类似的错误。“对键1重复输入'~'5.1.1-log'~1'(这不是确切的错误,只是来自类似命令的错误。我发现了许多类似的查询,它们都是为了使错误成为“重复输入”。”。。