ناتاس ويب. مرور منصة CTF يهدف إلى استغلال ثغرات الويب. الجزء 4

صورة

في هذه المقالة ، سنتعامل مع تشغيل بعض هويات WEB باستخدام المناورات Natas كمثال. كل مستوى لديه حق الوصول إلى كلمة مرور المستوى التالي. يتم تخزين جميع كلمات المرور أيضًا في / etc / natas_webpass / files. على سبيل المثال ، يتم تخزين كلمة المرور الخاصة بـ natas5 في الملف / etc / natas_webpass / natas5 وهي للقراءة فقط للمستخدمين natas4 و natas5.

الأجزاء الماضية: الجزء 1 ، الجزء 2 والجزء 3 .

المعلومات التنظيمية
خاصةً لأولئك الذين يرغبون في تعلم شيء جديد وتطويره في أي من مجالات أمن المعلومات والحاسوب ، سأكتب وأتحدث عن الفئات التالية:

  • PWN.
  • التشفير (التشفير) ؛
  • تقنيات الشبكات (الشبكة) ؛
  • عكس (الهندسة العكسية) ؛
  • إخفاء المعلومات (Stegano) ؛
  • بحث واستغلال مواطن الضعف WEB.

بالإضافة إلى ذلك ، سوف أشارك تجربتي في الطب الشرعي للكمبيوتر ، وتحليل البرامج الضارة والبرامج الثابتة ، والهجمات على الشبكات اللاسلكية وشبكات المناطق المحلية ، وإجراء عمليات pentests واستغلال الكتابة.

حتى تتمكن من معرفة المقالات الجديدة والبرامج والمعلومات الأخرى ، أنشأت قناة في Telegram ومجموعة لمناقشة أي مشاكل في مجال التصنيف الدولي للأمراض. أيضًا ، سأدرس شخصيًا طلباتك الشخصية وأسئلتك واقتراحاتك وتوصياتك شخصيًا وسأجيب على الجميع .

يتم توفير جميع المعلومات للأغراض التعليمية فقط. لا يتحمل مؤلف هذا المستند أية مسؤولية عن أي ضرر يلحق بشخص ما نتيجة استخدام المعرفة والأساليب التي تم الحصول عليها نتيجة لدراسة هذا المستند.

المستوى 22


بعد تحليل الكود المصدري ، يصبح من الواضح أننا سنرى كلمة المرور إذا كانت المعلمة GET revelio غير فارغة.

صورة

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

صورة

تحتاج فقط إلى استخدام وكيل الويب وليس المتصفح ، على سبيل المثال حليقة.

صورة

صورة

نحن نرفع كلمة المرور

المستوى 23


نحن نحلل شفرة المصدر. ترجع الدالة strstr (s1، s2) سلسلة فرعية من s1 تبدأ بـ s2. فب أيضا يلقي تلقائيا أنواع. بمعنى أنه عند مقارنتها ، ستؤدي السلسلة إلى رقم وستتجاهل أحرفًا إضافية.

صورة

السلسلة "11iloveyou" ستكون مناسبة لحالتنا. في الاختيار الأول ، تقوم بإرجاع "iloveyou" ، أي ، صحيح. في الفحص الثاني ، 11> 10 ، أي صحيح.

صورة

المستوى 24


يحتوي هذا المستوى أيضًا على خطأ منطقي. الشرط صحيح على أي حال إذا كانت strcmp تُرجع FALSE. لكن strcmp سيعود FALSE حتى في حالة حدوث خطأ.

صورة

على الرغم من أن php يلقي أنواعًا تلقائيًا ، إلا أنه غير قادر على إرسال صفيف إلى سلسلة. للقيام بذلك ، افتح شفرة مصدر الصفحة وقم بتغيير اسم الحقل من "passwd" إلى "passwd []".

صورة

نرسل أي خط.

صورة

نحن نرفع كلمة المرور

المستوى 25


عند تحليل التعليمات البرمجية المصدر ، الأكثر إثارة للاهتمام هي وظيفة logRequest () ، والتي تعالج الحقول التي يمكن للمستخدم التحكم فيها. هذا هو رأس HTTP لـ User_Agent وملف تعريف الارتباط session_id.

صورة

صورة

صورة

تجدر الإشارة إلى أنه تم حذف جميع التسلسلات "../" من السلسلة ، ولكن يمكن القيام بذلك عن طريق: "... /. /" => "../".

فكرة الحل: نظرًا لأن مسار سجلات التسجيل يعتمد على session_id ، والذي يمكننا التحكم فيه ، ومن خلال اختيار لغة العرض ، يتم تحديد المسار على الخادم - نظرًا ل LFI ، يمكننا قراءة ملف السجل.

صورة

صورة

صورة

صورة

الآن يبقى لكتابة كلمة المرور من / etc / natas_webpass / natas26 في ملف السجل الخاص بنا. نظرًا لأن Web-Agent يتم تسجيله لأول مرة ثم يتم إخراجه من الملف ، فسنضيف كود php إلى هذا الحقل.

صورة

صورة

نحصل على كلمة المرور

مستوى 26


في هذا المثال ، هناك مشكلة عدم حصانة خطيرة - إلغاء تسلسل الكائنات. تأخذ الدالة unserialize () متغيرًا متسلسلًا وتحولها إلى كائن PHP.

صورة

يتم إرجاع القيمة المحولة ، والتي يمكن أن تكون عددًا صحيحًا أو عائمًا أو سلسلة أو صفيفًا أو كائنًا. أي يمكنك تنفيذ أي رمز. عند إنشاء فئة Logger ، تكتب معلومات معينة إلى الملف.

صورة

الفكرة هي كما يلي:

  1. أعد كتابة فئة Logger ، حيث سيتم احتواء رمز php بدلاً من إحدى الرسائل ، مما يؤدي إلى إخراج كلمة مرور.
  2. ترميزه في Base64.
  3. لصق في ملف تعريف الارتباط.
  4. الوصول إلى ملف السجل.
  5. يسلب كلمة المرور.

<?php class Logger{ private $logFile; private $initMsg; private $exitMsg; function __construct($file){ $this->initMsg="<? passthru('cat /etc/natas_webpass/natas27'); ?>"; $this->exitMsg="<? passthru('cat /etc/natas_webpass/natas27'); ?>"; $this->logFile = "img/phpobjinj.php"; } function log($msg){ ; } function __destruct(){ ; } } $obj = new Logger("obj"); echo urlencode(base64_encode(serialize($obj))); ?> 

صورة

صورة

صورة

نحصل على كلمة المرور

المستوى 27


توفر هذه الخدمة بيانات المستخدم. ولكن إذا كان المستخدم غير موجود ، فإنه يقوم بإنشائه باستخدام اسم المستخدم وكلمة المرور المحددين.

صورة

المشكلة هي أنه بعد إنشاء المستخدم ، لا تتحقق الخدمة من كلمة المرور الخاصة به عند تسجيل الدخول. في الوقت نفسه ، فإن أول 64 حرفًا فقط من تسجيل الدخول وكلمة المرور بعد التصفية تقع في قاعدة البيانات. ليس ذلك فحسب ، بل نعرف اسم المستخدم: natas28.

صورة

قم بإنشاء مستخدم باستخدام كلمة مرور فارغة واسم: "natas28_60-space_ any-character". (لذلك ، أثناء التحقق ، لن يكون هناك أي مصادفة مع المستخدم natas28 ، ولكن أثناء الإنشاء سيتم ترشيحها وإضافتها إلى قاعدة البيانات. بمعنى أنه لن يتم التحقق من كلمة المرور في المكالمة التالية).

صورة

صورة

نذهب تحت اسم natas28 وكلمة مرور فارغة. نحصل على بيانات المستخدم natas28.

أن تستمر. يمكنك الانضمام إلينا على Telegram .

Source: https://habr.com/ru/post/ar464863/


All Articles