
CVE-2016-5195 dirtycow من timwr أداة تصحيح آلية لملفات متعددة
يُرجى الانتباه: أنا لا أختبر هذا الكود رسميًا إنه يُصمَّم كأداة تعليمية.
ماذا يفعل؟ يستخدم android-dirtycow-replacer ثغرة dirtycow (CVE-2016-5195) لتصحيح قائمة تضم أكثر من 1000 ملف. يمكنك تعديلها لتصبح 10000 لكن 1000 ينبغي أن تكفي. يتحقق أولًا من أن الملفات مختلفة، وإذا لم تكن كذلك يحاول الاستبدال، وعند حدوث خطأ يتوقف. من مهمتك توفير الملفات عن طريق تعديلها، أو تصحيح سياسة selinux، أو أي شيء آخر. dirtycow يستبدل فقط ما يمكنه قراءته، ولهذا السبب هذه الأداة ليست الأداة النهائية.
عذرًا إذا كررت بعض الأشياء، فعقلي مبرمج تم اختبار هذا الكود على Note 5 ويبدو أنه يعمل بشكل صحيح. ومع ذلك... هذا الكود غير مُختبر في معظمه وليس المشروع النهائي. أنا أصمم استغلال dirtycow الخاص بـ toolbox.c والذي سيكتب فوق الملفات غير القابلة للقراءة عادةً، مثل init. لماذا toolbox؟ لأنني أستطيع الحصول على صلاحيات الجذر + السياق الذي أحتاجه عن طريق استغلال toolbox ثم قراءة جميع الملفات التي أريدها.
المتطلبات لينكس، مثل أحدث إصدار من أوبونتو (مجاني)، وAndroid SDK وAndroid NDK (مجانيان أيضًا).
التعليمات أنشئ ملفًا باسم files.txt مع المسارات يسار/يمين لما ترغب في استبداله. /system/build.prop /data/local/tmp/replace/build.prop تأكد من وجود ملفاتك على جانبي المعادلة، أشياء بسيطة على ما آمل! أقترح محاولة استخدام cat على الملف قبل حتى إضافته إلى القائمة. مثال: adb shell cat /init المسار على اليسار هو الملف الذي يتم استبداله (لاحظ المسافة) والمسار على اليمين هو الملف الذي سيستبدله
مثال مرفق يوجد مثال files.txt مع هذا المثال. إنه يشير إلى ملفات اختبار (عدّله لترى) هناك أيضًا دليلان يحتويان على ملفات اختبار: replace/ و replacewith/ داخل الدليل replace/ توجد 4 ملفات: beingpatched1، beingpatched2،..3،..4 نص beingpatched# يساوي unpatched001 --- unpatched004 الملفات في replacedwith/ تحتوي على نص patchingdon1 حتى patchingdon4 عند كتابتك 'make push' سيتم الترجمة وسيتم دفع هذه الدلائل وملف files.txt وreplacer إلى /data/local/tmp/ ..هل ما زلت معي؟،
التعليمات الفعلية للمثال فك الضغط إلى مجلد، انقر بزر الفأرة الأيمن وافتح طرفيتين في هذا المجلد ......نصيحة: إذا نقرت على إحدى نوافذ الطرفية ثم الأخرى، فستظل كلتا النافذتين مرئيتين
في إحدى نوافذ الطرفية اكتب: make log
في نافذة الطرفية التالية اكتب: make push <=== لا توجد أخطاء، صحيح؟
adb shell ثم cd data/local/tmp ثم ./replacer
نظرة عامة على المشروع الرئيسي -- ليس هذا المشروع دالة المقارنة تُصمَّم كمشغّل لـ toolbox.c دالة المقارنة تقارن الملفات بايتًا ببايت لتحديد ما إذا كانت مختلفة. سيكون هذا هو المشغّل لـ toolbox.c لمحاولة إعادة تحميل /init. بعدها سيكتب toolbox.c ملف سجل (وهو أيضًا مفتاح المشغّل التالي) وسيسجل toolbox.c محاولة ما بعد التنفيذ إلى ملف سجل آخر (المشغّل النهائي) لإعلامنا بجميع الدوال التي تمت محاولتها. سيمكننا هذا من تجربة سياقات متعددة لكل مرحلة عند الفشل قبل الاستسلام، وهو أمر مطلوب على الأرجح.
android-dirtycow-replacer هدفي هو تصميم أداة استبدال آلية لـ dirtycow.c لاستخدامها كاستغلال داخل toolbox.c أو dumpstat.c. يقرأ android-dirtycow-replacer الملفات المراد تصحيحها من ملف نصي، ثم يختبر ما إذا كانت الملفات مختلفة، وفقط إذا كانت مختلفة سيقوم android-dirtycow-replacer بتصحيح الملفات باستخدام dirtycow.c. مرة أخرى، هذا الكود يُصمَّم ليُدمج في toolbox.c / dumpstate.c كوسيلة لتصحيح الملفات غير القابلة للتصحيح! من المرجح أن يتشابك كودي النهائي مع كود معالجة UID والسياق. هذا هو الانقسام في كودي الخاص.
قد يكون لهذا التطبيق استخدامات أخرى لكني لا أصممه لاستخدامات أخرى في الوقت الحالي. الاستخدام الأكثر قابلية للتطبيق الذي يتبادر إلى ذهني هو استبدال قائمة ثابتة من الملفات بعد الإقلاع، مثل الخطوط أو إزالة أذونات التطبيقات للوصول إلى الإنترنت أثناء إيقاف تشغيل الشاشة. أو العديد والعديد من الإعدادات الأخرى تحت /etc والتي سيتم إصلاحها بعد كل إقلاع.
مطلوب
البرنامج لا يتم تحديثه في الوقت الحالي. البرنامج مُدرج ككود مثال أنا شخصيًا أعتقد أن هذه الأداة يمكنها تحقيق صلاحيات الجذر على أي جهاز ضمن النطاق كما هي الآن. كما أعتقد أنها أداة تنظيمية قوية لتحقيق هذا الهدف تحديدًا. المشكلة بالنسبة لي هي أنه ليس لدي أي اهتمام بالحصول على صلاحيات الجذر على هاتفي الشخصي في الوقت الحالي. لقد عطّلت ما يكفي من الأشياء لدرجة أن هاتفي Note 5 أصبح رائعًا للغاية ويصعب إعداده مرة أخرى. يُرجى الانتباه: أنا لا أختبر هذا الكود في أي مكان على الإطلاق! إنه يُصمَّم كأداة تعليمية
إذا كانت لديك مشكلة يرجى سرد المشكلة وسأقوم بتصحيحها عندما أستطيع طالما يمكنني القيام بذلك بأمان على جهاز الاختبار الخاص بي.