UNION表名称错误

时间:2013-12-13 19:16:05

标签: mysql sql sql-injection

我想知道如何使用联盟的一方而不是另一方。请看下面的SQL查询:

SELECT * FROM users WHERE username = 0 and 1=2 
UNION 
SELECT table_name,2,3 from information_schema.tables where table_schema='sqlhack'

现在当我把它输入phpMyAdmin来测试查询时,我得到一个错误,说明在信息模式中没有名为users的表,但是当我有这个时:

 SELECT table_name,2,3 from information_schema.tables where table_schema='sqlhack'

我得到了所需的结果,这是属于sqlhack的所有表。 所以我想知道如何才能使它只进行第二次选择查询?或者只是没有得到第一个SELECT查询的错误。

我正在关注this网站,但如果有帮助澄清,请使用我自己的数据库。

2 个答案:

答案 0 :(得分:1)

您的第一个SELECT正在尝试从表格users中进行选择。第二个验证表sqlhack是否存在;它不会验证users是否存在。

答案 1 :(得分:1)

我通常远离information_schema.tables,因为他们很少拥有我想要的所有细节。

使用特定于T-SQL的命令测试表的存在。

-- Does the schema.table exist?  NULL if not, otherwise a number
select OBJECT_ID('sqlhack.users', 'Table') as my_id