Добрый день. Возник такой вопрос: на некотором сайте присутствует выдача кое-каких полей в формате JSON, эти поля редактируемы юзером. При этом не происходит никакой замены спецсимволов, за исключением экранирования слэшей и двойных кавычек. Можно ли как-то обойти экранирование двойных кавычек, чтобы подать ввод вроде такого Code: test"};prompt(document.domain); и попробовать реализовать XSS? В данный момент такой ввод воспринимается сервером как Code: "text":"test\"};prompt(document.domain);"
Если вывод попадает в <script> ... </script> и не экранируются угловые скобки то можно добавить в строку закрывающий тег скрипта, т.е. </script>. Для примера оригинальный скрипт: Code: <script type='text/javascript'> var str = "сюда попадают данные угловые скобки в которых не преобразуются в html-мнемоники"; </script> Добавляем в строку </script><script>alert(123);// и получаем уже два скрипта: Code: <script type='text/javascript'> var str = "</script><script>alert(123);//"; </script> Таким образом первый скрипт не выполнится из-за синтаксической ошибки а второй выполнится.
Угловые скобки не экранируются, но экранируется слэш в закрывающем тэге, из-за этого так сделать тоже не получится.
Не путай слеш и бекслеш. При json-кодировании обычно экранируется бэкслеш а не обычный слеш. Но если экранируется именно слеш то да, ничего сделать уже нельзя.
Экранируется бэкслешом, если самому ввести бэкслеш он тоже заэкранируется. Code: {"text":"<\\\/script>" На нуллбайт (%00) реагирует как на обычный ввод.
я бы ещё проверил как реагирует на backspace %08 может там чего стереть можно а так не очень понятно в какой код попадают ваши данные ну то есть маловато Code: test"};prompt(document.domain); контекст нужен
Code: <script type="text/javascript">data = { тут большой вложенный JSON ... {"text" : " test\"};prompt(document.domain);"} ... };</script> Контекст примерно такой, ввод пользователя был Code: "};prompt(document.domain);