Райтап на задачу «Блекджек на раздевание»

dikiyponos

Автор:

dikiyponos

31 октября 2026

5

31.10.2026
Блекджек на раздевание
Категория:

Web

Задача «Блекджек на раздевание»

Автор:

LastTeamLead

Первая кровь:
feadal
Сложность:
medium
Дата публикации:
09.05.2026
Решений:
34
Рейтинг:
4.8/5
Ссылка:
Решать

Откроем таску, попробуем сыграть.

Партия в блэкджек с Пикси

К большому сожалению, штатно мы можем только сыграть в ничью, в таком случае Пикси не будет раздеваться, что необходимо для флага (да-да).

Вернёмся на главную страницу и попробуем вставить ламерскую кавычку в поле победителей.

Ошибка SQL в поиске победителей

О чудо, наша SQL-инъекция сработала. Если мы откроем DevTools->network, то увидим полный SQL-запрос.

Подробности SQL-ошибки в DevTools

Теперь извлечем таблицы из sqlite_master, вставим.

' UNION SELECT sql,2,3 FROM sqlite_master --
Схема таблиц SQLite

Отлично, у нас есть таблица admins, service_backups и информация о ней. Рассмотрим строку CREATE TABLE admins полностью, там есть id, login, pass_md5, role. Попробуем извлечь.

Введем:

' UNION SELECT login, pass_md5, role FROM admins --

И получим MD5-хеш пароля администратора.

Хеш пароля администратора из таблицы admins

Теперь рассмотрим service_backups.

' UNION SELECT label,backup_path,note FROM service_backups --
Путь к бэкапу в service_backups

Отлично, мы получили ссылку на бэкап. Посмотрим, что там интересное.

Исходный код временного патча

Внутри находится «временный патч». Что можем заметить?

  1. Пароль обрезается до 6 символов: String(password).trim().slice(0, 6)

  2. Есть намеренное «разрешение» для botWinPercentage: if (key === 'botWinPercentage' && parentKey !== '__proto__') continue;

Вероятнее всего подразумевалось, что, т. к. необходимо брутить только 6 символов, то мы можем сделать это на своем устройстве, например с помощью hashcat или john the ripper, но можно поступить проще. Используем радужные таблицы md5, хорошо, что хеширование без соли. Открываем md5decrypt.com.

Поиск пароля по MD5

Ну и для фанатов делать все своими ручками:

Восстановление пароля с помощью John the Ripper

Теперь надо куда-то войти под этими данными. Тут и dirb/gobuster запускать не надо, логично, что это будет /admin. Идём в админку под этими учётными данными casino_admin:p1xie7.

Административная панель с JWT-секретом

Мы получили JWT-секрет, с помощью которого можем выпускать свои собственные JWT-токены, которые будут содержать prototype pollution (botWinPercentage=0), чтобы обыграть бота.

Откроем DevTools нашего игрока, откроем вкладку cookies и возьмем наш JWT-токен.

JWT игрока в cookies

Теперь, чтобы его модифицировать откроем jwt.io.

Изменение JWT в jwt.io

Модифицируем payload и «подпишем» JWT-токен украденным ключом.

Полученный валидный JWT-токен вставляем на сайт и всё, что нам остаётся – нажимать «стоять» до момента раздевания Пикси до нужного вам уровня. Вы знаете, где будет находиться флаг.

Если вы нашли опечатку или ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter

Также по теме:

Райтап на задачу «Бесконечный бензин»

/Разборы задач

Райтап на задачу «Бесконечный бензин»

Изучаем настройки АЗС BugOil и используем prototype pollution, чтобы обойти лимит выдачи топлива.
Прочитать

4

Райтап на задачу «Дуглас Муглис»

/Разборы задач

Райтап на задачу «Дуглас Муглис»

Исследуем подозрительный WebSocket и расшифровываем данные, отправляемые JavaScript-скиммером.
Прочитать

3