Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Песочница (https://forum.antichat.xyz/forumdisplay.php?f=189)
-   -   XSS экранирование кавычек JSON (https://forum.antichat.xyz/showthread.php?t=439629)

Unknown 07.04.2016 18:14

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

Код:

test"};prompt(document.domain);
и попробовать реализовать XSS? В данный момент такой ввод воспринимается сервером как

Код:

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

pas9x 07.04.2016 18:22

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

Код:


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

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

Код:


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

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

Unknown 07.04.2016 18:28

Цитата:

Сообщение от pas9x

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


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

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


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

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

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

pas9x 07.04.2016 18:39

Цитата:

Сообщение от shotya

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

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

faza02 07.04.2016 18:49

а если самому заэкранировать? а на нульбайт как реагирует?

Unknown 07.04.2016 19:00

Цитата:

Сообщение от yarbabin

а если самому заэкранировать? а на нульбайт как реагирует?

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

Код:

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

t0ma5 07.04.2016 19:04

я бы ещё проверил как реагирует на backspace %08

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

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

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

Код:

test"};prompt(document.domain);
контекст нужен

Unknown 08.04.2016 11:40

Цитата:

Сообщение от t0ma5

я бы ещё проверил как реагирует на backspace %08
может там чего стереть можно
а так не очень понятно в какой код попадают ваши данные
ну то есть маловато
Код:

test"};prompt(document.domain);
контекст нужен

Код:

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

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

Код:

"};prompt(document.domain);


Время: 19:32