XSS экранирование кавычек JSON

Discussion in 'Песочница' started by shotya, 7 Apr 2016.

  1. shotya

    shotya New Member

    Joined:
    21 Dec 2015
    Messages:
    14
    Likes Received:
    4
    Reputations:
    3
    Добрый день. Возник такой вопрос: на некотором сайте присутствует выдача кое-каких полей в формате JSON, эти поля редактируемы юзером. При этом не происходит никакой замены спецсимволов, за исключением экранирования слэшей и двойных кавычек. Можно ли как-то обойти экранирование двойных кавычек, чтобы подать ввод вроде такого
    Code:
    test"};prompt(document.domain);
    и попробовать реализовать XSS? В данный момент такой ввод воспринимается сервером как
    Code:
    "text":"test\"};prompt(document.domain);"
     
  2. pas9x

    pas9x Elder - Старейшина

    Joined:
    13 Oct 2012
    Messages:
    423
    Likes Received:
    585
    Reputations:
    52
    Если вывод попадает в <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>
    
    Таким образом первый скрипт не выполнится из-за синтаксической ошибки а второй выполнится.
     
  3. shotya

    shotya New Member

    Joined:
    21 Dec 2015
    Messages:
    14
    Likes Received:
    4
    Reputations:
    3
    Угловые скобки не экранируются, но экранируется слэш в закрывающем тэге, из-за этого так сделать тоже не получится.
     
  4. pas9x

    pas9x Elder - Старейшина

    Joined:
    13 Oct 2012
    Messages:
    423
    Likes Received:
    585
    Reputations:
    52
    Не путай слеш и бекслеш. При json-кодировании обычно экранируется бэкслеш а не обычный слеш. Но если экранируется именно слеш то да, ничего сделать уже нельзя.
     
  5. yarbabin

    yarbabin HACKIN YO KUT

    Joined:
    21 Nov 2007
    Messages:
    1,663
    Likes Received:
    916
    Reputations:
    363
    а если самому заэкранировать? а на нульбайт как реагирует?
     
    _________________________
  6. shotya

    shotya New Member

    Joined:
    21 Dec 2015
    Messages:
    14
    Likes Received:
    4
    Reputations:
    3
    Экранируется бэкслешом, если самому ввести бэкслеш он тоже заэкранируется.
    Code:
    {"text":"<\\\/script>"
    На нуллбайт (%00) реагирует как на обычный ввод.
     
  7. t0ma5

    t0ma5 Reservists Of Antichat

    Joined:
    10 Feb 2012
    Messages:
    829
    Likes Received:
    815
    Reputations:
    90
    я бы ещё проверил как реагирует на backspace %08
    может там чего стереть можно :)
    а так не очень понятно в какой код попадают ваши данные
    ну то есть маловато
    Code:
    test"};prompt(document.domain);
    
    контекст нужен :)
     
    _________________________
  8. shotya

    shotya New Member

    Joined:
    21 Dec 2015
    Messages:
    14
    Likes Received:
    4
    Reputations:
    3
    Code:
    <script type="text/javascript">data = { тут большой вложенный JSON ... {"text" : "
    test\"};prompt(document.domain);"} ... };</script>
    Контекст примерно такой, ввод пользователя был
    Code:
    "};prompt(document.domain);