Мож, кто знает, подскажите пожалуйста... Есть сервер SYBASE ASE 15.0.1 Есть sql-inj на сайте, есть вывод полей типа VARCHAR и INT, есть соответственно таблица master..syslogins, в ней есть поле password тип VARBINARY, так вот собственно вопрос, как прочитать значение этой колонки, мож есть функция какая нибудь для конвертации, впринципе т.к синтаксис sybase похож на mssql, мож кто подскажет такой вариант в mssql. Зы И еще вопрос, есть ли в ase 15.0.1 какойнибудь аналог Information_schema, т.е. мож кто знает как прочитать таблицы и колонки в БД
Конвертировать пароль можно так Code: select convert(varchar,password) а вот запрос чтобы прочитать таблицы Code: select table_name from SYSTABLES SYSTABLES - Информация обо всех таблицах и представлениях также есть системные таблицы SYSMESSAGES - Список всех сообщений об ошибках сервера SYSKEYS - Информация о ключах и внешних ключах SYSVIEWS - Тексты всех представлений SYSCOLUMNS - Информация о столбцах таблиц SYSINDEXES - Информация об индексах SYSOBJECTS - Информация о таблицах, триггерах, представлениях и т. п. SYSDATABASES - Информация обо всех базах данных на сервере SYSPROCEDURES - Информация о представлениях, триггерах и сохраненных процедурах
[ cash ] нашел твою статью "Работа С СУБД Через Иньекцию Запроса", больше ничего не нашел, она полезна конечно, но для совсем уж начинающих поверь, я бы не задавал вопросы, если б все было так просто расскажу поподробнее: вопервых абсолютно нет вывода ошибок, точка с запятой не фильтруется d _REQUEST (проверял /*;*/) но сама скуля принимать ; не хочет, start at выдает ошибку (top работает) но это ерунда, в _REQUEST фильтруются кавычки, но это тоже ерунда, также фильтрация < и > (они мне не особо пока нужны были, так что тоже ерунда) convert(varchar,password) - не работает (хотя convert (varchar,1) - все нормально) тоже самое c cast(password as varchar) гдето прочитал что структуру БД можно получить пользуя information_schema (соответственно это не так в моем случае) да, и еще на серве стоит linux [ cash ], я так понимаю у тебя есть опыт работы с ase, у меня его нет, думаю не так уж сложно поделится опытом, темболее я понятливый
Поле password, как я понял ,запрещено к прочтению, поэтому оно и не выводилось (извиняюсь сразу), SYSTABLES, в стандарте ase 15/0/1 нет, есть syscolumns, [ cash ], скажи, плз, в какую сторону копать для получения таблиц и полей соответственнно, если знаешь конечно
Scipio, ты хоть ссылку покажи... А то ни сообщения об ошибке, никакой другой информации... Инъекция в Sybase очень уж похожа на мелкософтовосерверную... Информация об именах таблиц хранится в системном каталоге: или Обратите внимание, что не SYSTABLES, а SYSTABLE. Имена колонок достаются из SYSCOLUMN, но тут идёт запара... В этой таблице нету привычного текстового поля с описанием таблицы, к которой относится выбираемое название поля... Но зато есть поле SYSCOLUMN.table_id, которое соотносится с SYSTABLE.table_id. По ним не составит труда найти соответствие имён и таблиц... Теперь что касается перебора... Разве в этом плане что-то изменилось? Всё делается через вывод ошибки (если он включён вообще). Вот пример: Кстати будьте готовы к неприятностям - в Sybase права могут раздаваться с разграничением по полям... То есть у вас может быть право на чтение одной колонки в табе и совсем не быть права на чтение другой колонки в этой же табе. Что ещё можно сказать? Выполнение команд через xp_cmdshell 'ipconfig /all'. Ну и в дополнение скажу, что эксплуатация инъекций в сибейсе весьма затруднительна... Причина этому - разница в грантах на права и объекты по сравнению с другими СУБД и своеобразный синтаксис языка SQL.
Вобщем проблема решена, всем спасибо 2 groundhog & ant0ha, хоть убейте, но в ASE я не нашел таблицы ни SYSTABLE, ни SYSTABLES, их описания (даже упоминания о какой то из них) я не нашел и в офицальном мануале, если не верите можете проверить, вот ссылка на ман: http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.tables/html/tables/tables2.htm Если кому интересно вот способ, как я вытащил имена таблиц и колонок (кстати в гугле так и не нашел, как это делать): таблицы - это объекты, информация о всех объектах БД хранится в системной таблице sysobjects, оттуда их и надо доставать, объект "пользовательские таблицы" в sysobjects имеют объектный тип "U", отсюда можно сделать запрос: Code: Select name,id from dbname..sysobjects where type=0x55 следующий запрос: Code: Select name,id from dbname..sysobjects where type=0x55 and id not in (<полученный id>) и т.д. после того, как мы получили id и имена всех таблиц в БД можно вытащить имена колонок из системной таблицы syscolumns: Code: Select name,colid from dbname..syscolumns where id=<id таблицы> ну и перебирать значения colid Да, забыл сказать, для того что бы перебирать значения можно использовать top start at, но в моем случае это было невозможно (незнаю почему) а переписывать примеры неохота, думаю и так кому надо тот поймет ЗЫ Еще раз всем спасибо, отдельное спасибо [ cash ]`у (я серьезно) действительно самому искать ответы очень полезно, кроме нужной инфы найдешь еще кучу полезной и интересной информации