فروردین امسال (1402) کوئرا یک مسابقه مسابقه فتح پرچم (یا همون CTF) برگزار کرد با نام هکاتون. ثبتنام مسابقه تا 23ام اسفندماه 1401 ادامه داشت و شما میتونستید پس از پرداخت هزینه نسبتا سنگین (480)، برای مسابقه و 18 ساعت آموزش (نه چندان با کیفیت) اقدام کنید. در بخش معرفی رویداد این مطالب نوشته شده بود:
رویداد هکاتون امنیت، چهارمین هکاتون برنامهنویسی کوئرا است که با موضوع امنیت و در چارچوب طرح شهید بابایی بنیاد ملی نخبگان برگزار میشود.
این رویداد شامل یک بخش آموزشی و یک بخش رقابتی است. در ابتدا، موضوعات جذاب و کاربردی حوزه امنیت در ۳ روز و با همراهی اساتید برتر این حوزه برگزار میشود و شما مجموعا ۱۸ ساعت آموزش میبینید. بعد از آموزش به تیمهای ۲ الی ۴ نفره تقسیم میشوید و در یک مسابقه چالشی به رقابت میپردازید. بعد از مسابقه راهحل تیمها داوری میشود و نفرات برتر مشمول دریافت امتیاز نخبگی بنیاد و همینطور برنده جایزه نقدی مسابقه میشوند. علاوه بر این نفرات برتر برای استخدام به شرکتهای مطرح معرفی خواهند شد. برای مشاهده مراحل و زمانبندی رویداد روی این لینک کلیک کنید.
? به تمام شرکتکنندگان، گواهی شرکت در رویداد اهدا خواهد شد اما فقط نفرات برتر مسابقه و بعد از داوری راهحلها، مشمول دریافت امتیاز نخبگی بنیاد میشوند.
⚠️ شرکت در رویداد به صورت فردی است اما پیش از مسابقه، شرکتکنندگان به تیمهای ۲ الی ۴ نفره تقسیم میشوند تا به صورت تیمی به رقابت بپردازند. اگر از ابتدا تیم شما مشخص است و دوست دارید با تیم خود در این رویداد شرکت کنید لطفا به صورت جدا جدا ثبتنام خود را تکمیل کنید و بعد از ثبتنام به ما اطلاع دهید که میخواهید در یک تیم باشید.
برای برگزاری رویداد از پلتفرم CTFd استفاده شده بود و تیم کوئرا چند روز قبل از مسابقه، با هدف آشنایی بچهها با پلتفرم یک کوییز آزمایشی (و بدون تاثیر در نتایج مسابقه) قرار داد. سوالات این کوییز از رویدادهایی مثل picoctf و uutctf انتخاب شده بودند و به عنوان دست گرمی کمک بزرگی محسوب میشد. در پرانتز این هم بگم که سوالات مسابقه با اختلاف....باااا اختلااااف، سختتر و جذابتر بودند.
امتیاز: 100
متن سوال: Can you decode the flag?
فایل: flag.txt
queraCTF{2803 2817 2801 280A 2807 2807 2811_280A 280E _281B 2817 2811 2801 281E}
توجه: در فایل اصلی، هر یک از کاراکترها در یک خط مجزا قرار داشتند. همچنین هر یک از اعداد 28xx در یک خط قرار داشت که برای خوانایی پست، خط حروف حذف و خط میان اعداد چها رقمی با فاصله جایگزین شدند.
خب باید اعتراف کنم که این سوال به شدت ساده بود و من به شدت جاده خاکی زدم :)) . با این حال جاده جالبی بود...بذارین قبل از گفتن راه حل بگم چی شد. اولین حدس من با دیدن دنباله اعداد بالا (که غلط هم از آب دراومد) این بود که با یک رمز shift (مثل caesar cipher) مواجه هستم و اون بخش 2800 صرفا یه رد گم کنیه. برای بررسی این فرضیه یک اسکریپت پایتون نوشتم. این اسکریپت میومد و خیلی شیک و مجلسی کاراکترهای متناظر با اعداد بالا (که 2800 ازشون کم شده بود) را با یک عدد جمع میکرد و کاراکتر جدید را چاپ میکرد.
بخشی خروجی کد بالا یه چیزی شبیه اینه:
0D.744>7;HD>.K
1E/855?8<IE?/L
2F0966@9=JF@0M
3G1:77A:>KGA1N
4H2;88B;?LHB2O
5I3<99C<@MIC3P
6J4=::D=ANJD4Q
7K5>;;E>BOKE5R
8L6?<<F?CPLF6S
9M7@==G@DQMG7T
:N8A>>HAERNH8U
;O9B??IBFSOI9V
<P:C@@JCGTPJ:W
بعد از کمی سعی و خطا با کاراکترهای مختلف بالاخره قانع شدم که راه حل این نیست.
فرض دومم این بود که با یک substitution cipher طرفم و اون Peaky Blinders یک نقشی در راه حل داره. در این مرحله توجهم را گذشتم روی اون دو تا عدد 2807 بخش اول (قبل از اولین _) و همینطور محتوای بخش دوم (یعنی 280A 280E). در این گام تاریخی رفتم و فهرست شخصیتهای سریان پیکی بلایندرز را گرفتم و با ctrl+f دنبال اسمهایی کشتم که هفت حرفی هستند و کاراکتر پنجم و ششمشون یکیه. نتیجه شد Jurossi :). بخش دوم را احتمال دادم on باشه چون در Jurossi هم کاراکتر چهارم با کد 280A اومده (تا اینجای کار کلی فسفر سوزونده بودم). بخش سوم را میدونستم باید یک کلمه 5 حرفی باشه و با توجه به کد کراکترهای Jurossi میدونستم باید به فرمت ؟uir? باشه. رفتم سر یک سایت حدس کلمه و با حرز قاطع :)) نتیجه گرفتم که فلگ میشه queraCTF{jurossi_on_quirk}. تا همین لحظه دارم از این سیر تفسیر و استدلال میخندم.
برای حل این چالش کافیه در جدول UTF-8 کد کاراکترهای فایل flag را سرچ کنید. بخش 28xx مربوط به کاراکترهای بریل (Braille) میشه.
queraCTF{⠃⠗⠁⠊⠇⠇⠑_⠊⠎_⠛⠗⠑⠁⠞}
با استفاده از CyberChef میشه به فلگ رسید:
جواب: queraCTF{BRAILLE_IS_GREAT}