
تحدي CTF ينشر استغلال CVE-2022-0847 (Dirty Pipe) لاستبدال الملفات للقراءة فقط. يتضمن سكربتات الإعداد والتلميحات والتحقق لممارسة استغلال النواة.
لهذا التحدي، تريد الكتابة فوق الملف "cat.txt" للقراءة فقط باستخدام استغلال CVE-2022-0847 هناك طرق عديدة للقيام بذلك باستخدام الاستغلال
تحقق من أن الملف cat.txt للقراءة فقط
القيود هي: يجب أن تكون لدى المهاجم صلاحيات قراءة (لأنه يحتاج إلى استدعاء splice() لنقل صفحة إلى أنبوب) يجب ألا تكون الإزاحة على حد صفحة (لأنه يجب أن يتم تمرير بايت واحد على الأقل من تلك الصفحة إلى الأنبوب) لا يمكن للكتابة أن تعبر حد صفحة (لأنه سيتم إنشاء مخزن مؤقت مجهول جديد للباقي) لا يمكن تغيير حجم الملف (لأن الأنبوب لديه إدارة تعبئة صفحات خاصة به ولا يخبر ذاكرة التخزين المؤقت للصفحات بكمية البيانات المضافة)
أنشئ أنبوبًا.
املأ الأنبوب ببيانات عشوائية (لتعيين علامة PIPE_BUF_FLAG_CAN_MERGE في جميع إدخالات الحلقة).
أفرغ الأنبوب (مع ترك العلامة مضبوطة في جميع مثيلات struct pipe_buffer على حلقة struct pipe_inode_info).
مرّر البيانات من الملف الهدف (المفتوح بـ O_RDONLY) إلى الأنبوب من قبل الإزاحة الهدف مباشرة.
اكتب بيانات عشوائية في الأنبوب؛ ستقوم هذه البيانات بالكتابة فوق صفحة الملف المخزنة مؤقتًا بدلاً من إنشاء struct pipe_buffer مجهول جديد لأن PIPE_BUF_FLAG_CAN_MERGE مضبوطة.
استبدل محتوى الملف cat.txt، غيّر
I'm a cat
1444
إلى
I'm a dog
2025
استخدم check_cat.sh للتحقق مما إذا كان يعمل أم لا chmod +x check_cat.sh ./check_cat.sh
استخدم ما يلي chmod +x cat_generate.sh ./cat_generate.sh
التلميحات موجودة في hints.txt