Как узнать, что стоит за Json Web Encryption - PullRequest
0 голосов
/ 29 апреля 2020

Вот почтовые данные системы входа в систему, которую я скачал с завязанными глазами (пытаясь самостоятельно изучить ctf).

{"jwe":"eyJraWQiOiJlNjY0NTg4ZS0yNjY1LTQzYmMtYjQ5Ny1mYmVmZGEzYTI2ZGYiLCJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIn0.bAYq1SfpOXpUALY8mQ_omfutvwB37se6xLw29NcSIkEyZVlERSbJpE1eX_kgU7jEW1FUNGgVeoabmMl-3C8MGk5rc4KAE9iod-zCRP46ylRSXFbYu3_kMXlNfM7-W1G2PGPmywgROMOMjsVarg1vj-gFm--88vUEM-ZL9kQI7gVTzZPB_jwrJzGAp0AeEQE1H9xkkHuU-41piWKcH2_X28F1TKJcMNkvaazl1th1fllAZH8P19xsA6eoD1PbCDIwhoJNzvhct2CG6uE1xY4jTZLPGxARn7fF-QubW0IZacxP9MYqZao9wuOH1iW8z-rGSm2CcNlsE_X9ntSjfatfxx7izDe5dSY1emMcDb9xcWrmGGlhkduAUxQv3BMlZ7SHCcM-MEYsg3FG8vMOrxHG4EWPhr4_aOaWg_EV8LD6VFJMRPF5bQEigv-XomheYtZF5KYkCJJ_6CQpzO3LQqa4xL14Nj3B9vj5yEXyY9YGYZQMVGZde5n3RGSGNfMdQa2oJxW9cs94zkafCF4he0qVxcEPiXYQVMESvAE_y3G8UOegwKmcttLIJQJ1mVIzhkAyWPzjTjEgwtQmdxu1Hkt37F30KpIvAGwkhjpcEsOqsf8eT5IZZh21wsrjs-isYsPBsH-fQoM1V8XZyEOi3LI6knPGMz_4bGYSNEfwUOq1-bw.dvuMp84sSnRb9--R.TVVrdqV_oluz54mSHdQNnxnhaJE4ULoJBr3LFFZcAJjEdWPlh97Q8VRd7uiWGsEiawaX6L2FsYaX39OImhddDhcYoHOOnEEAi7HBTlvw1RZHxcml_7LnznH7u53DzDHUesunoRPxT_99-5veBznlCXDiBufe40XRlVLYs1zIrQjxyMp4u6V0UM4EFzsO.LWik0fBAnGH1lX4N1m_2EQ"}

Я обнаружил, что первая ее часть (начало строки до первой «.») - это зашифрованный код base64, который показывает это:

{"kid":"e664588e-2665-43bc-b497-fbefda3a26df","alg":"RSA-OAEP-256","enc":"A256GCM"}.

При поиске по коду веб-сайта я обнаружил каталог, содержащий файл с такой информацией.

website data

Я думал, что остальные данные были зашифрованы в RSA-OAEP-256 и пытался сторнировать другие параметры строки, разделенной символом "." но не получил никакого приличного результата от этого. Я вообще не могу этого понять.

1 Ответ

0 голосов
/ 30 апреля 2020

Если вы хотите понять, что такое JWE, вы можете начать с прочитать спецификацию .

Данные, которые у вас есть, - это JWE в режиме компактной сериализации подходит для веб-контекста:

  • 5 частей, разделенных точками
  • Все детали имеют кодировку base64, надежно закодированную
  • Детали могут быть пустыми строками

Подобно JWS (подписанным токенам), первая часть JWE - это заголовок. Он должен иметь как минимум:

  • алгоритм шифрования ключа alg, который соответствует алгоритму, используемому для шифрования ключа шифрования контента (CEK)
  • алгоритм шифрования контента enc это соответствует алгоритму, используемому для шифрования / дешифрования содержимого с помощью CEK

. kid - это необязательный параметр заголовка, который указывает идентификатор ключа, используемого для вычисления этого токена. Ключ, который вы нашли, это ключ publi c. Его можно использовать для создания других токенов, подобных этому. Вам нужен закрытый ключ для расшифровки этих токенов.

Вторая часть токена - это зашифрованный CEK. Он может быть пустым в зависимости от алгоритма шифрования контента (например, dir или ECDH-ES). Чтобы получить CEK, вам понадобится algortihm alg (RSA-OAEP-256) и закрытый ключ.

Части 3, 4 и 5 - это вектор инициализации (IV), зашифрованное содержимое и тег аутентификации

С помощью этого CEK, алгоритма шифрования контента enc (A256GCM), частей 3 (IV) и 5 ​​(тег), вы сможете расшифровать содержимое токена (часть 4).

Без закрытого ключа RSA вы не сможете его расшифровать (если только вы не знаете, как атаковать RSA-OAEP-256 alg или у вас есть массивные хакерские инструменты)

...