Kerberos认证与攻击学习总结
0、背景
聆听了n1nty大佬(90后黑客代表)的谆谆指导,学习了n1nty大佬的基本操作,决定总结一下,做一个简要的读书笔记,也把之前自己记录的关于Windows的安全的一些博客能够串联起来。所以首先鸣谢:90后黑客代表n1nty大佬。
1、Kerberos的基本认证
1.1、NTLM的挑战认证
不啰嗦,直接说要点,server接到client的请求认证后,会回复16字节随机数据,也就是挑战。client使用自己生成的账号的NTLM的hash值对挑战数据进行某种加密运算,发送到server,server对这一数据进行验证,计算方法相同,比对一直即通过,否则不通过。这一段可以查阅之前博客Windows NTLM Hash和Hash传递、Key传递攻击
1.2、Kerberos验证
不啰嗦具体细节可以参考之前的博客Kerberos认证协议分析,这里有分三个步骤
1.2.1、第一步AS验证
核心是:账号口令的hash值加密时间戳(timestamp),记忆账号身份信息给AS服务器(KDC的一部分,KDC是DC的一部分,DC是域控,对应的数据库是AD),AS服务器解密时间戳,核对在五分钟以内,且不是重放,则返回TGT和Session-Key。在Wireshark中,Session-KEY是外侧的enc-part数据,Session-Key由password的hash值加密后,生成新的enc-part数据,存在TGT里面。
1.2.1.1、域内用户枚举攻击:
一张图解决问题,发送AS-REQ,根据AS-REP来判断问题:

1.2.1.2、TGT Session Key离线爆破
一段话解决问题:session-key经过hash加密成为tgt的一部分,拿到tgt后可以尝试离线暴力破解hash的明文,与NTLM的爆破原理一致,明文字典经过hash计算形成hash值,然后尝试加密session-key与tgt的session-key对应,一致,则爆破成功。
1.2.1.3、PtK(Pass the Key)攻击
在AS-REQ中时间戳经过NT hash或者账号的AES128(AES256)的加密,形成加密数据,你可以通过如下方式获取:

server端会依照解密,验证时间戳。获取Key之后可以传递这个Key,获取TGT。
1.2.2、第二步TGS验证
核心是:client给server发送使用使用krbtgt的口令hash加密的TGT和加密的session-key,server端使用krbtgt的口令hash值解密TGT获取加密的session-key与外部加密的session-key进行比较,一致,就返回访问服务使用的普通ticket和新的session-key,否则验证失败。
1.2.2.1、Golden Ticket
使用方法和原理请参见之前博客黄金票据(Golden Ticket)的原理与实践,总结一句话:TGT的伪造很简单,只需要sid,session-key加密所需要的key(NT-hash、AES256KEY、AES128KEY)即可,域名、username即可。session-key的原始值是随机值,可以任意伪造,加密后两个加密的session-key一致即可通过。
1.2.3、第三步AP验证
原理与TGS相同,验证普通ticket中的session-key与新的session-key是否一致。
1.2.3.1、Sliver Ticket
与Golden Ticket的原理一致,不同的是加密的是service ticket(普通ticket),使用的服务启动账号的口令hash值而不是krbtgt的账号的口令的hash值,所以只能访问该账号启动的服务,而不是全域服务。
2、委派
2.1.1 无限制委派
缓存各个账户的TGT进行代理验证,危险。
2.2.2 受限制委派
涉及S4U2Self和S4U2Proxy协议,暂不赘述。
Kerberos认证与攻击学习总结的更多相关文章
- 域渗透 | kerberos认证及过程中产生的攻击
文章首发于公众号<Z2O安全攻防> 直接公众号文章复制过来的,排版可能有点乱, 可以去公众号看. https://mp.weixin.qq.com/s/WMGkQoMnQdyG8UmS ...
- Kerberos认证流程详解
Kerberos是诞生于上个世纪90年代的计算机认证协议,被广泛应用于各大操作系统和Hadoop生态系统中.了解Kerberos认证的流程将有助于解决Hadoop集群中的安全配置过程中的问题.为此,本 ...
- yarn 用户导致的被挖矿 启用Kerberos认证功能,禁止匿名访问修改8088端口
用户为dr.who,问下内部使用人员,都没有任务在跑: 结论: 恭喜你,你中毒了,攻击者利用Hadoop Yarn资源管理系统REST API未授权漏洞对服务器进行攻击,攻击者可以在未授权的情况下远程 ...
- Kerberos认证浅析
1 引言 在希腊神话中Kerberos是守护地狱之门的一条凶猛的三头神犬,而我们在本文中所要介绍的Kerberos认证协议是由美国麻省理工学院(MIT)首先提出并实现的,是该校雅典娜计划的一部分.这个 ...
- kerberos认证协议爱情故事
0x01.kerberos简介 kerberos是一种域内认证协议,Kerberos的标志是三头狗,狗头分别代表以下角色: Client Server KDC(Key Distribution Cen ...
- [Kerberos] Kerberos 认证过程整理
Kerberos是一种安全认证协议,意在提供 more secure authentication simplified management of password convenience of s ...
- hadoop的kerberos认证
言归正传,介绍过hadoop的simple认证和kerberos后,我们在这一章介绍hadoop的kerberos认证 我们还使用hadoop集群的机器. OS 版本: Centos6.4 Kerbe ...
- KafkaManager编译安装使用(支持kerberos认证)
为了能够方便的查看及管理Kafka集群,yahoo提供了一个基于Web的管理工具(Kafka-Manager). 这个工具可以方便的查看集群中Kafka的Topic的状态(分区.副本及消息量等),支持 ...
- Java Api Consumer 连接启用Kerberos认证的Kafka
java程序连接到一个需要Kerberos认证的kafka集群上,消费生产者生产的信息,kafka版本是2.10-0.10.0.1: Java程序以maven构建,(怎么构建maven工程,可去问下度 ...
随机推荐
- springboot - Constructor、@Autowired、@PostConstruct分析
1.Constructor 构造方法 2.@Autowired 依赖注入 3.@PostConstruct 在依赖注入完成后被自动调用 4. 三者的顺序: 从依赖注入的字面意思就可以知道,要将对象p注 ...
- java项目中的路径获取,request
java web项目中获取项目根路径(tomcat可运行的web源码的路径)的方式: 分为两种情况: 情况一: 在eclipse.inde等开发工具中获取(注:如下代码所在的类必须是控制层所在包下的类 ...
- 两台linux服务器之间实现挂载
https://blog.csdn.net/lpp_dd/article/details/78743862 两台linux服务器之间实现挂载: 服务端: 1.首先需要在主机上设置允许挂载的目录 (1) ...
- hive 添加自增列
比如一个表里只有contact字段 ;
- Objective-C语法之可变参数
可变参数的方法在Objective-C中不罕见,像Cocoa中的很多常见的方法都是可变参数的,如: NSLog(NSString *format, ...) + (id)arrayWithObject ...
- 浮点数向偶数舍入的问题 Round-to-Even for Floating Point
Round-To-Even在于To-Up , To-Down, To-towards-Zero对比中,在一定数据量基础上,更加精准.To-Up的平均值比真实数值偏大,To-Down偏小. 例如有效 ...
- 2015-10-07:几乎100%肯定:百度网盘在夜间的时段是不限速的:早晨7点前很轻松达到3M/S,7点后就降低到1M/S了,白天才400K/S左右
最近发现(2015-10-07)几乎100%肯定:百度网盘在夜间的时段是不限速的:早晨7点前很轻松达到3M/S,7点后就降低到1M/S了,白天才400K/S左右
- [Unity3D] 01 - Try Unity3D
01. Move and Rotate 标准全局坐标系 Keyboard using UnityEngine; using System.Collections; public class NewBe ...
- struts开发<struts中的參数传递.三>
不说废话,直接上干货 1.通过set和get传递參数 添加username 和password两个属性并添加set和get方法 package fzl.user.struts.demo; import ...
- SpringMVC -- 梗概--源码--贰--RestFul收参(了解) @PathVariable
1>定制方式: //如下两个路径都可以访问到如下方法,请求路径不同,则name61和pwd61匹配到的值不同 //http://localhost:8989/appname/ful/lime/1 ...