Я работаю над курсом по кибербезопасности, содержащим вызов на хосте SQL Server 2000.
Я пропустил файл asp
, содержащий исходный код для страницы входа в систему, который содержит жестко закодированный запрос, который принимаетимя пользователя и пароль от пользователя и переходит к запросу db ...
sSql = "SELECT * FROM Users where user_name='" & username & "' and user_password='"&password&"'"
Перед тем, как это будет выполнено, пользовательский ввод фильтруется с помощью цикла по приведенному ниже методу удаления..
' " - & % / \ | >
replace(myString, "&", "")
Я пытаюсь экранировать строку, содержащую пользователя или пароль, прерывать развивающийся запрос и прерывать его собственным, а затем закомментировать оставшуюся часть, чтобы сохранить ее «действительной».Чтобы обойти черный список, я пытаюсь передать SUBSTRING
, который будет декодировать последовательность шестнадцатеричных символов в допустимый вложенный запрос.
Я проверил обе части в VB-скрипте песочницы, чтобы проверить обработку закодированногострока и запустите строку в онлайн-эмуляторе MSSQL здесь , и он прекрасно декодирует запрос.
ПРИМЕЧАНИЕ: эмулятор Sql Server 2014 Express Edition
не 2K.Не могу найти один за 2K
Надеюсь, это имеет смысл!
Вот то, что я пытаюсь передать и чего каждый персонаж пытается достичь ...
Закодированный запрос:
SELECT CONVERT(VARCHAR(60), SUBSTRING(0x22273B2053454C454354202A2066726F6D207573657273205748455245206E616D65203D2061646D696E3B202D2D20, 1, 96))
Переводится в (с завершающим пробелом):
"'; SELECT * from users WHERE name = admin; --
Я предполагаю, что общий запрос ниже формируется ПОСЛЕ обработки SUBSTRING
: sSql = "SELECT * FROM Users where user_name='""'; SELECT * from users WHERE name = admin; -- & username & "' and user_password='"&password&"'"
Я надеюсь, что приведение к формированию двойной и одинарной кавычки для моего вредоносного запроса приведет к разрыву строки, а последующая точка с запятой завершит запрос, не вызывая исключения, а затем приведет к тому, что сервер обработает мой запрос и отброситненужный остаток.
Мой вопрос, является ли этот подход действительным с точки зрения SQL Server 2000?или мои предположения о том, как сервер получает и обрабатывает запрос, неверны?