PDA

Просмотр полной версии : XSS экранирование кавычек JSON


Unknown
07.04.2016, 18:14
Добрый день. Возник такой вопрос: на некотором сайте присутствует выдача кое-каких полей в формате JSON, эти поля редактируемы юзером. При этом не происходит никакой замены спецсимволов, за исключением экранирования слэшей и двойных кавычек. Можно ли как-то обойти экранирование двойных кавычек, чтобы подать ввод вроде такого


Code:
test"};prompt(document.domain);

и попробовать реализовать XSS? В данный момент такой ввод воспринимается сервером как


Code:
"text":"test\"};prompt(document.domain);"

pas9x
07.04.2016, 18:22
Если вывод попадает в ... и не экранируются угловые скобки то можно добавить в строку закрывающий тег скрипта, т.е. . Для примера оригинальный скрипт:


Code:

var str = "сюда попадают данные угловые скобки в которых не преобразуются в html-мнемоники";


Добавляем в строку alert(123);// и получаем уже два скрипта:


Code:

var str = "alert(123);//";


Таким образом первый скрипт не выполнится из-за синтаксической ошибки а второй выполнится.

Unknown
07.04.2016, 18:28
pas9x said:
↑ (https://antichat.live/posts/3971298/)
Если вывод попадает в ... и не экранируются угловые скобки то можно добавить в строку закрывающий тег скрипта, т.е. . Для примера оригинальный скрипт:

Code:

var str = "сюда попадают данные угловые скобки в которых не преобразуются в html-мнемоники";


Добавляем в строку alert(123);// и получаем уже два скрипта:

Code:

var str = "alert(123);//";


Таким образом первый скрипт не выполнится из-за синтаксической ошибки а второй выполнится.


Угловые скобки не экранируются, но экранируется слэш в закрывающем тэге, из-за этого так сделать тоже не получится.

pas9x
07.04.2016, 18:39
shotya said:
↑ (https://antichat.live/posts/3971303/)
Угловые скобки не экранируются, но экранируется слэш в закрывающем тэге, из-за этого так сделать тоже не получится.


Не путай слеш и бекслеш. При json-кодировании обычно экранируется бэкслеш а не обычный слеш. Но если экранируется именно слеш то да, ничего сделать уже нельзя.

faza02
07.04.2016, 18:49
а если самому заэкранировать? а на нульбайт как реагирует?

Unknown
07.04.2016, 19:00
yarbabin said:
↑ (https://antichat.live/posts/3971317/)
а если самому заэкранировать? а на нульбайт как реагирует?


Экранируется бэкслешом, если самому ввести бэкслеш он тоже заэкранируется.


Code:
{"text":""

На нуллбайт (%00) реагирует как на обычный ввод.

t0ma5
07.04.2016, 19:04
я бы ещё проверил как реагирует на backspace %08

может там чего стереть можно

а так не очень понятно в какой код попадают ваши данные

ну то есть маловато


Code:
test"};prompt(document.domain);

контекст нужен

Unknown
08.04.2016, 11:40
t0ma5 said:
↑ (https://antichat.live/posts/3971322/)
я бы ещё проверил как реагирует на backspace %08
может там чего стереть можно
а так не очень понятно в какой код попадают ваши данные
ну то есть маловато

Code:
test"};prompt(document.domain);

контекст нужен




Code:
data = { тут большой вложенный JSON ... {"text" : "
test\"};prompt(document.domain);"} ... };

Контекст примерно такой, ввод пользователя был


Code:
"};prompt(document.domain);