مرحباً بالجميع ، أنا
نيكيتا كورتين ، أمينة المدرسة الإسرائيلية العليا لتكنولوجيا المعلومات والأمن
HackerUنشرت
Checkpoint ، شركة أمن المعلومات الإسرائيلية الرائدة ، سلسلة من الاختبارات السيبرانية هذا الصيف.
تم تقسيم المهام إلى ست فئات:
• المنطق
• الويب
• البرمجة
• التشبيك
• عكس
• مفاجأة
مهمتان لكل اتجاه. في هذا المنشور ، سأخبرك كيف خضعت لأربعة اختبارات فقط ، في الاختبارات الثلاثة التالية:
لقد نجحت نقطة التفتيش بالفعل في اكتساب الاحترام والاهتمام من جهتي ، لذلك قررت قبول هذه التحديات. ومع ذلك ، وبسبب التوظيف ، تمكنت من تحمل 8 مهام فقط من 12 مهمة (من أربع فئات مختلفة). وتمكنت من حل 7 منهم.
انتهى التحدي رسميًا بحلول نهاية سبتمبر 2018.

حتى الآن ، بضمير مرتاح ، يمكنني أن أخبرك خطوة بخطوة حول كيفية اختراق حل المشكلات التالية:
• التحدي المنطقي "PNG ++"
• تحدي الويب "الروبوتات عادت"
• تحدي الويب "دييغو غاليري"
• مهمة البرمجة "خطوات حذرة"
• مهمة برمجة "ألغاز"
• تحدي الشبكات "بينج بونج"
• "بروتوكول" تحدي الشبكات
التحدي: PNG ++
الوصف:
تم ترميز هذه الصورة (رابط لملف PNG المشفر)
باستخدام تشفير مخصص.
تمكنا من قراءة معظم هذا الرمز هنا (رابط لرمز بيثون).
لسوء الحظ ، سكب شخص ما القهوة ببطء على key_transformator.py بالكامل.
هل يمكنك مساعدتنا في فك تشفير هذه الصورة؟كود Python:

منطق التشفير كالتالي:
1. تعيين طول المفتاح (حجم المفتاح) إلى 4 بايت
2. اقرأ وحدات بايت ملف "flag.png" في متغير "img"
3. أضف المساحة المتروكة إلى الملف ، إلى أقرب مضاعف من أربعة. المساحة المتروكة تساوي عدد وحدات البايت المفقودة. على سبيل المثال ، إذا كان طول الملف 29 بايت (3 مفقود) ، أضف ثلاث بايت مع القيمة العشرية 3 (ASCII 0x03). أو ، بمعنى آخر ، لا يمكن أن تكون بايتات الحشو فارغة (ASCII 0x00) ، لأن قيمتها العشرية هي صفر ، وهو ما لا يعني وجود حشو.
4. تعيين مفتاح البداية بأربعة أحرف عشوائية كبيرة ([AZ]).
5. افعل نفس الشيء مع جميع وحدات البايت الموجودة في الملف ، مع تشفير سلاسل أربعة بايت في المرة الواحدة
أ. كل بايت في الملف تشاجر بايت من المفتاح
ب. يتم تحويل المفتاح باستمرار إلى مفتاح آخر ، key_transformator.transform (المفتاح) هو المسؤول عن ذلك
ج. تتم إضافة وحدات البايت المشفرة إلى بيانات enc_data
6. أدخل enc_data (بايت مشفر) في encrypted.png
للبدء ، راجعت رأس تنسيق PNG ووجدت أن الثماني بايت الأولى هي كما يلي:
[137 ، 80 ، 78 ، 71 ، 13 ، 10 ، 26 ، 10]
أخذت الثماني بايت الأولى من الملف المشفر وقمت بلفها مع هذه الثماني بايت:

تحول مفتاح الكتلة الأولى على النحو التالي:
[85 ، 80 ، 82 ، 81]
والكتلة الثانية - مثل هذا:
[86 ، 81 ، 83 ، 82]
نظرًا لأن كل مفتاح لاحق يتم إنشاؤه ديناميكيًا باستخدام المفتاح السابق (key = key_transformator.transform (key) ، فهمت الخوارزمية: أضف واحدًا إلى كل بايت في المفتاح السابق:
85 -> 86
80 -> 81
82 -> 83
81 -> 82
ثم أدركت أن اسم التحدي أخفى تلميحًا مريضًا.
كتبت "دالتين مساعدتين":
• "nextKey" ، الذي يعيد المفتاح التالي بناءً على الأخير
• "nextChar" ، الذي يعيد الحرف التالي ، وفي معظم الحالات يزداد بمقدار واحد إذا كان يقع داخل حدود البايت (255)

قمت بتحويل 4 بايت الأصلية [85 ، 80 82 ، 81] إلى أحرف: "UPRQ" وأعدت الخوارزمية مرة أخرى

تم تحديد العلم في الملف الذي تم فك تشفيره:
التحدي: عودة الروبوتات
الوصف:
الروبوتات رائعة ، لكن صدقوني: يجب أن يكون وصولهم محدودًا! تحقق منه (رابط)
بعد اتباع الرابط ، ترى صفحة معينة مخصصة للروبوتات. بشكل أساسي ، يشير كل شيء إلى أنه يجب عليك التحقق من وجود ملف "robots.txt".

بإضافة. /robots.txt إلى عنوان url ، نحصل على ما يلي:

راجعت ./secret_login.html وعثرت على صفحة تسجيل

بعد ذلك ، راجعت كود المصدر للنموذج للعثور على تأكيد كلمة المرور ورأيت جافا سكريبت:

يبدو أنه عندما يتم تأكيد القيمة ، يتم إرسالها إلى وظيفة التفويض ، التي تقوم بفك شفرة القيمة التي تم تمريرها باستخدام وظيفة btoa (وظيفة فك التشفير base64 في جافا سكريبت) ثم تقارنها بالسلسلة: "SzMzcFQjM1IwYjB0JDB1dA ==".
قمت بفك تشفير هذا الخط

لقد أدخلت القيمة الناتجة في سلسلة كلمة المرور. البنغو!
التحدي: معرض دييغو
الوصف:
بدأت مؤخرًا في تطوير نظام أساسي لإدارة صور قطتي وتأمين ملف flag.txt الخاص بي. يرجى التحقق من نظامي (رابط إلى استمارة التسجيل).
لتجنب الانحرافات في نظام الأمان ، مثل القدرة على تضمين كود SQL ، توصلت إلى مخطط خاص بي.
الوصف المختصر متاح هنا (رابط الرسم البياني)استمارة التسجيل:

دائرة مسبقة الضبط:

بعد أن قمت بتعيين اسم المستخدم وكلمة المرور الخاصين بالاختبار ، تمكنت من الوصول إلى المعرض العام للقط "دييغو".
نظرًا لأنني قمت بالتسجيل كمستخدم منتظم ، فقد اكتشفت أنه ربما تحتاج إلى إيجاد طريقة لتصعيد امتياز PE (تصعيد الامتياز). بالنظر إلى النظام للمستخدمين المسجلين ، رأيت أن الفرق بين المستخدم العادي والمسؤول موجود في القسم الثالث من النظام ، مفصولة بثلاث شرطات.
بعد تقدير أنه إذا كانت القيمة الأولى (اسم المستخدم) تشير إلى القسم الأول ، والثانية (كلمة المرور) تشير إلى الثانية ، فسيتم تعيين الدور من قبل النظام مباشرة بعد دخول المستخدم بالحقوق الحالية.
على سبيل المثال:
ابدأ ||| القيمة الأولى ||| القيمة الثانية ||| المستخدم (مُضاف بواسطة خدمة الويب) ||| END
كانت حمولتي على النحو التالي:
• القيمة الأولى: “niki ||| niki ||| admin ||| END \ nSTART ||| other"
• القيمة الثانية: "أخرى"
ربما أدى هذا إلى إنشاء سطور السجل التالية:
بدء ||| niki ||| niki ||| admin ||| END
START ||| other ||| other ||| user ||| END
بعد ذلك ، تمكنت من تسجيل الدخول كمسؤول والحصول على الحقوق الكاملة:

يؤدي الضغط على الأزرار إلى تنشيط التحذير بأن العلم آمن.
ومع ذلك ، يمكنك قراءة عنوان URL داخل عنوان URL:
35.194.63.219/csa_2018/diegos_gallery/_nwryqcttstvs/admin-panel/index.php ؟ عرض = log.txt
الذي يشير بشكل صريح للغاية إلى
LFI (تضمين الملف المحلي) عبر URLحاولت:
35.194.63.219/csa_2018/diegos_gallery/_nwryqcttstvs/admin-panel/index.php؟view=flag.txtوكان العلم لي.
التحدي: خطوات دقيقة
الوصف:
هذا (رابط الملف) هو مجموعة من الأرشيفات التي وجدناها. نحن على يقين من أن العلم السري مخفي في مكان ما بداخلهم.
نحن على يقين تام من أن البيانات التي نبحث عنها مخفية في قسم التعليقات في كل ملف.
هل يمكنك التنقل بعناية بين الملفات والعثور على العلم؟
حظ موفقبعد استخراج الملف ، تحصل على دليل باسم "أرشيفات" يحتوي على ألفي ملف بداخله بعنوان "unzipme. [Number]".

استخدمت برنامج binwalk لفحص الملف الأول. وهنا ما أعطاني البرنامج:

نعم ، في قسم التعليقات لدينا حروف وأرقام. تلميحات مرة أخرى؟
في البداية فكرت في ما إذا كان يجب عليّ توصيل الأحرف بالمؤشرات المعينة من هذا الملف المضغوط ، والتحقق من الملف التالي بالفعل باستخدام الفهرس 245.
ولكن جاءت هنا مفاجأة: لم يكن الملف الثاني بتنسيق zip ، ولكن بتنسيق rar.

لذلك ، كان عليّ "إلغاء" الأمر للوصول إلى التعليقات:

كان منطقتي هي تشغيل الملف من خلال binwalk ، وإذا صادفت ملف RAR ، فقم بفك ضغطه للوصول إلى التعليقات. بخلاف ذلك ، يمكنك عرض قسم التعليقات مباشرةً لفهم المزيد من الإجراءات.
تخميني الأول: الرقم هو فهرس الملف (تم ترقيم كل منها من 0 إلى 1999). ومع ذلك ، وجدت أن بعض الأرقام سلبية ، مما يعني أنها لا يمكن أن تكون فهرسًا.
التخمين الثاني: الرقم قفزة قد تكون سلبية. لكل رقم ، كنت بحاجة إلى الانتقال إلى الملف التالي. كنت أعلم أنه إذا قفزت التعليمات البرمجية الخاصة بي باستمرار إلى الملف المحسوب التالي ، فقد يؤدي ذلك إلى إنشاء مصيدة صغيرة على شكل دورة وستتعطل شفرتي في حلقة لا نهاية لها. لذا كتبت رمز بيثون بحد الحساب. وبعد عدة اختبارات اكتشفت أن الرقم 120 سيكون كافيًا:

وكان العلم لي:

الثلاثة الأخرى التي وصفتها في المنشور التالي ، قرأت ، جرب ، سأكون سعيدًا بتعليقاتك