# Final Roll V2
## Описание
Перезалив задачи "Final Roll"
Задача оказалась проще, чем задумывалось. Примите ли вы новый вызов?
---
Re-uploading the "Final Roll" task
The task turned out to be easier than thought. Will you accept the new challenge?
## Краткое описание уязвимости
Представленный сервис имел актуатор(/actuator/), который был в открытом доступе, благодаря этому состояние генератора кодов было предсказуемо.
# Решение
1. Переходим по ссылке "Забыли пароль?".
2. Подбираем пользователя "Admin".
3. После правильного ввода пользователя, вас перебросит на страницу ввода кода.
4. Исследуем сервис, находим актуатор и единственное доступное значение - cookie.

5. При помощи актуатора получаем heapdump. (http://51.250.85.161:8082/actuator/heapdump)
6. Парсим дамп, ищем строку, которая находилась в cookie.
7. По строке из cookie находим в дампе объект "com.google.common.cache.LocalCache$StrongAccessEntry", а в нём запись со своей cookie.

8. В записи со своим cookie находим объект, содержащий в себе 16 объектов класса java.util.Random, пронумерованных от 1 до 16, которые хранят в себе числа типа long. Числа в имени означают номер позиции в коде.

9. Если поисследовать больше, то можно увидеть, что запись о текущем коде живёт всего 15 минут.
10. По сидам из дампа предсказываем следующее значение своего набора рандомов. Предсказать состояние класса java.util.Random, можно создав новый объект класса java.util.Random с таким же сидом. ВНИМАНИЕ, конструктор класса java.util.Random меняет введённый сид.

11. После замены сида у объекта рандома, нужно вызвать метод .nextLong(0, 10). Диапазон значений метода очевиден.
12. Повторяем подставление сида и получение следующего значения для каждого из 16 объектов рандома.
13. Подставляем полученную последовательность из 16 цифр в поле для ввода кода.
14. Получем страницу с флагом.

FLAG:
`bsc{4eVc2yFwS3d0a8khyfC8}`