
في هذه المقالة ، سوف نتعلم كيفية اعتراض البيانات المنقولة بين وظيفة المكتبة والبرنامج ، واستعادة واصفات الملف وحل المهام السادسة والسادسة من موقع pwnable.kr.
المعلومات التنظيميةخاصةً لأولئك الذين يرغبون في تعلم شيء جديد وتطويره في أي من مجالات أمن المعلومات والحاسوب ، سأكتب وأتحدث عن الفئات التالية:
- PWN.
- التشفير (التشفير) ؛
- تقنيات الشبكات (الشبكة) ؛
- عكس (الهندسة العكسية) ؛
- إخفاء المعلومات (Stegano) ؛
- بحث واستغلال مواطن الضعف WEB.
بالإضافة إلى ذلك ، سوف أشارك تجربتي في الطب الشرعي للكمبيوتر ، وتحليل البرامج الضارة والبرامج الثابتة ، والهجمات على الشبكات اللاسلكية وشبكات المناطق المحلية ، وإجراء عمليات pentests واستغلال الكتابة.
حتى تتمكن من معرفة المقالات الجديدة والبرامج والمعلومات الأخرى ، أنشأت
قناة في Telegram ومجموعة لمناقشة أي مشاكل في مجال التصنيف الدولي للأمراض. أيضًا ، سأدرس شخصيًا طلباتك الشخصية وأسئلتك واقتراحاتك وتوصياتك
شخصيًا وسأجيب على الجميع .
يتم توفير جميع المعلومات للأغراض التعليمية فقط. لا يتحمل مؤلف هذا المستند أية مسؤولية عن أي ضرر يلحق بشخص ما نتيجة استخدام المعرفة والأساليب التي تم الحصول عليها نتيجة لدراسة هذا المستند.
الحل لهذه المهمة العشوائية
نضغط على الأيقونة بالتوقيع العشوائي ، وقيل لنا إننا بحاجة إلى الاتصال عبر SSH بضيف كلمة المرور.

عند الاتصال ، نرى الشعار المقابل.

دعونا نعرف ما هي الملفات الموجودة على الخادم ، وكذلك ما هي الحقوق التي لدينا.
ls -l

وبالتالي ، يمكننا قراءة الكود المصدري للبرنامج ، حيث يوجد حق للقراءة للجميع ، وتنفيذ البرنامج عشوائيًا مع حقوق المالك (تم تعيين البت اللاصقة). دعنا نرى نتائج الكود.

ينشئ البرنامج رقمًا عشوائيًا ، ويطبق عملية XOR (OR الحصرية) ، وإذا كانت نتيجة عملية XOR مساوية للقيمة المرجعية ، فإنه يعرض علامة.
الحقيقة هي أن يتم استخدام الدالة rand () في هذا البرنامج. تولد هذه الوظيفة رقمًا عشوائيًا زائفًا ، حيث تقوم بتحويل "الحبة" الناتجة عن دالة srand (). يجب استدعاء الدالة srand (number) في كل مرة قبل استدعاء rand (). إذا لم يحدث هذا ، فسيتم تشغيل srand (1) قبل rand () افتراضيًا.
وبالتالي ، في هذا البرنامج ، يقوم مولد الأرقام العشوائية الزائفة بتحويل "الحبوب" نفسها في كل مرة وفقًا لنفس الخوارزمية. نحتاج إلى معرفة الرقم الذي ترجعه الدالة rand () والقريبة مع القيمة المرجعية. نظرًا لأن عملية XOR قابلة للانعكاس ، ثم نقل القيمة المستلمة إلى إدخال البرنامج ، نحصل على إشارة.
دعنا نعترض البيانات بين وظيفة مكتبة rand () وبرنامجنا. للقيام بذلك ، استخدم الأداة المساعدة ltrace.
ltrace ./random

نرى مع المعلمات ما يسمى الدالة rand () وما هي القيمة التي تُرجعها. الآن proxorit هذه القيمة مع الإشارة.

نرسل الرقم الناتج إلى مدخلات برنامجنا.

نمر العلم ونحصل على نقطة واحدة لمثل هذه المهمة السهلة.

حل لهذا الخطأ
نضغط على أيقونة الخطأ وقيل لنا إننا بحاجة إلى الاتصال عبر SSH بضيف كلمة المرور.

عند الاتصال ، نرى الشعار المقابل.

دعونا نعرف ما هي الملفات الموجودة على الخادم ، وكذلك ما هي الحقوق التي لدينا.
ls -l

وبالتالي ، يمكننا قراءة التعليمات البرمجية المصدر للبرنامج ، حيث يوجد حق للقراءة للجميع ، وتنفيذ برنامج خطأ مع حقوق المالك (تم تعيين بت لزجة). دعنا نرى نتائج الكود.

في بداية البرنامج ، يتم فتح ملف وإنشاء واصف. حول واصفات الملفات ، لقد كتبت بالفعل بالتفصيل في
هذه المقالة. ولكن الحقيقة هي أن الشرط ارتكب خطأ. وبالتالي ، يتم إجراء المقارنة أولاً ، وتكون النتيجة كذبة ، ثم تعيين هذه النتيجة الخاطئة (أي 0) للمتغير fd.

بعد ذلك ، يتم استدعاء وظيفة السكون ودون اقتراح إدخال متغير pw_buf ، تتم قراءة البيانات. لكن نظرًا لحدوث خطأ في الحالة ، لا تتم قراءتها من ملف مفتوح بكلمة مرور ، ولكن من الإدخال القياسي (مقبض 0).
بعد ذلك ، نقوم بإدخال 10 أحرف ، والتي يتشاجر فيها كل حرف بحرف واحد وتتم مقارنتها بكلمة مرور.

وبالتالي ، فإننا ندخل سطرين ، ينبغي أن تؤدي حروفهما إلى نتيجة لعملية XOR ، وسنجد حرفين ، إذا كنا نؤيدهما ، فسنحصل على 1.

هذه هي الأحرف A و @. أدخل الآن سطرين في البرنامج ، أحد الأحرف 10 "A" ، والآخر - "@".

نحن نسلم العلم ونحصل على نقطة أخرى.

نراكم في المقالات التالية!
نحن في قناة برقية:
قناة في برقية .