Значение этих двух запросов (sql инъекция) - PullRequest
0 голосов
/ 01 апреля 2019

Может кто-нибудь объяснить, почему эти два запроса (иногда) вызывают ошибки?Я гуглил некоторые объяснения, но ни одно из них не было правильным.Я не хочу это исправить.Эти запросы должны использоваться для атаки SQL-инъекцией (я думаю, SQL-инъекция основана на ошибках).Вызванная ошибка должна быть «повторяющаяся запись».Я пытаюсь выяснить, почему они иногда считают ошибки.

Спасибо.

select 
    count(*) 
from 
    information_schema.tables 
group by 
    concat(version(),
    floor(rand()*2));

select 
    count(*),
    concat(version(),
    floor(rand()*2))x 
from 
    information_schema.tables 
group by 
    x;

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Кажется, второй пытается угадать, какую базу данных использует жертва инъекции.

Второй дает мне это:

+----------+------------------+
| count(*) | x                |
+----------+------------------+
|       88 | 10.1.38-MariaDB0 |
|       90 | 10.1.38-MariaDB1 |
+----------+------------------+
1 голос
/ 02 апреля 2019

Хорошо, я собираюсь опубликовать ответ - и это скорее рамочный вызов для самого вопроса.

По сути: этот запрос глуп, и его следует написать;выясните, что он должен сделать, и переписайте его так, чтобы это имело смысл.

Что делает запрос в настоящее время?

Похоже, он получаетколичество таблиц в текущей базе данных ... кроме группировки по вычисляемому столбцу.И этот столбец выглядит так, как будто это Version () и добавляет к нему «0» или «1» (выбирается случайным образом).

Итак, конечный результат?Две строки, каждая из которых имеет числовое значение, сумма которого добавляет к общему количеству таблиц в текущей базе данных.Если имеется 30 таблиц, вы можете получить 13/17 один раз, 19/11 следующий, а затем 16/14.

Мне трудно поверить, что это то, что запрос предполагается сделать.Поэтому вместо того, чтобы просто пытаться исправить «ошибку», найдите и выясните, какую часть данных он должен вернуть, а затем переписайте процедуру, чтобы сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...