101

حل تحدي Encrypted Pastebin من Hacker101

 

حل تحدي Encrypted Pastebin من Hacker101

حل تحدي Encrypted Pastebin من Hacker101


مرحبا ... هذا التحدي من اصعب التحديات على موقع Hacker101, وفي الوقت الحالي تمكنت من حل جميع التحديات ولله الحمد.

العلم الاول FLAG0

بالنظر الى الصفحة الرئيسية بمكننا أن نرى انه يمكننا انشاء منشور في الموقع ويتم تشفيره العنوان+النص بتشفير من نوع 128 Bit AES.


بعد نشر المنشور الجديد لاحظت ان النص المشفر هو قيمة للباراميتر post في الرابط:


الخادم يقوم باستدعاء هذا النص ويقوم بفك تشفيره ويعرض النص الغير مشفر للمستخدم.


الآن، في حالة عدم وجود أي معرفة لديك على الإطلاق حول كيفية عمل التشفير وفك التشفير، أقترح عليك بشدة مشاهدة مقاطع الفيديو الخاصة بالتشفير على موقع Hacker101:


ستجد معلومات قيمة حول طريقة XOR في التشفير، وكتل البيانات، وخوارزميات التشفير وفك التشفير، وهجمات التشفير المعروفة وغير ذلك الكثير.


لذا، بالعودة إلى عملنا، من خلال مشاهدة مقاطع الفيديو، نعلم أن رسائل النص العادية تأتي بأطوال مختلفة، ومع ذلك، تتطلب تشفير الكتل بأن تكون جميع الرسائل عددًا محددًا من الكتل عندما تحتوي كل كتلة على 8/16 بايت.


بعد أن عرفت ذلك، فكرت في نفسي "ماذا سيحدث إذا قمت بتعديل القيمة المشفرة؟" أعتقد أنه سيكون هناك نوع من الخطأ فقمت بتغيير القيمة وذلك بزيادة حرف واحد على النص.


وكما هو متوقع . تغيير اي شي في النص ينتج عنه ظهور رسالة خطأ “ValueError: Input strings must be a multiple of 16 in length.” وإظهار العلم الاول.

flag0


العلم الثاني FLAG1

قضيت بعض الساعات لافهم ماذا يحدث بعد ذلك وماهي خطوتي التالية . نظرت الى التلميحات:

العلم الثاني FLAG1


واحدة من اكثر الهجمات على التشفير هي هجوم الـ Oracle Padding Attack

قمت بمشاهدة بعض الفديوات وقمت بقراءة بعض المقالات المتعلقة بهذا الهجوم . وانا جاهز للبدء بعملية التنفيذ.


مع ان هذا النوع من الهجمات هو سهل التنفيذ لكنه يستغرق وقتاً طويلاً اذا لم تكن لديك طريقة لاتمتة الهجوم.


لحسن الحظ هناك طريقة لاتمتة الهجوم عن طريق اداة اسمها padre مكتوبة بلغة الـ go.


ارجح وبشدة فهم الية هجوم Padding Oracle Attack وكيف يعمل . يمكنك قراءة هذا المقال باللغة الانكليزية و الذي يوفر جميع المعلومات حول هذا النوع من الهجمات

 https://blog.gdssecurity.com/labs/2010/9/14/automated-padding-oracle-attacks-with-padbuster.html


بعد قراءة المقال واستخدام اداة padre تمكنت من فك تشفير القيمة المشفرة والحصول على العلم الثاني


الـ PoC

  • قم بتنزيل الاداة عن طريق الامر التالي:
    • go install github.com/glebarez/padre@latest
    • mv ~/go/bin/padre /usr/local/bin
  • طريقة الاستخدام:
    • padre -u URL Options EncryptedSample

الـ PoC





كما رأيت , قمت بادخال العنوان مع الباراميتر ثم الاوبشين -r والذي يقوم باستبدال الاحرف . ثم القيمة المشفرة. والنتيجة حصلنا على العلم الثاني.

بعد مرور بعض الوقت حصلت على قيمة العلم بنص غير مشفر

العلم الثالث Flag2
الان عرفنا ان لدينا قيمة json . ساجرب ادراج فارزة واحدة لافحص الباراميتر id هل هو مصاب بثغرة sqli . ساستخدم نفس الاداة padre لتشفير البايلود:

'{ "id": "/''" }'

الـ PoC

ملاحظة: قمت بعمل escape للفارزة المشارة باللون الاحمر لانها تعتبر حرف خاص special charchter وتؤدي الى مشاكل عند تنفيذ الكود. 

بعدادخال القيمة المشفرة وادخالها في الموقع عرفت ان الباراميتر id مصاب بثغرة حقن والحصول على العلم الثالث: 

الـ PoC



العلم الرابع Flag3
يمكننا الحصول على العلم الرابع عن طريق حقن sqli . ولكن المشكلة ان اكواد الحقن طويلة وسيكون طول النص المشفر اطول من 16. لحل ذلك وجدت سكربت على الـ GitHub يقوم بحل المشكلة . فقط قمت بالتعديل على السكربت وضعت رابط الموقع والنص المشفر وبايلود الحقن.
يمكنك تحميل السكربت من الرابط التالي:
https://github.com/1nf1n7y/Hacker101/blob/main/Encrypted_Pastebin/sqli.py

قمت بوضع المعلومات الصحيحة . واخترت بايلود اظهار قواعد البيانات الحالية
{"id":"7 UNION SELECT group_concat(database()), 1"}

العلم الرابع Flag3

قمت بتشغيل السكربت وبعد الانتهاء سنحصل على نص مشفر نضعه كقيمة للباراميتر المشفر post ونرى ماسيحدث

العلم الرابع Flag3


بعدما وضعنا القيمة الجديدة كقيمة للباراميتر post . اكتشفت ان هناك قاعدة بيانات اسمها level3

flag4


بعدها كررت نفس العملية واستخدمت البايلودات الاتية:
  • بايلود عرض الجداول
{"id": "7 UNION SELECT group_concat(table_name), 1 FROM information_schema.tables WHERE table_schema=database()"}


  • بايلود عرض اعمدة جدول tracking
{"id":"7 UNION SELECT group_concat(column_name), 1 FROM information_schema.columns WHERE table_name='tracking'"}



  • بايلود استخراج المعلومات من الجدول tracking
{"id":"7 UNION SELECT group_concat(headers), 1 FROM tracking"}


flag4


اخير وضع القيمة المشفرة في المتصفح يظهر لنا العلم الاخير.


اتمنى انك استفدت من هذا المقال . اراك في حلول ومقالات اخرى. دمت بخير






تعليقات