1) Заходим на сайт, видим форму. По классике пробуем ввести admin admin (Ничего не выходит)
2)Регистрируемся с любыми данными (Например: test test)
3)Заходим в ученую запись.
4)Переходим в Admin panelи забираем флаг CODEBY{F4K3_FL4G}
Мы молодцы)))
5) Переходим в Burp, исследуем POST GETзапросы. Нас интересует Cookie: token.
При исследовании понимаем, что token не иное как JWT - JSON WebTokens.
JWT состоит из 3-х частей разделенных точкой 5.1 Заголовок JWT
5.2 Полезная нагрузка JWT
5.3 Подпись JWT
6)Декодируем по очереди три части в base 64 через Burp (Или можем полностью декодировать токен в онлайн декодере JWT) 6.1 Заголовок JWT.
Видим алгоритм шифрования "HS256" и тип "JWT"
6.2 Полезная нагрузка JWT
Здесь видим учетные данные, роль пользователя, и другая информация об авторизации
6.3 декодирование полностью токена. Проверка подписи не обязательна. Можем совершить атаку, подставив значение.
7)Отправляем запрос в репитер.
8) Переходим в декодер и декодируем полезную нагрузку. Заменяем роль пользователя на admin. Кодируем в base64. Копируем полезную нагрузку и заменяем в токене в репитер
9) Отправляем запрос. Получаем флаг.
При измененном виде флага, декодируем в html
Уязвимость: Отсутствие подписи JWT токена
Решение: Внедрить подпись токена от изменения данных
Всем спасибо
Критика принимается
и по традиции
«Не стыдно не знать, стыдно не учиться»
Незнание само по себе не является позором, ноотказ от обучения и игнорирование возможности исправить свои пробелы — это повод для стыда.