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

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

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

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

دليل الأدوات

الفئات

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

CVE-2022-29464

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

عرض المستودع
378886منذ 4 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2022-29464

استغلال ثغرة WSO2 RCE (CVE-2022-29464) وتقرير تفصيلي.

التفاصيل

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

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

وأيضًا غير محمية بإجراء تسجيل الدخول الافتراضي، `handleSecurity()` هي الدالة المسؤولة عن تأمين المسارات المختلفة التي يقدمها WSO2 وتوفّر آلية لإجراء فحوصات أمنية على طلبات HTTP المستلمة، ستستدعي `handleSecurity()` الدالة `CarbonUILoginUtil.handleLoginPageRequest()` وبناءً على قيمتها المُرجعة سيتم تحديد ما إذا كان سيتم السماح أو رفض الوصول إلى URI المطلوب:```java
    public boolean handleSecurity(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
	[snipped]
        if ((val = CarbonUILoginUtil.handleLoginPageRequest(requestedURI, request, response,
                authenticated, context, indexPageURL)) != CarbonUILoginUtil.CONTINUE) {
            if (val == CarbonUILoginUtil.RETURN_TRUE) {
                return true;
            } else {
                return false;
            }
        }
	[snipped]
    }

CarbonUILoginUtil.handleLoginPageRequest() يُرجع CarbonUILoginUtil.RETURN_TRUE عندما يكون المسار /fileupload:```java protected static int handleLoginPageRequest(String requestedURI, HttpServletRequest request, HttpServletResponse response, boolean authenticated, String context, String indexPageURL) throws IOException { boolean isTryIt = requestedURI.indexOf("admin/jsp/WSRequestXSSproxy_ajaxprocessor.jsp") > -1; boolean isFileDownload = requestedURI.endsWith("/filedownload"); if ((requestedURI.indexOf("login.jsp") > -1 || requestedURI.indexOf("login_ajaxprocessor.jsp") > -1 || requestedURI.indexOf("admin/layout/template.jsp") > -1 || isFileDownload || requestedURI.endsWith("/fileupload") || requestedURI.indexOf("/fileupload/") > -1 || requestedURI.indexOf("login_action.jsp") > -1 || isTryIt || requestedURI.indexOf("tryit/JAXRSRequestXSSproxy_ajaxprocessor.jsp") > -1) && !requestedURI.contains(";")) {

        if ((requestedURI.indexOf("login.jsp") > -1
                || requestedURI.indexOf("login_ajaxprocessor.jsp") > -1 || requestedURI
                .indexOf("login_action.jsp") > -1) && authenticated) {
            [snipped]
        } else if ((isTryIt || isFileDownload) && !authenticated) {
            [snipped]
        } else if (requestedURI.indexOf("login_action.jsp") > -1 && !authenticated) {
            [snipped]
        } else {
			if (log.isDebugEnabled()) {
				log.debug("Skipping security checks for " + requestedURI);
			}
            return RETURN_TRUE;
        }
    }

    return CONTINUE;
}
عندما يُرجع `CarbonUILoginUtil.handleLoginPageRequest()` القيمة `CarbonUILoginUtil.RETURN_TRUE`، ستعيد `handleSecurity()` القيمة `true`، وعندها سيُمنح الوصول إلى `/fileupload` دون مصادقة.

سيرفلت `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>
تنزيل الأداة