PDA

Просмотр полной версии : Работа С СУБД Через Иньекцию Запроса


guest3297
04.07.2007, 23:42
Работа С СУБД Через Иньекцию Запроса.


Сегодня я хочу поговорить о совешенствовании sql иньекций. В статье не будет новых способов применения sql иньекций а будут показаныы некоторые примеры запросов к базе данных которые можно применять в иньекциях.

Часть 1 Дамп базы(на примере MSSQL).

Начнем с того что некоторые часто упускают с поиска баз используя только поиск таблиц. Как правило администраторы создают 1 юзера на 1 или несколько баз. Для того что бы посмотреть текущие базы обратимся к такой табличке master это системная таблица и присутсвует во всех версиях mssql.
Рассмотрим запрос:
select top 1 name from master..sysdatabases
Данным запросом мы прочтем 1 запись, название 1 таблицы, но это не все что я хотел рассказать, у многих быват сложности по выводу данных из базы данных. Так как дамп базы практически главное за чем начинаем взлом. И так начнем. Для примера будем выводить данные из master..sysdatabases. Какие сопсобы у нас есть? Ну самое банальное что может прийти в голову
select top 100 name from master..sysdatabases
Но мы можем смотреть только по 1 строчке. Поэтому нам надо составить какое то условие или же просто применить аналог лимита.
select top 1 name from master..sysdatabases where not in ('name1')
Вот что используеться обычно это долго и неэфиктивно на мой взгляд должно соблюдаться много правил. Посмотрим другие примеры.
Используем Аналог лимита.
select top 2 start at 1 name from master..sysdatabases
Используем Контрольную сумму и сделаем сортировку по ней от меньего к большему.
select top 1 name from master..sysdatabases where checksum(*)>-9999999999999999999999999999 order by checksum(*)
Теперь мы можем свободно перемещаться по базе данных. Все что нам надо написать небольшой скрипт отпрвляющий пакет и меняющий в нем данные.

Далее Есть банальный вариант но это если только есть колонка id пронумерованная по порядку.
select top 1 from master..sysdatabases where id=2


Часть 2 Обход Фильтров.
Начнем с банального иногда !"№;%:?*()_= символы в запросе могут шифроваться. Могут появиться ошибки поэтому данные символы стоит преобпразовывать в 16 код и посылать в так называемое url кодировке.

Далее символ ' могут быть заменены на () или []. Данной фильтрацией можно обходить пробелы используя непрерывнй подзапрос. Данный вид обхода фильтра исползуеться при фильтрации кавычек какаих либо функциях например xp_cmdshell

xp_cmdshell [NET USER hack password /ADD]
xp_cmdshell [NET LOCALGROUP /ADD Administrators hack]

Добавит юзера hack без пароля если будет открыт порт ремот декспота то мы сразу сможем заджойниться туда под этим логином и пассом.
Фильтрацию пробелов можно обойти примерно так.

select(column1),(column2)from(table1)where(column2 )=100

Обхода фильтрации по регулярным выражениям передаваемым серверу я не нашел.(ps привет админам с хакер ру). В некоторых случаях обход возможен посылкой пакета другим способом POST, HEAD при посылке пакета методом HEAD мы уидим только заголок пакета без данных но запрос исполниться.

Статья написанна только для ознакомления с языком запросов SQL. Материалы приведенные выше будут актуальны на большинстве современных субд, учитывая их архитектуру.

[53x]Shadow
05.07.2007, 00:31
Понравился аналог лимита, не знал про конструкцию top ... start at .., а так же обход ковычек.

Что касается статьи, то имхо мало, 2 часть только про хекс и ковычки - все. Вся статья про MSSQL, название не соответствует содержанию в полном объеме. Мне кажется надо либо добавить в старую статью про "Проведение инъекций в MSSQL", либо надо расписывать и про другие СУБД и методы.
ЗЫ
Объективный взгляд, конструктивное предложение, ничего личного ;)

guest3297
05.07.2007, 00:41
Понравился аналог лимита, не знал про конструкцию top ... start at .., а так же обход ковычек.

Что касается статьи, то имхо мало, 2 часть только про хекс и ковычки - все. Вся статья про MSSQL, название не соответствует содержанию в полном объеме. Мне кажется надо либо добавить в старую статью про "Проведение инъекций в MSSQL", либо надо расписывать и про другие СУБД и методы.

Сюдя по твоему посту ты нефига не понял.
Я не писал про определенную СУБД я писал про SQL как язык.Методы описанные будут работать на oracle mysql mssql pgsql sybase

[53x]Shadow
05.07.2007, 01:03
Собствено здесь понимать нечего - использование top... в MSSQL, аналог лимита мускула и rownum в оракл + обход ковычек c пом. непррерывного () или [] + хекс, вот и все в одну строчку.
По сути дамп базы есть в любом посте в разделе sql инъекции, во фразе "далее юзаем лимит".

Я не писал про определенную СУБД я писал про SQL как язык.Методы описанные будут работать на oracle mysql mssql pgsql sybase

Не будут, например в MySQL версии<5, т.к. нет таблицы IN FORMATION_SCHEMA.TABLES где есть имена таблиц или master..sysdatabases где имена БД. Т.е. не зная конкретных имен хрен, что сольешь!
Так же в мускуле и постгре нет возможности добавить пользователя через инъекцию.
Так что не надо обобщать...
ЗЫ
Я просто предположил, это чисто мое имхо ;) Дело твое, хотел как лучше.

guest3297
05.07.2007, 11:05
Да причем тут базы данных и вообще понимаешь что SQL это язык причем тут базы данных.
Статья написанна по SQL:2003 (http://ru.wikipedia.org/w/index.php?title=SQL2003&action=edit) (Стандарт ANSI) и SQL Server 2005 (Yukon) и PL/SQL (Procedural Language / Structured Query Language). Последнии 2 очень похожи, И большинство фишек работают на всех Язык независимо от базы данных, Другое дело что определенные базы данных работают на своих Стандартах, Можно встретить очень много модификаций и даже самопальных языков и баз. К чему твои коментарии я не пойму чего ты хочешь.

Собствено здесь понимать нечего - использование top... в MSSQL, аналог лимита мускула и rownum в оракл + обход ковычек c пом. непррерывного () или [] + хекс, вот и все в одну строчку.
Пойми хотя бы почему это работает, раз ты такой умный обясни мне.

[53x]Shadow
05.07.2007, 11:21
Другое дело что определенные базы данных работают на своих Стандартах
Согласен, собствено это я и имел ввиду, стандарт один, а реализации все таки разные, по- этому нельзя говорить например об универсальном методе дампа через Sql для всех СУБД, для каждый надо писать отдельный пример...
ЗЫ
кстати у тя случайно нет самого документа (SQL2003 ANSI) , а то нашел тока БНФ грамматику под стандарт.