基于错误的SQL注入不会';我不能在MySQL数据库上工作

基于错误的SQL注入不会';我不能在MySQL数据库上工作,mysql,sql-injection,Mysql,Sql Injection,我尝试执行基于重复条目的SQL注入。描述得很好。但在我的例子中,它只适用于几个栏目,而不是所有栏目。例如,它适用于id列,不适用于users表的login列。我还可以使用这种方法提取诸如version()之类的信息。但为什么这对任何列都不起作用呢 示例: 这将按假设工作并抛出重复条目错误: SELECT COUNT(*), CONCAT((SELECT CONCAT(users.id) FROM crm.users LIMIT 1), 0x20, FL

我尝试执行基于重复条目的SQL注入。描述得很好。但在我的例子中,它只适用于几个栏目,而不是所有栏目。例如,它适用于
id
列,不适用于
users
表的
login
列。我还可以使用这种方法提取诸如
version()
之类的信息。但为什么这对任何列都不起作用呢

示例:

这将按假设工作并抛出重复条目错误:

SELECT COUNT(*),
       CONCAT((SELECT CONCAT(users.id)
               FROM crm.users LIMIT 1), 0x20, FLOOR(RAND(0)*2)) x
FROM information_schema.tables GROUP BY x
但这不起作用:

SELECT COUNT(*),
       CONCAT((SELECT CONCAT(users.login)
               FROM crm.users LIMIT 1), 0x20, FLOOR(RAND(0)*2)) x
FROM information_schema.tables GROUP BY x
唯一的区别是列名。但第二个示例返回如下表,而不是错误:

COUNT(*) x
157      admin 0
128      admin 1

第二种情况下没有错误。原因是什么?

是否有登录字段为空的用户?@Shadow,不,我没有。然后执行两个查询,不带计数和分组依据,查看每个查询返回的内容。答案可能在那些结果集中。@Shadow,在“登录”的情况下,我可以看到许多交替的行,分别是
admin 0
admin 1
。在“version()”的情况下,我可以看到许多交替行
5.5.50 0
5.5.50 1
。在
id
情况下,我可以看到许多交替行
312030
312031
。似乎
id
case会导致十六进制(或其他)转换,因为
id
的实际值为1。但我还是找不到真正的答案,或者我就是不明白。