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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/dddo0/cve-2018-1000533
تحليل الثغرات الأمنيةتحليل الكودالاستغلالاستغلال تطبيقات الويباختبار الاختراق
GitHubdddo0/cve-2018-1000533

CVE-2018-1000533

عرض المستودع
منذ شهر واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

ثغرة تنفيذ التعليمات البرمجية عن بُعد في GitList 0.6.0 (CVE-2018-1000533)

GitList هو عارض مستودعات Git حديث.

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

إعداد البيئة

لتشغيل خادم GitList 0.6.0، نفّذ الأمر التالي.

root@kitploit:~
docker compose up -d

قبل تشغيل poc.py، ثبّت التبعيات.

root@kitploit:~
pip install requests

عند اكتمال إعداد البيئة، انتقل إلى http://127.0.0.1:8080 وتأكد من وجود مستودع اختبار باسم example.

مبدأ الثغرة

يستخدم GitList الأمر git grep عند البحث عن كود داخل المستودع.

root@kitploit:~
public function searchTree($query, $branch)
{
    if (empty($query)) {
        return null;
    }

    $query = escapeshellarg($query);

    try {
        $results = $this->getClient()->run($this, "grep -i --line-number {$query} $branch");
    } catch (\RuntimeException $e) {
        return false;
    }

هنا، يشير $query إلى كلمة البحث، ويشير $branch إلى الفرع المستهدف في البحث.

إذا مرّر المهاجم --open-files-in-pager=id; ككلمة بحث، فسيتم تنفيذ أمر id في النظام.

هناك سببان لهذه الثغرة:

  1. قيود دالة escapeshellarg()

من الناحية النظرية، عند المرور عبر الكود $query = escapeshellarg($query);، يصبح الإدخال سلسلة محاطة بعلامات اقتباس مفردة. ومع ذلك، تمنع escapeshellarg() الحقن من منظور الصدفة (shell) فقط، لكنها لا تمنع محلل الخيارات الخاص بـ git نفسه من تفسير سلسلة تبدأ بـ -- كخيار.

  1. طبيعة خيار --open-files-in-pager

يحدد هذا الخيار في git grep البرنامج الخارجي للعرض (Pager) الذي يعرض نتائج البحث، وله خاصية تنفيذ القيمة المُمرَّرة إليه مباشرة كأمر نظام.

شروط الثغرة

  • يجب أن يكون GitList 0.6.0 قيد التشغيل.
  • يحتوي عنوان url المستخدم في طلب POST ([repo_name]/tree/[keyword]/search) على معاملين: [repo_name] و [keyword].
  • يجب أن يكون [repo_name] مستودعًا موجودًا في GitList، ويجب أن تكون [keyword] كلمة بحث تُنتج نتيجة واحدة على الأقل. (في هذا الاستنساخ، تم استخدام example كمستودع و a ككلمة بحث.)

خطوات إعادة الإنتاج

نفّذ poc.py عبر الأمر التالي.

يتسبب هذا السكربت في تنفيذ touch /tmp/success_dddo0، مما يؤدي إلى إنشاء ملف فارغ باسم success_dddo0 في دليل /tmp على الخادم.

root@kitploit:~
python3 poc.py http://127.0.0.1:8080

بعد إرسال الطلب، تحقق مما إذا تم إنشاء success_dddo0 بنجاح عبر الأمر التالي.

root@kitploit:~
docker compose exec web ls -l /tmp/success_dddo0

نتيجة التنفيذ

بعد تشغيل PoC، يمكن التحقق من أن أمر نظام عشوائي (touch /tmp/success_dddo0) قد تم تنفيذه بنجاح داخل الخادم، مما أدى إلى إنشاء الملف.

1.png

إيقاف البيئة

root@kitploit:~
docker compose down

التدابير التصحيحية

يجب تحديث GitList إلى أحدث إصدار.

تعديلات الكود:

root@kitploit:~
public function searchTree($query, $branch)
{
    if (empty($query)) {
        return null;
    }
    $query = preg_replace('/(--?[A-Za-z0-9\-]+)/', '', $query);
    $query = escapeshellarg($query);
    try {
        $results = $this->getClient()->run($this, "grep -i --line-number -- {$query} $branch");
    } catch (\RuntimeException $e) {
        return false;
    }

في GitList، تمت معالجة هذه الثغرة باستخدام تعبير نمطي لإزالة البادئات غير القانونية - من كلمة البحث ($query)، وإضافة -- (وهو المعرّف الذي يشير إلى نهاية الخيارات) إلى أمر git grep، مما يُجبر النظام على التعامل مع جميع المدخلات اللاحقة كسلاسل نصية عادية (كلمات بحث) وليس كخيارات أوامر.

تنزيل الأداة