راهنمای چالش رمزنگاری - چالش اول

1404-05-26 11:59

رایت آپ چالش Crypto Challenge (JWT + Base64)

 

 

در این چالش یک JWT در اختیار کاربران قرار داده شده است. آن‌ها باید توکن را decode نموده و مقدار فیلدی به نام username را پیدا کنند. مقدار username خودش Base64 است؛ با این حال عمداً کمی «به‌هم‌ریخته» شده و باید اصلاح شود تا به فلگ برسیم.

 

تشخیص نوع داده

 

توکن سه بخش دارد که با نقطه جدا شده‌اند (header.payload.signature). همین الگو، به‌علاوه خروجی ابزارهای شناسایی (تصویر زیر – Hashes.com)، نشان می‌دهد با JWT طرفیم.

 


دیکد کردن JWT

 

توکن را در یکی از ابزارها باز کنید (مثلاً Burp Decoder یا jwt.io).

 

 

Header بعد از Base64URL-decode چیزی شبیه این است:

 

{"alg":"HS256","typ":"JWT"}

 

Payload بعد از Base64URL-decode شبیه این است:

 

{

  "sub":"1234567890",

  "username":"WYRtaW4tc2FiYXNhZmV2aWxsYWdl",

  "iat":1516239022

}


نکته: JWT رمزنگاری نشده؛ فقط Base64URL شده است. امضا (HS256) برای یکپارچگی است، نه محرمانگی.

 

دیکد کردن username

 

مقدار username خودش به Base64 است. اگر همین مقدار را دیکد کنیم، خروجی «مشکوک» می‌شود:

 

WYRtaW4tc2FiYXNhZmV2aWxsYWdl  →  Y„min-sabasafevillY‡e

 

می‌بینیم ابتدای رشته به‌هم ریخته است؛ Y„min باید در واقع admin باشد. سرنخش این است که Base64 کلمه‌ی admin برابر YWRtaW4 است، ولی رشته‌ی ما با WY... شروع شده (جابجایی احتمالی دو کاراکتر اول). همچنین به نظر می‌رسد این مقدار در انتهای رشته نیز تغییر پیدا کرده است.

 

اصلاح به‌هم‌ریختگی و دیکد نهایی

 

با برگرداندن دو کاراکتر اول Base64 از WY... به YW... و همچنین همین مقدار در انتهای رشته، مقادیر معتبر می‌شوند:

 

 

از شما دوستان گرامی بابت مطالعه این مقاله تشکر می‌کنم و امیدوارم محتوای آن و همچنین چالش مربوطه مورد توجه شما قرار گرفته باشد.

 

لینک چالش:

 

https://challenginno.ir/challenge/cryptography-1

 

نویسنده: احسان نیک آور