SQL-инъекция? CHAR (45,120,49,45,81,45)
Я только что увидел, что это появилось в наших журналах запросов. Чего они добивались?
Полная строка запроса:
properties?page=2side1111111111111 UNION SELECT CHAR(45,120,49,45,81,45),CHAR(45,120,50,45,81,45),CHAR(45,120,51,45,81,45),CHAR(45,120,52,45,81,45),CHAR(45,120,53,45,81,45),CHAR(45,120,54,45,81,45),CHAR(45,120,55,45,81,45),CHAR(45,120,56,45,81,45),CHAR(45,120,57,45,81,45),CHAR(45,120,49,48,45,81,45),CHAR(45,120,49,49,45,81,45),CHAR(45,120,49,50,45,81,45),CHAR(45,120,49,51,45,81,45),CHAR(45,120,49,52,45,81,45),CHAR(45,120,49,53,45,81,45),CHAR(45,120,49,54,45,81,45) -- /*
Изменить: поскольку поиск в Google не возвращал ничего полезного, я хотел задать вопрос для людей, которые сталкиваются с тем же.
Ответы
Ответ 1
Это просто тест для инъекций. Если злоумышленник может видеть xQ в выводе, то они знают, что инъекция возможна.
В этом конкретном запросе нет "риска".
Разработчик не должен обращать внимания на какие-либо механизмы, форматы или значения механизмов инъекций - это не его бизнес.
Для всего бесконечного числа инъекций существует только one - неверно отформатированный запрос. Пока ваши запросы должным образом отформатированы, SQL-инъекции невозможны, Сосредоточьтесь на своих запросах, а не на методах SQL-инъекций.
Ответ 2
Функция Char()
интерпретирует каждое значение как целое число и возвращает строку на основе заданных символов по кодовым значениям этих целых чисел. С помощью Char()
значения NULL пропускаются. Эта функция используется в Microsoft SQL Server, Sybase и MySQL, а CHR()
используется RDBMS.
Функция SQL Char()
пригодится, когда (например) addslashes()
для PHP используется как мера предосторожности в SQL-запросе. Использование Char()
устраняет необходимость использования кавычек в запросе с инжектированием.
Пример кода PHP, уязвимого для SQL-инъекции с использованием Char()
, будет выглядеть примерно так:
$uname = addslashes( $_GET['id'] );
$query = 'SELECT username FROM users WHERE id = ' . $id;
В то время как addslashes()
был использован, script не выполняет надлежащую дезинфекцию ввода, так как нет отметки кавычки. Это может быть использовано с помощью следующей строки SQL-инъекции для загрузки файла /etc/passwd
:
Источник: http://hakipedia.com/index.php/SQL_Injection#Char.28.29