برنامه نویسی

نوشته NYP Infosec دسامبر CTF 2024!

پس زمینه

من اخیراً یک چالش Capture The Flag (CTF) ایجاد کردم که بعداً در NYP Infosec دسامبر CTF 2024 مورد استفاده قرار گرفت.

الهام بخش ایجاد این چالش در درجه اول از چالش CTF دیگری در PicoCTF 2024 با عنوان “SansAlpha” نشات گرفت. ایده اصلی پشت CTF این است که شرکت کنندگان بفهمند چگونه دستورات را بدون استفاده از حروف الفبا اجرا کنند. راه های مختلفی برای حل آن وجود دارد، اما برای انجام آن نیاز به تجربه و خلاقیت است. من روند فکر را به طور مفصل طی خواهم کرد تا حتی برای مبتدیان نیز به راحتی قابل پیگیری باشد.

چالش CTF: وحشی

خالق – ادوین اوه
دسته – متفرقه
سختی – متوسط

توضیحات:
کریسمس برگشت، اما چیزی اشتباه است – بابا نوئل گم شده است! آیا می توانید بابانوئل را ردیابی کنید، اسرار پنهان را کشف کنید و کریسمس را به موقع نجات دهید؟

توضیحات تصویر
در نگاه اول، می‌توانیم ببینیم که به یک اتصال SSH دسترسی داریم.

ssh santa@34.142.181.57 -p 8010 
password: xmas
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیحات تصویر
ما می توانیم تأیید کنیم که دستورات عادی لینوکس، حداقل از طریق “الفبا” غیرفعال شده اند. پس از تحقیق آنلاین، می دانیم که شخصیت های خاصی مانند حروف عام و نمادها ما می توانیم برای تقلید احتمالاً دستورات استفاده کنیم.

توضیحات تصویر

# Basic Linux knowledge you need to know here
/ #Backslash separates directories in Linux file system
? #Acts as a wildcard; Example: ???? represents 4 characters
/home/user/ #Standard directory of a user in a Linux environment
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

از روی تصویر می بینید که من سعی می کنم آنچه را که در داخل دایرکتوری کاربر وجود دارد را برشمارم. نتیجه مسیر رسیدن به پرچم است. پس از فهمیدن موقعیت پرچم، باید راهی برای بازیابی پرچم پیدا کنیم. اولین چیزی که باید به ذهن متبادر شود یافتن یک فایل اجرایی برای انجام این کار است.

# Most executables are stored in this directory:
/bin #bin short for binary
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیحات تصویر
پس از برشمردن /bin دایرکتوری، من این فایل اجرایی را پیدا کردم /bin/base64. اگر نمی دانید base64 چیست، راهی برای رمزگذاری رشته ها است. اکنون می‌خواهم پرچم را با استفاده از base64 رمزگذاری کنم و بعداً آن را رمزگشایی کنم.

توضیحات تصویر
اولین چیزی که من امتحان کردم استفاده از حروف عام برای تقلید دایرکتوری /bin/base64 با استفاده از /???/?????? بود، اما با دیگر فایل های باینری که با دایرکتوری های باینری که تعداد کاراکترهای یکسانی دارند، مطابقت دارند، اشتباه گرفته می شد. برای به دست آوردن آنچه می خواهیم که /bin/base64 است، باید فیلتر کنید.

  1. فیلتر در مقابل base32 ما به سادگی می توانیم 64 اضافه کنیم /???/?????? to /???/????64
  2. همانطور که از این پیام می بینید، اکنون بین /bin/base64 و /bin/x86_64 مخلوط می شود:
    /bin/base64: extra operand ‘/bin/x86_64’
  3. ما می توانیم خط زیر را از طریق علامت تعجب و globbing > فیلتر کنیم [!] با هر شخصیتی که نیست مطابقت دارد. > [!_] با هر کاراکتری که زیرخط نباشد مطابقت دارد. به این ترتیب می توانیم دایرکتوری را فیلتر کنیم /bin/x86_64.

خروجی نهایی یک رشته کدگذاری شده را نشان می دهد. تنها کاری که باید انجام شود رمزگشایی رشته کدگذاری شده است. می توانید این کار را از طریق ترمینال انجام دهید یا برای رمزگشایی به رمزگشا بروید. بالاخره پرچم را پس می گیرید!
توضیحات تصویر

دیدگاه نویسنده

برای متمایز کردن این چالش CTF از “SansAlpha” PicoCTF، راه حل های خاصی مانند تقلید دستوراتی مانند cat و ls را مسدود کردم تا سطح دشواری را افزایش دهم.

این چالش با استفاده از یک محیط Docker، با لایه ای محدود در بالا، همراه با برخی تنظیمات اضافی ایجاد شده است.

من همچنین یک چالش CTF دیگر را توسعه داده ام که بر اساس این یکی است و قصد دارم آن را در رویداد بعدی CTF به نمایش بگذارم. منتظر پست بعدی وبلاگ من باشید. از خواندن شما متشکرم – من واقعاً از وقت و علاقه شما سپاسگزارم. امیدوارم از این پست لذت برده باشید!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا