Skip to content

Latest commit

 

History

History
60 lines (41 loc) · 3.75 KB

02-Testing_for_JavaScript_Execution.md

File metadata and controls

60 lines (41 loc) · 3.75 KB
layout title tags
col-document
WSTG - Latest
WSTG

{% include breadcrumb.html %}

Тестирование выполнения JavaScript

ID
WSTG-CLNT-02

Обзор

Уязвимость инъекции JavaScript — подтип межсайтового скриптинга (XSS), который предполагает возможность инъекции произвольного кода JavaScript, который выполняется приложением в браузере жертвы. Эта уязвимость может иметь множество последствий, таких как раскрытие сессионных cookie пользователя, которые могут использоваться для выдачи себя за жертву, или, в более общем смысле, она может позволить злоумышленнику изменить содержимое страницы, которую видят жертвы, или изменить поведение приложения.

Уязвимости инъекции JavaScript могут возникать, когда в приложении отсутствует надлежащая проверка входных и выходных данных, предоставляемых пользователем. Поскольку JavaScript используется для динамического наполнения web-страниц, эта инъекция происходит на этапе обработки контента и, следовательно, влияет на жертву.

При тестировании на наличие этой уязвимости учитывайте, что некоторые символы обрабатываются разными браузерами по-разному. Для справки см. XSS на основе DOM.

Вот пример скрипта, который никак не проверяет переменную rr. Переменная в строке запроса содержит пользовательский ввод и, кроме того, не указывает никакой кодировки:

var rr = location.search.substring(1);
if(rr) {
    window.location=decodeURIComponent(rr);
}

Это означает, что злоумышленник может ввести код JavaScript, просто отправив следующую строку запроса www.victim.com/?javascript:alert(1).

Задача тестирования

  • Найти приёмники и возможные точки инъекции JavaScript.

Как тестировать

Рассмотрим следующее упражнение на DOM XSS

Страница содержит следующий скрипт:

<script>
function loadObj(){
    var cc=eval('('+aMess+')');
    document.getElementById('mess').textContent=cc.message;
}

if(window.location.hash.indexOf('message')==-1) {
    var aMess='({"message":"Hello User!"})';
} else {
    var aMess=location.hash.substr(window.location.hash.indexOf('message=')+8)
}
</script>

Приведённый выше код содержит источник location.hash, который контролируется злоумышленником, который может вставить код JavaScript непосредственно в значение message, чтобы получить контроль над браузером пользователя.