Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
В нашем варианте в заголовке присутствует ключ kid
, указывающий на приватный ключ, а в качестве подписанных данных значатся используемые при регистрации данные — имя пользователя и адрес электронной почты. Но в данных присутствует еще один ключ admin_cap
, скорее всего обозначающий наличие привилегий.
Что делать дальше, понятно — нужно изменить ключ, отвечающий за наличие привилегий администратора, подписать новые данные, сгенерировать новый JWT и заменить старый на сервисе заметок. Наличие привилегий администратора может дать ряд своих преимуществ — от чтения приватной информации до установки на сервис разных дополнений (что, скорее всего, приведет нас к удаленному выполнению кода).
С изменением ключа admin_cap
все ясно, просто выставим единичку. Но что сделать с подписью? В заголовке указан адрес приватного ключа, что наталкивает на идею: сгенерировать свою пару ключей для подписи токена, разместить их на своем веб‑сервере и затем в заголовке указать адрес ключа на этом сервере. Сначала сгенерируем пару ключей, а потом переведем в формат PEM.
ssh-keygen -t rsa -b4096 -m PEM -fprivKey.key
openssl rsa -inprivKey.key -pubout -outform PEM -outpubKey.key.pub
Генерирование пары ключейТеперь запустим в той же директории простой веб‑сервер на основе Python 3.
python3 -mhttp.server
Пора генерировать новый токен. Изменяем значения по ключам admin_cap
и kid
, во втором случае указываем URL сгенерированного ключа. Также вставляем сгенерированные публичный и приватный ключи в поля Verify Signature. Если ты все сделал правильно, то ниже токена увидишь надпись Signature Verified.
Вставляем новый токен в cookie, например с помощью расширения для браузера Cookie Editor, и обновляем страницу. В окне запущенного веб‑сервера увидим обращение к файлу ключа, а в браузере, если обновить страницу, появится ссылка на админскую панель.
Нам стали доступны для просмотра заметки администратора — можно поискать в них что‑нибудь интересное. Но помимо этого, открылась форма для загрузки файлов. Среди админских заметок видим упоминание исполнения файлов PHP, а это потенциальный вектор атаки.
|
|