Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/synacktiv/cve-2025-59712_cve-2025-59713
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالفريق الأحمرتطوير الحمولات
GitHubsynacktiv/cve-2025-59712_cve-2025-59713

CVE-2025-59712_CVE-2025-59713

استغلال PoC لـ Snipe-IT للثغرتين CVE-2025-59712 و CVE-2025-59713

عرض المستودع
2347منذ 11 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

إثبات المفهوم لثغرتي CVE-2025-59712 و CVE-2025-59713

يوفر إثبات المفهوم هذا سكربتًا آليًا لاستغلال CVE-2025-59712 (XSS في ترويسة User-Agent) وCVE-2025-59713 (إلغاء التسلسل غير الآمن).

السياق

تم اكتشاف هاتين الثغرتين بواسطة Synacktiv أثناء بحث في ثغرات برنامج Snipe-IT. Snipe-IT هو نظام مفتوح المصدر لإدارة الأصول مبني على Laravel ومصمم لمساعدة المؤسسات على تتبع وإدارة أصولها المادية والرقمية.

يمكن العثور على تقرير تقني في النشرة الأمنية المخصصة على موقع Synacktiv.

الأوضاع

يوفر هذا السكربت ثلاثة أوامر فرعية، تتوافق مع أوضاع الاستغلال: xss وrce وfullchain.

XSS

يستغل هذا الأمر الفرعي CVE-2025-59712، والذي يسمح لمستخدم بصلاحيات منخفضة بحقن كود JavaScript تعسفي في صفحة HTML المعروضة عند استدعاء المسار /reports/activity. لا يمكن القيام بذلك إلا بواسطة مستخدم admin، أو مستخدم لديه صلاحيات عرض صريحة للتقارير. يكون الحقن ممكنًا بسبب عدم تعقيم حقل بشكل صحيح عندما يقوم المستخدم بتحديث معلومات ملفه الشخصي.

User-Agent

للقيام بذلك، سيقوم أولاً بتسجيل الدخول كمستخدم بصلاحيات منخفضة، ثم يحقن كود JavaScript المحدد في الملف المقدم عبر الخيار --javascript.

root@kitploit:~
$ python3 exploit.py xss --help

 Usage: exploit.py xss [OPTIONS]

 Execute XSS attack only with custom JavaScript payload

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --url         -u       TEXT                    Target Snipe-IT URL [required]                                                                                                             │
│ *  --login       -l       TEXT                    Low-privileged username [required]                                                                                                         │
│ *  --password    -p       TEXT                    Low-privileged password [required]                                                                                                         │
│ *  --new-name    -n       TEXT                    New name for low-privileged user [required]                                                                                                │
│ *  --javascript  -js      TEXT                    Path to custom JavaScript file [required]                                                                                                  │
│    --proxy       -x       TEXT                    HTTP proxy (http://ip:port)                                                                                                                │
│    --verbose     -v       [quiet|normal|verbose]  Logging verbosity [default: normal]                                                                                                        │
│    --help                                         Show this message and exit.                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

[!IMPORTANT]
أثناء البحث الأمني، أُجريت الاختبارات على إصدار من Snipe-IT يعرض افتراضيًا حقل User-Agent الذي يُحقن فيه JavaScript الضار. منذ commit 10e5d88، لم يعد يتم عرض خاصية User-Agent افتراضيًا عند عرض جدول سجل الإجراءات. لذلك، يجب على المسؤول الذي سيشغّل XSS أن يكون قد حدد خانة User-Agent في خيارات العرض لإصدارات Snipe-IT اللاحقة لهذا الالتزام.

RCE

يستغل هذا الأمر الفرعي CVE-2025-59713، والذي يسمح بتنفيذ الأوامر عن بُعد (RCE) عند معرفة بيانات اعتماد مستخدم admin أو superadmin. وللقيام بذلك، يتم تنفيذ الخطوات التالية:

  1. يتم تشغيل نسخة احتياطية من مثيل Snipe-IT.
  2. يتم تنزيل النسخة الاحتياطية الناتجة، وتعديلها في الذاكرة، ثم إعادة رفعها إلى Snipe-IT. يشمل تعديل النسخة الاحتياطية عبارات SQL إضافية في ملف db-dumps/mysql-snipeit.sql، والتي تنشئ حقلًا مخصصًا جديدًا وتعدّل آخر سجل إجراءات بكائن JSON يحتوي على سلسلة Laravel pop عند الاستعادة.

[!TIP] افتراضيًا، يتضمن Snipe-IT ملف .env في النسخة الاحتياطية. إذا اكتشف السكربت هذا الملف، يتم عرض قيمة APP_KEY وحفظ ملف .env في دليل ./output (ويمكن تحديد موقع مخصص لهذا الملف باستخدام --output-dir).

  1. يتم تشغيل استعادة من النسخة الاحتياطية المعدلة، والتي ستنفّذ عبارات SQL المضافة.

[!CAUTION] استعادة نسخة احتياطية تؤدي إلى فصل جميع المستخدمين المتصلين بالمثيل.

  1. بمجرد اكتمال الاستعادة، يتم استدعاء المسار /api/v1/reports/activity، مما يؤدي إلى تشغيل إلغاء التسلسل وتنفيذ سلسلة Laravel pop.
root@kitploit:~
$ python3 exploit.py rce --help

 Usage: exploit.py rce [OPTIONS]

 Execute RCE attack only (requires existing admin account)

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --url         -u       TEXT                    Target Snipe-IT URL [required]                                                                                                             │
│ *  --admin-user  -au      TEXT                    Admin username [required]                                                                                                                  │
│ *  --admin-pass  -ap      TEXT                    Admin password [required]                                                                                                                  │
│    --output-dir  -od      PATH                    Output dir for .env file [default: /home/ninja/Téléchargements/snipe-it-advisory/exploit/output]                                           │
│    --shell-ip    -si      TEXT                    Reverse shell IP address                                                                                                                   │
│    --shell-port  -sp      INTEGER                 Reverse shell port                                                                                                                         │
│    --command     -c       TEXT                    Custom command (overrides reverse shell)                                                                                                   │
│    --proxy       -x       TEXT                    HTTP proxy (http://ip:port)                                                                                                                │
│    --verbose     -v       [quiet|normal|verbose]  Logging verbosity [default: normal]                                                                                                        │
│    --help                                         Show this message and exit.                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

Fullchain

يهدف الأمر الفرعي fullchain إلى ربط ثغرتي XSS وRCE معًا. وهو يتوافق مع سيناريو لا تملك فيه سوى الوصول إلى مستخدم بصلاحيات منخفضة وتريد تحقيق تنفيذ الأوامر عن بُعد. لن يعمل هذا إلا إذا كان المستخدم الذي يزور صفحة /reports/activity هو admin أو superadmin. في الواقع، فقط هذه الأدوار لديها الحق في إنشاء واستعادة نسخة احتياطية، وهو أمر ضروري لتسميم قاعدة البيانات وتشغيل سلسلة Laravel pop لاحقًا.

وللقيام بذلك، سيقوم السكربت بما يلي:

  1. تنسيق قالب JavaScript يحتوي على سلسلة Laravel pop والتي ستنفذ، افتراضيًا، قشرة عكسية bash (يمكنك تخصيص هذا الخيار باستخدام الخيار --command، كما في وضع RCE).
  2. تسجيل الدخول كمستخدم بصلاحيات منخفضة وحقن حقل User-Agent بوسم <scr> لإجبار متصفح الضحية على جلب قالب JavaScript الخبيث.
  3. تشغيل خادم HTTP وهمي لتوزيع القالب المذكور أعلاه، بالإضافة إلى تبعياته.
  4. عندما يزور admin أو superadmin المسار /reports/activity، يتم تشغيل XSS ويتم تحميل JavaScript الخبيث وتنفيذه بواسطة متصفح الضحية. ومنذ تلك اللحظة، يتم تنفيذ نفس الخطوات المنفذة في وحدة RCE، ولكن بلغة JavaScript.
  5. عند استعادة النسخة الاحتياطية، يرسل متصفح الضحية طلب GET (استدعاء callback) إلى خادم HTTP الخاص بـ Python لإشعاره بأن النسخة الاحتياطية قد تمت استعادتها، وأنه يمكن استدعاء مسار API لتشغيل RCE.

يستخدم هذا الوضع عدة مكتبات JavaScript إضافية، ويعود الفضل كله إلى مؤلفيها:

  • crypto-js.js: تُستخدم لإجراء عمليات تشفير، ويمكن العثور على الكود الأصلي هنا.
  • jszip.js وjszip-utils.js: تُستخدمان لتعديل ملفات ZIP في الذاكرة. يمكن العثور على المستودعات الرسمية على التوالي هنا وهنا.
root@kitploit:~
$ python3 exploit.py fullchain --help

 Usage: exploit.py fullchain [OPTIONS]

 Execute full attack chain: XSS -> Backup manipulation -> RCE

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --url         -u       TEXT                    Target Snipe-IT URL [required]                                                                                                             │
│ *  --login       -l       TEXT                    Low-privileged user's username [required]                                                                                                  │
│ *  --password    -p       TEXT                    Low-privileged user's password [required]                                                                                                  │
│ *  --new-name    -n       TEXT                    New name for low-privileged user [required]                                                                                                │
│    --ip          -i       TEXT                    HTTP server IP address (default: auto-detect)                                                                                              │
│ *  --port        -P       INTEGER                 HTTP server port [required]                                                                                                                │
│    --admin-user  -au      TEXT                    Admin username to create [default: admin_rce]                                                                                              │
│    --admin-pass  -ap      TEXT                    Admin password to create [default: password123]                                                                                            │
│    --shell-ip    -si      TEXT                    Reverse shell IP address                                                                                                                   │
│    --shell-port  -sp      INTEGER                 Reverse shell port                                                                                                                         │
│    --command     -c       TEXT                    Custom command (overrides reverse shell)                                                                                                   │
│    --proxy       -x       TEXT                    HTTP proxy (http://ip:port)                                                                                                                │
│    --verbose     -v       [quiet|normal|verbose]  Logging verbosity [default: normal]                                                                                                        │
│    --help                                         Show this message and exit.                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

التثبيت

لتشغيل هذا السكربت، نفّذ الأوامر التالية:

root@kitploit:~
$ git clone https://github.com/synacktiv/CVE-2025-59712_CVE-2025-59713
$ cd CVE-2025-59712_CVE-2025-59713
$ python3 -m venv .venv && source .venv/bin/activate
$ python3 -m pip install -r requirements.txt

ملف Dockerfile لبيئة الاختبار

يتم أيضًا توفير ملف Dockerfile من أجل تجربة السكربت وإعادة إنتاج استغلال الثغرة. يقوم بسحب إصدار ضعيف (قابل للاستغلال) من Snipe-IT، ويضبط قاعدة البيانات باستخدام php artisan، وينشئ مستخدمين اثنين:

  1. المستخدم admin بكلمة مرور افتراضية AdminPassword123!
  2. المستخدم lowpriv بكلمة مرور افتراضية LowPrivUser123!

قبل تشغيل الحاوية، يجب تحديث ملفي .env وsnipe-it.conf بعنوان URL لمثيل Snipe-IT:

root@kitploit:~
$ sed -i 's|^APP_URL=.*|APP_URL=http://<IP>:<PORT>|' .env
$ sed -i 's|\(ServerName\s*\).*|\1http://<IP>:<PORT>|' snipe-it.conf

يمكن بعد ذلك تشغيل الحاوية:

root@kitploit:~
$ docker build . -t "snipe-it-cve"
$ docker run -p 80:80 --name "snipe-it-debian" snipe-it-cve:latest
تنزيل الأداة