Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Межсайтовый скриптинг XSS - сжатый.docx
Скачиваний:
8
Добавлен:
26.04.2019
Размер:
229.6 Кб
Скачать

Проведение xss-атаки через dom

Признаком уязвимого сайта может служить наличие HTML страницы, использующей данные из document.location, document.URL или document.referrer (или любых других объектов на которые может влиять атакующий) небезопасным способом.

Примечание для читателей незнакомых с этими объектами Javascript: когда код Javascript выполняется в браузере, он получает доступ к нескольким объектам, представленных в рамках DOM (Document Object Model – Объектная Модель Документа). Объект document является главным среди этих объектов и предоставляет доступ к большинству свойств страницы. Этот объект содержит много вложенных объектов, таких как location, URL и referrer. Они управляются браузером в соответствии с точкой зрения браузера (как будет видно ниже, это весьма существенно). Итак, document.URL и document.location содержат URL страницы, а точнее, то, что браузер подразумевает под URL. Обратите внимание, эти объекты не берутся из тела HTML страницы. Объект document содержит объект body, содержащий обработанный (parsed) HTML код страницы.

Не сложно найти HTML страницу, содержащую Javascript код, который анализирует строку URL (получив к ней доступ через document.URL или document.location) и в соответствии с ее значением выполняет некоторые действия на стороне клиенте. Ниже приведен пример такого кода.

По аналогии с примером в [2] рассмотрим следующую HTML страницу (предположим, что это содержание http://www.vulnerable.site/welcome.html):

<HTML> <TITLE>Welcome!</TITLE> Hi <SCRIPT> var pos=document.URL.indexOf("name=")+5; document.write(document.URL.substring(pos,document.URL.length)); </SCRIPT> <BR> Welcome to our system … </HTML>

Однако запрос наподобие этого –

http://www.vulnerable.site/welcome.html?name=<script>alert(document.cookie)</script>

вызвал бы XSS. Рассмотрим, почему: браузер жертвы, получивший это ссылку, отправляет HTTP запрос на www.vulnerable.site и получает вышеупомянутую (статическую!) HTML страницу. Браузер жертвы начинает анализировать этот HTML код. DOM содержит объект document, имеющий поле URL, и это поле заполняется значением URL текущей страницы в процессе создания DOM. Когда синтаксический анализатор доходит до Javascript кода, он выполняет его, что вызывает модификацию HTML кода отображаемой страницы. В данном случае, код ссылается на document.URL и так как часть этой строки во время синтаксического разбора встраивается в HTML, который сразу же анализируется, обнаруженный код (alert(…)) выполняется в контексте той же самой страницы.

Замечания:

  1. Злонамеренный код не встраивается в HTML страницу (в отличие от других разновидностей XSS).

  2. Этот эксплойт будет работать при условии, что браузер не модифицирует символы URL. Mozilla автоматически кодирует символы ‘<’ и ‘>’ (в %3C и %3E соответственно) во вложенных объектах document. Если URL был напечатан напрямую в строке адреса, этот браузер неуязвим для атаки описанной в этом примере. Однако, если для атаки не нужны символы ‘<’ и ‘>’ (в исходном незакодированном виде) атаку можно осуществить. Microsoft Internet Explorer 6.0 не кодирует ‘<’ и ‘>’ и поэтому уязвим к описанной атаке без каких-либо ограничений. Однако существует много различных сценариев атаки, не требующих ‘<’ и ‘>’, и поэтому даже Mozilla не имеет иммунитета к этой атаке.

Ниже идет сравнение обычного XSS и XSS через DOM.

Обычный XSS

XSS через DOM

Главная причина

Небезопасное внедрение клиентского ввода в возвращаемую HTML страницу

Небезопасное и неполностью контролируемое использование (в коде на стороне клиента) DOM объектов

Ошибку допускает

Web разработчик (CGI)

Web разработчик (HTML)

Тип страниц

Только динамические (CGI скрипты)

Обычно статические (HTML), но не обязательно

Обнаружение уязвимости

  • Внедрение данных вручную и анализ результата

  • Автоматизированное внедрение данных и анализ результатов

  • Аудит кода (нужен доступ к исходному коду страницы)

  • Внедрение данных вручную и анализ результата

  • Аудит кода (может быть осуществлен удаленно!)

Обнаружение атаки

  • Логи web сервера

  • Средства обнаружения атак в реальном времени (IDS, IPS, межсетевые экраны для web приложений)

Если возможно применение методов сокрытия атаки и эти методы используются, обнаружение атаки на стороне сервера невозможно

Эффективная защита

  • Проверка данных на стороне сервера

  • Утилиты для предотвращения атак (IPS, межсетевые экраны для web приложений)

  • Проверка данных на стороне клиента (с помощью Javascript)

  • Дополнительный уровень защиты на стороне сервера