Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
wso2-rce-cve-2022-29464 — استغلال لـ CVE-2022-29464، وهي ثغرة رفع ملفات عشوائية غير مصادق عليها في خوادم WSO2، مما يتيح تنفيذ التعليمات البرمجية عن بُعد عبر رفع ملف JSP خبيث. | Kitploit
أدوات/GitHubGitHub/tufanturhan/wso2-rce-cve-2022-29464
توليد الحمولةتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراق
GitHubtufanturhan/wso2-rce-cve-2022-29464

wso2-rce-cve-2022-29464

استغلال لـ CVE-2022-29464، وهي ثغرة رفع ملفات عشوائية غير مصادق عليها في خوادم WSO2، مما يتيح تنفيذ التعليمات البرمجية عن بُعد عبر رفع ملف JSP خبيث.

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
عرض المستودع
23منذ 4 سنواتلم تتم المراجعة بعد
مشاركة

CVE-2022-29464

استغلال WSO2 RCE (CVE-2022-29464).

التفاصيل

CVE-2022-29464 هو ثغرة حرجة في WSO2 اكتشفها Orange Tsai. الثغرة هي رفع ملفات عشوائي غير مقيد وغير مصادق عليه، مما يسمح للمهاجمين غير المصادق عليهم بالحصول على RCE على خوادم WSO2 عبر رفع ملفات JSP خبيثة.

المسار القابل للاستغلال هو /fileupload والذي تتم معالجته بواسطة FileUploadServlet وهو مسار غير محمي كما نرى في ملف الإعداد indentity.xml:```xml

يقوم `FileUploadServlet` عند [`init`](https://github.com/wso2/carbon-kernel/blob/d47232dfb2b26c0ef18a74e2ef4aa503caa59697/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/transports/FileUploadServlet.java#L71) ومن خلال سلسلة من استدعاءات الدوال في النهاية بتحميل تنسيقات/إجراءات متعددة لرفع الملفات من ملف الإعداد `carbon.xml` إلى جانب الكائن الذي يتعامل مع كل تنسيق.```java
    public void init(ServletConfig servletConfig) throws ServletException {
        this.servletConfig = servletConfig;
        try {
            fileUploadExecutorManager = new FileUploadExecutorManager(bundleContext, configContext, webContext);
            //Registering FileUploadExecutor Manager as an OSGi service
            bundleContext.registerService(FileUploadExecutorManager.class.getName(), fileUploadExecutorManager, null);
        } catch (CarbonException e) {
            log.error("Exception occurred while trying to initialize FileUploadServlet", e);
            throw new ServletException(e);
        }
    }

مُنشئ الفئة FileUploadExecutorManager هو كما يلي:```java public FileUploadExecutorManager(BundleContext bundleContext, ConfigurationContext configCtx, String webContext) throws CarbonException { this.bundleContext = bundleContext; this.configContext = configCtx; this.webContext = webContext; this.loadExecutorMap(); }

يستدعي المُنشئ الطريقة الخاصة [`loadExecutorMap()`](https://github.com/wso2/carbon-kernel/blob/d47232dfb2b26c0ef18a74e2ef4aa503caa59697/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/transports/fileupload/FileUploadExecutorManager.java#L131) حيث يتم تحميل الإعدادات:```java
    private void loadExecutorMap() throws CarbonException {
        [snipped]
                try {
            documentElement = XMLUtils.toOM(serverConfiguration.getDocumentElement());
        } catch (Exception e) {
            String msg = "Unable to read Server Configuration.";
            log.error(msg);
            throw new CarbonException(msg, e);
        }
        [snipped]
        OMElement fileUploadConfigElement =
                documentElement.getFirstChildWithName(
                        new QName(ServerConstants.CARBON_SERVER_XML_NAMESPACE, "FileUploadConfig"));
        for (Iterator iterator = fileUploadConfigElement.getChildElements(); iterator.hasNext();) {
            OMElement mapppingElement = (OMElement) iterator.next();
            if (mapppingElement.getLocalName().equalsIgnoreCase("Mapping")) {
                OMElement actionsElement =
                        mapppingElement.getFirstChildWithName(
                                new QName(ServerConstants.CARBON_SERVER_XML_NAMESPACE, "Actions"));
                String confPath = System.getProperty(CarbonBaseConstants.CARBON_CONFIG_DIR_PATH);
        [snipped]

تكوينات تنسيقات رفع الملفات موجودة ضمن مساحة الاسم FileUploadConfig في ملف إعدادات XML، وهذا هو التكوين الافتراضي:```xml 100

    <Mapping>
        <Actions>
            <Action>keystore</Action>
            <Action>certificate</Action>
            <Action>*</Action>
        </Actions>
        <Class>org.wso2.carbon.ui.transports.fileupload.AnyFileUploadExecutor</Class>
    </Mapping>

    <Mapping>
        <Actions>
            <Action>jarZip</Action>
        </Actions>
        <Class>org.wso2.carbon.ui.transports.fileupload.JarZipUploadExecutor</Class>
    </Mapping>
    <Mapping>
        <Actions>
            <Action>dbs</Action>
        </Actions>
        <Class>org.wso2.carbon.ui.transports.fileupload.DBSFileUploadExecutor</Class>
    </Mapping>
    <Mapping>
        <Actions>
            <Action>tools</Action>
        </Actions>
        <Class>org.wso2.carbon.ui.transports.fileupload.ToolsFileUploadExecutor</Class>
    </Mapping>
    <Mapping>
        <Actions>
            <Action>toolsAny</Action>
        </Actions>
        <Class>org.wso2.carbon.ui.transports.fileupload.ToolsAnyFileUploadExecutor</Class>
    </Mapping>
</FileUploadConfig>
تقوم طريقة `loadExecutorMap()` بإنشاء `HashMap` من `<Action, Class>` وملؤها بـ Actions و Classes المستخرجة من ملف الإعدادات، والتي سيتم استخدامها لاحقًا لاختيار الصنف الذي سيُستخدم للتعامل بشكل صحيح مع تنسيق/إجراء معيّن.

لاحقًا، عندما يستقبل المسار `/fileupload` طلب POST، سيتم استدعاء طريقة [`doPost()`](https://github.com/wso2/carbon-kernel/blob/d47232dfb2b26c0ef18a74e2ef4aa503caa59697/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/transports/FileUploadServlet.java#L53) الخاصة بـ servlet. تقوم هذه الطريقة فقط بإعادة توجيه كائن الطلب والاستجابة إلى طريقة `execute()` الخاصة بـ `fileUploadExecutorManager` الذي تمت تهيئته في `init()`.```java
    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response) throws ServletException, IOException {

        try {
            fileUploadExecutorManager.execute(request, response);
        } catch (Exception e) {
            String msg = "File upload failed ";
            log.error(msg, e);
            throw new ServletException(e);
        }
    }

تقسّم طريقة execute() عنوان URL الخاص بالطلب مباشرة بعد سلسلة fileupload/، مما يعني أنها تستخرج أي شيء يلي /fileupload/ في عنوان URL الخاص بالطلب وتُسنِده إلى actionString.```java public boolean execute(HttpServletRequest request, HttpServletResponse response) throws IOException {

    HttpSession session = request.getSession();
    String cookie = (String) session.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE);
    request.setAttribute(CarbonConstants.ADMIN_SERVICE_COOKIE, cookie);
    request.setAttribute(CarbonConstants.WEB_CONTEXT, webContext);
    request.setAttribute(CarbonConstants.SERVER_URL,
                         CarbonUIUtil.getServerURL(request.getSession().getServletContext(),
                                                   request.getSession()));


    String requestURI = request.getRequestURI();

    //TODO - fileupload is hardcoded
    int indexToSplit = requestURI.indexOf("fileupload/") + "fileupload/".length();
    String actionString = requestURI.substring(indexToSplit);
تنزيل الأداة