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认证与攻击学习总结的更多相关文章

  1. 域渗透 | kerberos认证及过程中产生的攻击

    ​文章首发于公众号<Z2O安全攻防>​ 直接公众号文章复制过来的,排版可能有点乱, 可以去公众号看. https://mp.weixin.qq.com/s/WMGkQoMnQdyG8UmS ...

  2. Kerberos认证流程详解

    Kerberos是诞生于上个世纪90年代的计算机认证协议,被广泛应用于各大操作系统和Hadoop生态系统中.了解Kerberos认证的流程将有助于解决Hadoop集群中的安全配置过程中的问题.为此,本 ...

  3. yarn 用户导致的被挖矿 启用Kerberos认证功能,禁止匿名访问修改8088端口

    用户为dr.who,问下内部使用人员,都没有任务在跑: 结论: 恭喜你,你中毒了,攻击者利用Hadoop Yarn资源管理系统REST API未授权漏洞对服务器进行攻击,攻击者可以在未授权的情况下远程 ...

  4. Kerberos认证浅析

    1 引言 在希腊神话中Kerberos是守护地狱之门的一条凶猛的三头神犬,而我们在本文中所要介绍的Kerberos认证协议是由美国麻省理工学院(MIT)首先提出并实现的,是该校雅典娜计划的一部分.这个 ...

  5. kerberos认证协议爱情故事

    0x01.kerberos简介 kerberos是一种域内认证协议,Kerberos的标志是三头狗,狗头分别代表以下角色: Client Server KDC(Key Distribution Cen ...

  6. [Kerberos] Kerberos 认证过程整理

    Kerberos是一种安全认证协议,意在提供 more secure authentication simplified management of password convenience of s ...

  7. hadoop的kerberos认证

    言归正传,介绍过hadoop的simple认证和kerberos后,我们在这一章介绍hadoop的kerberos认证 我们还使用hadoop集群的机器. OS 版本: Centos6.4 Kerbe ...

  8. KafkaManager编译安装使用(支持kerberos认证)

    为了能够方便的查看及管理Kafka集群,yahoo提供了一个基于Web的管理工具(Kafka-Manager). 这个工具可以方便的查看集群中Kafka的Topic的状态(分区.副本及消息量等),支持 ...

  9. Java Api Consumer 连接启用Kerberos认证的Kafka

    java程序连接到一个需要Kerberos认证的kafka集群上,消费生产者生产的信息,kafka版本是2.10-0.10.0.1: Java程序以maven构建,(怎么构建maven工程,可去问下度 ...

随机推荐

  1. 【转】MongoDB学习笔记(查询)

    原文地址 MongoDB学习笔记(查询) 基本查询: 构造查询数据. > db.test.findOne() { "_id" : ObjectId("4fd58ec ...

  2. 通过tarball形式安装HBASE Cluster(CDH5.0.2)——HBASE 真分布式集群配置

    一.应该先配置好zookeeper并成功启动,否则hbase无法启动 二.配置HBASE集群 1,配置hbase-env.sh,下面是最少配置项目 [hadoop@zk1 conf]$ vim hba ...

  3. 【DL】物体识别与定位

    https://cloud.tencent.com/community/article/414833

  4. Salience Model

    Who is a stakeholder? Simply anyone with a stake in the project either direct or indirect. PMBOK say ...

  5. DPSR随手笔记

    降质模型 MAP:

  6. 【Winform】自定义Messagebox

    1.保持Msgbox的Icon 2.可以追加Checkbox,RadioBOx 下载

  7. ios的单元測试OCUnit以及更新了之后的XCTestCase

    1.像一般创建项目的步骤一样.创建一个用于測试的项目或者打开一个待測试的项目. (oc是5.0之前所使用的測试,如今用的是XCtestCase,默认会创建一个主的測试类.曾经版本号可能非常多步骤省去) ...

  8. Dubbo -- 系统学习 笔记 -- 示例 -- 多版本

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 多版本 当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间 ...

  9. JS有趣的单线程

    一.JS的执行特点    源于单线程的特性, JS在一段时间内只能执行一部分代码, 那么, 当有多块代码需要执行时, 就需要排队等候了.   二.单线程与异步事件 (1) 什么是异步事件?     异 ...

  10. CentOS 6.3下搭建Web服务器

    准备前的工作: 1.修改selinux配置文件(/etc/sysconfig/selinux) 关闭防火墙 (1)把SELINUX=enforcing注释掉 (2)并添加SELINUX=disable ...