Как возможна инъекция HTML в этом вызове domxss.com

avatar
Black Wind
20 ноября 2021 в 18:13
233
1
3

Проведенное OWASP тестирование страницы внедрения HTML (ссылка) показывает определенный код, который предположительно уязвим для внедрения HTML.

<script src="../js/jquery-1.7.1.js"></script>
<script>
function setMessage(){
    var t=location.hash.slice(1);
    $("div[id="+t+"]").text("The DOM is now loaded and can be manipulated.");
}
$(document).ready(setMessage  );
$(window).bind("hashchange",setMessage)
</script>
<body>
    <script src="../js/embed.js"></script>
    <span><a href="#message" > Show Here</a><div id="message">Showing Message1</div></span>
    <span><a href="#message1" > Show Here</a><div id="message1">Showing Message2</div>
    <span><a href="#message2" > Show Here</a><div id="message2">Showing Message3</div>
</body>

Этот код является одной из проблем на (domxss.com), и я не знаю, насколько он уязвим.

Насколько я понимаю, хэш URL-адреса можно использовать в качестве входных данных, и любое изменение URL-адреса вызовет функцию setMessage. Этот хэш URL будет моей полезной нагрузкой. Однако эта полезная нагрузка используется только в качестве селектора в jQuery, где я врезался в стену.

Я относительно новичок в XSS, поэтому буду признателен за любую полезную нагрузку. Объяснение, очевидно, приветствуется.

Также будут полезны любые ресурсы для лучшего понимания атак с внедрением HTML через jQuery.

Источник
Brad
20 ноября 2021 в 18:15
0

Прошло много времени с тех пор, как я использовал jQuery, но jQuery также может создавать новые элементы с помощью своего конструктора. Что-то вроде $('<script src="evil.js"></script>'). Не уверен, работает ли это в контексте этого селектора или нет... возможно, стоит попробовать.

Ответы (1)

avatar
CertainPerformance
20 ноября 2021 в 18:41
3

Да, очень старые версии jQuery уязвимы для XSS из строки динамического селектора. См. Ошибка № 11290 в системе отслеживания ошибок jQuery — если правильно сформулировать, строка селектора может быть случайно интерпретирована как HTML. Если строка селектора может быть предоставлена ​​пользователем, у вас могут возникнуть проблемы.

Для минимального примера:

$(`div[class='<img src="" onerror=alert("evil")>]`).text("The DOM is now loaded and can be manipulated.");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

Итак, оригинал

$("div[id="+t+"]")

может быть внедрен с таким t, что приводит к запуску произвольного кода.

const t = `'<img src="" onerror=alert("evil")>]`;
$("div[id="+t+"]").text("The DOM is now loaded and can be manipulated.");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

Ошибка была исправлена ​​9 лет назад, поэтому, если вы намеренно не используете устаревшую версию jQuery и никогда не обновляете свои зависимости, она, вероятно, не повлияет на вас.

Ошибка была окончательно вызвана недостаточно строгим регулярным выражением..

Salman A
20 ноября 2021 в 18:50
0

В связанном исправлении ошибки действительно упоминается, что оно должно исправить «атаку xss через хеш».