Сегодня речь пойдет о небольшом углубление техники эксплуатации SQL инъекций которая получила свое весьма логическое название — «DIOS in SQL injection«. Основы работы с SQL инъекциями в этой статье рассматриваться не будут так как в интернете уйма материала для ознакомления.


        DIOS -(Dump In One Shot|»Дамп всех столбцов и колонок за один запрос«) это техника раскручивание SQL инъекций часто применяемая когда средства автоматизации работы с SQL инъекциями такие как SQLmap, Havij и им подобные не могут справиться с WAF (WebApplicationFirewall) но заведомо известно нам пути обхода этих фаерволов порой вынуждают нас писать дополнительные скрипты для того же SQLmap или свои утилиты под такие ситуации.Я же хочу рассмотреть с вами альтернативу этому и использовать всего лишь браузер.Заранее хочу сказать что область применение этой техники это Union Base SQL инъекций — тобиж те инъекции которые имеют вывод в браузере.Так же реже встречается и среди Error Base SQL иньекций, но встречаются и немного сложнее реализуется.Для слепых инъекций эта техника не применяется.По этому сегодня мы будем рассматривать классическую Union Base SQL injection с применением DIOS в MySQL базах(Также применяется и в PostgreSQL и MSSQL базах).
Для начала попытаемся поэтапно разобрать эту технику и как её реализовать
Как вы уже смогли догадаться по названию (DIOS — Dump In One Shot)  — «Весь дамп в одном выводе» своеобразная техника построения запросов в области инъекций кода SQL которая с  помощью применение операторов языка SQL позволяет нам вывести весь дамп за один запрос.
Для начала давайте посмотрим на следующий запрос в MySQL который выведет все возможные имена баз данных:

Классический вид простейшего DIOS запроса в MySQL базах имеет следующий вид:

В качестве примера будет выступать онлайн площадка для тренировки навыков в sql injection сайт leettime.net так мы закон не нарушаем.
И так есть у нас уязвимый ресурс:

Столбец 222 уязвим — в него и вставим наш DIOS запрос.

Как мы видим нам вернуло список всех баз данных на этом сайте.
2016-01-21-110747_1023x440_scrot

Теперь давайте разбираться как мы пришли к такому запросу.
Для начала давайте посмотрим на такой запрос:

2016-01-21-111236_883x192_scrot

запрос будет идентичен этому запросу:

2016-01-21-111449_1006x207_scrot

И вернет выборку всех данных из таблицы user_name где  выполняется условия where и в нашем случае вернется данные для пользователей admin и hacker так они удовлетворяют условие where.
Идем дальше, смотрим часть запроса

Как мы можем видеть командой select мы делаем выборку переменной @a (@ знак переменной в синтаксисе языка MySQL) из таблицы information_schema.schemata  и благодаря оператору IN все имена баз данных попадают в обработку команды IN и происходит их выборка так как все они существуют в базе.Таким образом выполняется цикл где переменная @a  поставляется и выбирается по каждому существующему имени базы и в результате мы получаем результат на вывод.

Теперь давайте посмотрим на заключительную часть запроса:

Здесь происходит выборка обьедененных значений переменной @a.
Думаю понятно как переменная @a обрабатывается в цикле и как происходит выборка.
Хочу заметить то что для конкатенации строк мы не используем команду group_concat так она умеет возвращать только первых 1024 символов
(Хотя можно обойти это ограничение с помощью команды CAST AS и указать нужное нам ко-тво выводимых символов, но об этом мы сегодня говорить не будем)
Давайте используя наш DIOS запрос выведем имена всех таблиц:
Для терминала команда выглядит так:

2016-01-21-115011_506x478_scrot

И для нашего уязвимого сайта запрос будет выглядеть так:

 

2016-01-21-115811_983x493_scrot
Ну если нам база information_schema не нужна — то можем ее сразу отфильтровать в нашем DIOS запросе
и наш запрос будет иметь следующий вид:

Получим следующий вывод:

2016-01-21-120339_1017x508_scrot

Теперь давайте добавим к нашему выводу еще имена столбцов:

Получаем вывод:

2016-01-21-120915_1008x484_scrot

Если нам нужно получить дамп данных из нужной таблицы также можно использовать запрос вида:

Получаем вывод:

SQL_DIOS

Это мы рассмотрели классический простой DIOS запрос в SQL injection.Далее планируется углубление этой техники и будут рассмотрены техники обхода различных веб фаерволов(WAF)
Всем спасибо за внимание. )