
ماسح غير مُدمّر لـ CVE-2026-109618 / CVE-2026-109619 (ثغرة تنفيذ تعليمات عن بُعد في نواة PHP). استطلاع النطاقات الفرعية عبر crt.sh + subfinder، والتقاط البانرات بشكل قوي، والكشف بناءً على الإصدار.
ماسح غير مُدمِّر (مع فحص اختياري) لـ CVE-2026-109618 (تنفيذ تعليمات عن بُعد عبر
تلف OOM) وCVE-2026-109619 (تنفيذ تعليمات عن بُعد عبر حالة عامة قديمة) — أخطاء
PHP الأساسية التي تم إصلاحها في 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12.
✅ تم التحقق منها مقابل الاستشارات الأمنية الرسمية لـ php-src (2026-10-21، حرجة). تتطابق معرّفات CVE وجدول الإصدارات المُصلحة أدناه مع المصدر الأصلي تمامًا.
- CVE-2026-109618 — GHSA-w8hw-w9fx-j79w
- CVE-2026-109619 — GHSA-6wmf-4rv5-p3rp
| الفرع | المتأثر | المُصلح |
|---|---|---|
| 8.2 | < 8.2.35 | 8.2.35 |
| 8.3 | < 8.3.36 | 8.3.36 |
| 8.4 | < 8.4.27 | 8.4.27 |
| 8.5 | < 8.5.12 | 8.5.12 |
| < 8.2 | EOL — لا يوجد تصحيح من المصدر الأصلي | تحقق من backport التوزيعة/OSV |
| الوضع | ما الذي يفعله |
|---|---|
LOCAL | php -r للحصول على إصدار وقت التشغيل الدقيق، وSAPI، وmemory_limit، وpost_max_size |
REMOTE | بصمة الإصدار عبر ترويسات X-Powered-By / Server وphpinfo() المكشوفة |
PRESENCE | كشف PHP دون إصدار (PHPSESSID، مراجع .php، إعادة التوجيه) |
BANNER | التقاط لافتة عبر raw-socket بشكل قوي — HEAD/GET/OPTIONS + فحص مشوّه، http/https، كشف صفحة الخطأ |
RECON | تعداد النطاقات الفرعية عبر crt.sh (شفافية الشهادات) مع subfinder كبديل/دمج، ثم فحص متفرّع للمضيفين المُحلَّلين |
PROBE | (اختياري) طلبات multipart كبيرة لمراقبة عدم استقرار العامل — قد يسبب DoS |
git clone https://github.com/JoasASantos/php2shell-scanner.git
cd php2shell-scanner
# stdlib only — no pip deps.
# Optional recon fallback: ProjectDiscovery subfinder
# brew install subfinder (or: go install github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest)
# Local runtime check
python3 php2shell_scan.py --local
# Single remote target, look for exposed phpinfo()
python3 php2shell_scan.py https://example.com --phpinfo-paths
# Subdomain recon (crt.sh + subfinder) then scan, 10 threads, JSON out
python3 php2shell_scan.py example.com --recon --threads 10 -o out.json
# Recon only, no scanning
python3 php2shell_scan.py example.com --recon-only
# Target list + forced robust banner grab
python3 php2shell_scan.py -f targets.txt --banner
# OPT-IN load probe (authorized use only — DoS risk)
python3 php2shell_scan.py https://example.com --probe --probe-count 5
| المعامل | المعنى |
|---|---|
--local | فحص محلي عبر ثنائي php |
--recon | توسيع كل نطاق إلى نطاقات فرعية (crt.sh + subfinder)، ثم فحص المضيفين القابلين للحل |
--recon-only | تعداد النطاقات الفرعية فقط، دون فحص |
--banner | فرض التقاط بانر خام قوي عبر المقبس على كل هدف |
--phpinfo-paths | فحص مسارات phpinfo() الشائعة المكشوفة |
--deep-version | تقنيات إصدار إضافية: بيض عيد الفصح في PHP + ملفات تسريب الإصدار (composer.json، .env، …) |
--origin-scan | الوصول إلى أصل PHP خلف Cloudflare/WAF — طلب مباشر إلى IP مع ترويسة Host الحقيقية |
--shodan-key | مفتاح Shodan API لاستخبارات الأصل (أو متغير البيئة SHODAN_API_KEY)؛ يستلزم --origin-scan |
--censys-id / --censys-secret | بيانات اعتماد Censys API (أو متغيري البيئة CENSYS_API_ID / CENSYS_API_SECRET)؛ يستلزمان --origin-scan |
--probe | فحص حمل متعدد الأجزاء — خطر DoS، للأهداف المصرح بها فقط |
--probe-count N | عدد طلبات الفحص (الافتراضي 5) |
--threads N / --timeout N | التزامن / مهلة كل طلب |
--insecure | عدم التحقق من TLS |
-o FILE / --csv FILE | حفظ تقرير JSON / CSV |
إلى جانب فحص الإصدار، يُثرى كل هدف بإشارات سلبية (من الاستجابات العادية) تُحسّن الحكم وتقلل الإيجابيات الكاذبة:
fpm، mod_php) يعيدون استخدام حالة
الطلب → معرضون لـ CVE-2026-109619؛ بينما cgi العادي أقل بكثير.ubuntu، +deb، .el8…) — قد يُصلح النقل العكسي دون
رفع الإصدار → تُخفَّض الثقة، مع ملاحظة "تحقق من سجل التغييرات".post_max_size /
max_input_vars (سطح OOM لـ CVE-2026-109618)، disable_functions.--deep-version)عند غياب إصدار البانر: بيض عيد الفصح في PHP (?=PHPE9568F34-... → GIF/اعتمادات
عند expose_php=On) وملفات تسريب الإصدار (composer.json، .env، …؛
PHP_VERSION في .env = دقيق، بينما قيد "php": ">=8.2" يضيّق الفرع فقط).
--origin-scan)تُخفي شبكات CDN الأصل، لذا فإن قراءة الترويسة تُظهر الحافة فقط. يقوم --origin-scan بما يلي:
www، والبادئات غير الوسيطة (origin.*، cpanel.*، mail.*…)
والنطاقات الفرعية المكتشفة في الاستطلاع؛Host + SNI الحقيقيين،
قارئًا Server / X-Powered-By / صفحات الأخطاء مباشرة من الأصل.طلب مباشر إلى IP مكشوف بالفعل. للأهداف المصرح بها فقط.
تضيف الاستخبارات الموثقة عناوين IP لا يكشفها DNS أبدًا، إضافة إلى إصدار PHP من البانر المفهرس (استخبارات موسومة — قد تكون قديمة):
--shodan-key / متغير البيئة SHODAN_API_KEY — المضيفون حسب hostname:<domain>.--censys-id + --censys-secret / متغيرا البيئة CENSYS_API_ID + CENSYS_API_SECRET
— المضيفون حسب شهادة TLS / اسم DNS.--origin-scan تلقائيًا.export SHODAN_API_KEY=xxx CENSYS_API_ID=xxx CENSYS_API_SECRET=xxx
python3 php2shell_scan.py hackersec.com --origin-scan
| الثقة | المعنى |
|---|---|
HIGH | الإصدار من phpinfo() مكشوف أو من صفحة خطأ PHP |
MEDIUM | الإصدار من ترويسة HTTP (expose_php=On) |
LOW | استنتاج فقط، أو خلف وكيل، أو قد ينطبق backport من التوزيعة |
يجمّع المخرجات الموحّدة الأهداف حسب الخطورة، ويرتّب VULNERABLE حسب الثقة (HIGH أولاً)، ويضع علامات على نتائج LOW/MEDIUM لإعادة التحقق منها قبل الإبلاغ.
مقارنة الإصدار لكل فرع مقابل جدول FIXED:
< fixed على فرع مدعوم → VULNERABLE>= fixed → PATCHED< 8.2 (EOL) → VULNERABLE_EOL (لا يوجد تصحيح من المنبع؛ تحقق من backport التوزيعة/OSV)شغّله فقط ضد الأصول التي تملكها أو لديك إذن صريح باختبارها. قد تعطّل وضعية
--probe العمال الهشّين. أنت مسؤول عن استخدامك.
MIT