Вопрос по sql-inj в SYBASE

Discussion in 'PHP' started by Scipio, 17 Nov 2007.

  1. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    Мож, кто знает, подскажите пожалуйста...

    Есть сервер SYBASE ASE 15.0.1
    Есть sql-inj на сайте, есть вывод полей типа VARCHAR и INT,
    есть соответственно таблица master..syslogins, в ней есть поле password тип VARBINARY, так вот собственно вопрос, как прочитать значение этой колонки, мож есть функция какая нибудь для конвертации, впринципе т.к синтаксис sybase похож на mssql, мож кто подскажет такой вариант в mssql.

    Зы И еще вопрос, есть ли в ase 15.0.1 какойнибудь аналог Information_schema, т.е. мож кто знает как прочитать таблицы и колонки в БД
     
  2. guest3297

    guest3297 Banned

    Joined:
    27 Jun 2006
    Messages:
    1,246
    Likes Received:
    639
    Reputations:
    817
    Юзай поиск я поднимал этот вопрос, имеет синтаксис TSQL, как и mssql.
     
  3. ant0ha

    ant0ha Elder - Старейшина

    Joined:
    22 May 2007
    Messages:
    130
    Likes Received:
    50
    Reputations:
    13
    Конвертировать пароль можно так
    Code:
    select convert(varchar,password)
    а вот запрос чтобы прочитать таблицы
    Code:
    select table_name from SYSTABLES
    SYSTABLES - Информация обо всех таблицах и представлениях

    также есть системные таблицы

    SYSMESSAGES - Список всех сообщений об ошибках сервера
    SYSKEYS - Информация о ключах и внешних ключах
    SYSVIEWS - Тексты всех представлений
    SYSCOLUMNS - Информация о столбцах таблиц
    SYSINDEXES - Информация об индексах
    SYSOBJECTS - Информация о таблицах, триггерах, представлениях и т. п.
    SYSDATABASES - Информация обо всех базах данных на сервере
    SYSPROCEDURES - Информация о представлениях, триггерах и сохраненных процедурах
     
    1 person likes this.
  4. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    [ cash ] нашел твою статью "Работа С СУБД Через Иньекцию Запроса", больше ничего не нашел, она полезна конечно, но для совсем уж начинающих

    поверь, я бы не задавал вопросы, если б все было так просто

    расскажу поподробнее: вопервых абсолютно нет вывода ошибок, точка с запятой не фильтруется d _REQUEST (проверял /*;*/) но сама скуля принимать ; не хочет, start at выдает ошибку (top работает) но это ерунда, в _REQUEST фильтруются кавычки, но это тоже ерунда, также фильтрация < и > (они мне не особо пока нужны были, так что тоже ерунда) convert(varchar,password) - не работает (хотя convert (varchar,1) - все нормально) тоже самое c cast(password as varchar)

    гдето прочитал что структуру БД можно получить пользуя information_schema (соответственно это не так в моем случае)

    да, и еще на серве стоит linux

    [ cash ], я так понимаю у тебя есть опыт работы с ase, у меня его нет, думаю не так уж сложно поделится опытом, темболее я понятливый
     
  5. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    Поле password, как я понял ,запрещено к прочтению, поэтому оно и не выводилось (извиняюсь сразу), SYSTABLES, в стандарте ase 15/0/1 нет, есть syscolumns, [ cash ], скажи, плз, в какую сторону копать для получения таблиц и полей соответственнно, если знаешь конечно
     
  6. guest3297

    guest3297 Banned

    Joined:
    27 Jun 2006
    Messages:
    1,246
    Likes Received:
    639
    Reputations:
    817
    Копать в сторону юзай поиск, вообще скуль провести можно в очень редких случаях.
     
  7. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Scipio, ты хоть ссылку покажи... А то ни сообщения об ошибке, никакой другой информации... Инъекция в Sybase очень уж похожа на мелкософтовосерверную... Информация об именах таблиц хранится в системном каталоге:

    или

    Обратите внимание, что не SYSTABLES, а SYSTABLE. Имена колонок достаются из SYSCOLUMN, но тут идёт запара... В этой таблице нету привычного текстового поля с описанием таблицы, к которой относится выбираемое название поля... Но зато есть поле SYSCOLUMN.table_id, которое соотносится с SYSTABLE.table_id. По ним не составит труда найти соответствие имён и таблиц...

    Теперь что касается перебора... Разве в этом плане что-то изменилось? Всё делается через вывод ошибки (если он включён вообще). Вот пример:

    Кстати будьте готовы к неприятностям - в Sybase права могут раздаваться с разграничением по полям... То есть у вас может быть право на чтение одной колонки в табе и совсем не быть права на чтение другой колонки в этой же табе.

    Что ещё можно сказать? Выполнение команд через xp_cmdshell 'ipconfig /all'.

    Ну и в дополнение скажу, что эксплуатация инъекций в сибейсе весьма затруднительна... Причина этому - разница в грантах на права и объекты по сравнению с другими СУБД и своеобразный синтаксис языка SQL.
     
    1 person likes this.
  8. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    Вобщем проблема решена, всем спасибо
    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 ]`у (я серьезно) действительно самому искать ответы очень полезно, кроме нужной инфы найдешь еще кучу полезной и интересной информации
     
    1 person likes this.