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

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

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

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

دليل الأدوات

الفئات

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

CVE-2022-29464

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

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

الأكثر شعبية

عرض الكل →

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

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

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

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

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` بدون مصادقة.

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