[内网安全] Windows 域认证 — Kerberos 协议认证
🌟想系统化学习内网渗透?看看这个:[内网安全] 内网渗透 - 学习手册-CSDN博客
0x01:Kerberos 协议简介
Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下,Kerberos 作为一种可信任的第三方认证服务,通过采用传统密码技术(如:共享密钥)来执行认证服务。
打一个浅显的例子,A 想要到 B 那里买东西,但是怕 B 收了钱不办事。此时,我们需要一个第三方机构 C 做担保,A 把钱给了 C,B 办完事后去 C 那里拿钱。Kerberos 协议就完成了这么一个操作。
0x02:Kerberos 协议的组成角色
在古希腊神话故事中,Kerberos 是一只具有三颗头颅的地狱恶犬,它守护在地狱之外,能够识别所有路过的亡灵,防止活着的入侵者闯入地狱:
Kerberos 协议中也存在三个角色,分别是:
-
客户端(Client): 发送请求的一方。
-
服务端(Server): 接收请求的乙方。
-
密钥分发中心(Key Distribution Center,KDC): 该部分由两 AS 与 TGS 构成:
-
AS(Authentication Server): 认证服务器,专门用来认证客户端的身份并发放客户端用于访问 TGS 的 TGT(允许买票的票据 — 票据授予票据)
-
TGS(Ticket Granting Ticket): 票据授予服务器,用来执行整个认证过程以及发放客户端访问服务端时所需的服务授予票据(Ticket)
-
0x03:Kerberos 认证的类比流程
Kerberos 协议还是有些复杂的,所以本部分中,笔者将通过两个现实中的例子,让读者对 Kerberos 协议有一个大概的认识,为我们后面介绍 Kerberos 认证的完整流程打一个基础。
0x0301:Kerberos 类比流程 — 第三方购物
假设现在 A 要买 “电脑”,它知道 B 在卖(通过电视宣传啊),但是 AB 两人都没有见过面,现在 A 就在担心,我要是把钱直接给 B 了,B 翻脸不认人了怎么办,此时,A 就陷入了信任危机。
于是,A 想到了一个办法,它找到第三方机构 C(某东),C 机构认识 A 和 B,那么 A 就将钱交给了 C 机构,C 机构转告给 B 机构发货,等到 A 确认收货后,C 机构再把钱给 B。
上面这个例子,体现的是 Kerberos 的第三方认证特性,Kerberos 中的 KDC 在上面那里例子中就是充当 C 角色,A 就是 Client,B 就是 Server。但是上面这个例子并没有体现 KDC 中 “AS” 和 ”TGS“ 的用处,我们来看看下面这个例子。
0x0302:Kerberos 类比流程 — 乘坐过山车
假设你带着一家去做过山车,你不能直接去乘过山车,你得去售票处买票吧:
来到了售票处,你不光得有钱,你还得符合乘坐的标准吧(身高啥的),只有你都满足要求了,你才能花钱买到过山车的票,然后乘坐过山车:
在上面的那个流程中 ”你“ 就是 Client 端,”过山车“ 就是你申请的服务 Server。售票处(测量身高的阿姨 + 售票)构成了 KDC,你来到了 KDC,KDC 中的 AS 首先得校验你有没有购票资格,你有资格购票后,售票处(TGS)才能给你发放票据(Ticket)。
0x0303:Kerberos 认证流程简单概述
通过上面两个例子,相信读者对 Kerberos 已经有一个大致的认识了,这里笔者简单描述一下它的整体认证流程:客户端在访问每个想要访问的服务时,需要携带一个专门用于访问该服务并且能够证明自己身份的票据,当服务端收到了该票据他才能认定客户端身份正确,向客户端提供服务。
整个 Kerberos 认证流程可以简化为两大步:
-
客户端向 KDC 请求获取想要访问的目标服务的服务授予票据(Ticket)。
-
客户端拿着从 KDC 获取的服务授予票据(Ticket)访问相应的网络服务。
0x04:Kerberos 认证的完整流程
在前面类比流程中,笔者并没有详细讲 KDC 中 AS 和 TGS 的具体作用,那么在这里,笔者将详细讲解 Kerberos 认证的完整流程,并顺带介绍 AS 与 TGS 的作用。
0x0401:第一步 — 客户端与 AS 进行通信
为了获得能用来访问服务端服务的票据,客户端首先需要来到 KDC 获得服务授予票据(Ticket)。由于客户端是第一次访问 KDC,此时 KDC 也不能确认该客户端的身份,所以在第一次通信的时候 KDC 需要对客户端身份进行认证,确认客户端是一个可靠且拥有访问 KDC 权限的客户端。
第一步:Client 首先向 KDC 以明文方式发起请求,并在该次请求中携带了自己的用户名,主机 IP 和当前时间戳。
第二步:KDC 中的 AS (AS 是 KDC 中专门用来认证客户端身份的认证服务器)接收请求后去 Kerberos 认证数据库中根据用户名查找是否存在该用户(注意:此时只会查找是否有相同用户名的用户,并不会判断身份的可靠性)。
第三步:如果没有该用户名,则认证失败,服务结束;如果存在用户名,则 AS 认证中心便认为用户存在,此时便会返回相应给客户端,响应中包含两部分内容:
-
第一部分内容被称为(TGT),即 ”票据授予票据“。客户端后续需要使用 TGT 去 TGS(票据授予中心)获取访问网络服务所需的 Ticket(服务授予票据),TGT 中包含 Kerberos 数据库中存在的该客户端的 Name,IP,当前的时间戳,客户端即将访问的 TGS 的 Name,TGT 的有效时间以及一把用于客户端和 TGS 间进行的 Session_Key(CT_SK)。整个 TGT 使用 TGS 密钥加密,客户端是解密不了的,由于密钥从没有在网络中传输过,所以也不存在密钥被劫持破解的情况。
-
第二部分内容是使用客户端密钥加密的,其中包括用于客户端和 TGS 间通信的 Session_Key(CT_SK),客户端即将访问的 TGS 的 Name 以及 TGT 的有效时间,和一个当前的时间戳。该部分内容使用客户端加密,所以客户端在拿到该部分内容时可以通过自己的密钥解密。如果是一个假的客户端,那么他是不会拥有真正客户端的密钥的,因为该密钥也没在网络中进行传输过。这也同时认证了客户端的身份,如果是假客户端会由于解密失败而终止认证流程。
第一阶段的整体流程如下图所示:
0x0402:第二步 — 客户端和 TGS 进行通信
经过了第一步,Client 收到了来自 KDC(准确来说是 AS)的响应,并获取到了其中两部分的内容。此时客户端会用自己的密钥将第二部分内容解密,获取时间戳、自己将要访问的 TGS 的信息以及用于与 TGS 通信的密钥 CT_SK。Client 在获取上述信息后,会先根据时间戳判断该时间戳与自己发送请求时的时间之间的差值是否大于 5 分钟,如果大于五分钟则认为该 AS 是伪造的,认证失败。如果时间戳合理,客户端就会准备向 TGS 发起请求。客户端和 TGS 通信流程如下:
Client(客户端)行为:
客户端使用 CT_SK 加密将自己的客户端信息发送给 KDC,其中包括客户端名,IP,时间戳。
客户端将自己想要访问的 Server 服务以明文的方式发送给 KDC。
客户端将使用 TGS 密钥加密的 TGT 也原封不动的携带给 KDC。
KDC 中的 TGS(票据授予服务器)行为:
TGS 收到了来自客户端的请求。首先根据客户端明文传输过来的 Server 服务 IP 查看当前 Kerberos 系统中是否存在可以被用户访问的对应服务。如果不存在,认证失败,如果存在,继续下一步。
TGS 使用自己的密钥将 TGT 中的内容进行解密,此时他看到了经过 AS 认证过后并记录的用户信息,CT_SK 以及时间戳信息,它会先根据时间戳判断此次通信是否真实可靠没有超出时延。
如果时延正常,则 TGS 会使用 CT_SK 对客户端的第一部分内容进行解密(使用 CT_SK 加密的客户端信息),取出其中的用户信息和 TGT 中的用户信息进行比对,如果全部相同则认为客户端身份正确,可以进行下一步。
此时,KDC(准确来说是 TGS)将返回一个 Ticket,该 Ticket 由两个部分组成:
第一部分,用于客户端访问网络服务的使用 Server 密码加密的 ST(Server Ticket),其中包括客户端的 Name,IP,需要访问的网络服务的地址 Server IP,ST 的有效时间,时间戳以及用于客户端和服务端之间通信的 CS_SK(Session Key)。
第二部分,使用 CT_SK 加密的内容,其中包括 CS_SK 和时间戳,还有 ST 的有效时间。由于在第一次通信过程中,AS 已将 CT_SK 通过客户端密码加密交给了客户端,且客户端解密并缓存了 CT_SK,所以该部分内容在客户端接收到时是可以自己解密的。
第二阶段整体流程如下图所示:
0x0403:第三步 — 客户端和服务端进行通信
经过前面两步,此时客户端收到了来自 TGS 的响应,并使用缓存在本地的 CT_SK 解密出了第二部分的内容(第一部分内容中的 ST 是由 Server 密码加密,客户端无法解密)。客户端在检验第二部分时间戳无误后取出其中的 CS_SK 准备向服务端发起最后的请求:
Client(客户端)行为:
客户端使用 CS_SK 将自己的主机信息和时间戳进行加密作为交给服务端的第一部分内容,然后将 ST(服务授予票据)作为第二部分内容都发送给服务端。
Server(服务端)行为:
服务端收到来自客户端的请求,使用自己的密钥,将客户端发送来的 ST 部分进行解密,核对时间戳后将其中的 CS_SK 取出,使用 CS_SK 将客户端发来的第一部分内容进行解密,从而获得经过 TGS 认证过后的客户端信息,此时他将这部分信息和客户端第二部分内容带来的信息进行比对,最终确认客户端就是经过了 KDC 认证的具有真实身份的客户端,是他可以提供服务的客户端。
此时服务端会返回一段使用 CT_SK 加密的表示接收请求的响应给客户端,在客户端收到请求后,使用缓存在本地的 CS_SK 解密后也确认了服务端的身份。(其实服务端在通信过程中还会使用数字证书证明自己身份)。
至此,第三次通信完成,此时也代表整个 Kerberos 认证的完成,通信的双方都确认了对方的身份,此时便可以放心的进行整个网络通信了。第三阶段流程如下:
0x0404:Kerberos 认证完整流程图
相关文章:

[内网安全] Windows 域认证 — Kerberos 协议认证
🌟想系统化学习内网渗透?看看这个:[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01:Kerberos 协议简介 Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过…...

[Computer Vision]实验七:图像检索
目录 一、实验内容 二、实验过程 2.1 准备数据集 2.2 SIFT特征提取 2.3 学习“视觉词典”(vision vocabulary) 2.4 建立图像索引并保存到数据库中 2.5 用一幅图像查询 三、实验小结 一、实验内容 实现基于颜色直方图、bag of word等方法的以图搜…...
C++之thread_local变量
C之thread_local变量_c threadlocal-CSDN博客 thread_local简介 thread_local 是 C11 为线程安全引进的变量声明符。表示对象的生命周期属于线程存储期。 线程局部存储(Thread Local Storage,TLS)是一种存储期(storage duration),对象的存储是在…...

【国产Linux | 银河麒麟】麒麟化龙——KylinOS下载到安装一条龙服务,起飞!
🗺️博客地图 📍一、下载地址 📍二、 系统安装 本文基于Windows操作系统vmware虚拟机安装 一、下载地址 官网:产品试用申请国产操作系统、麒麟操作系统——麒麟软件官方网站 下载自己需要的版本,完成后,…...
(接“使用js去复制网页内容的方法”)js中的execCommand怎么复制富文本内容解析
document.execCommand(copy) 是传统的剪贴板操作方法,但它主要用于复制纯文本内容。如果你想复制富文本内容(包括 HTML 标签和样式),需要结合一些技巧来实现。以下是具体方法: 方法:通过创建隐藏的富文本元…...

npm ERR! code 128 npm ERR! An unknown git error occurred
【问题描述】 【问题解决】 管理员运行cmd(右键window --> 选择终端管理员) 执行命令 git config --global url.“https://”.insteadOf ssh://git cd 到项目目录 重新执行npm install 个人原因,这里执行npm install --registryhttps:…...
解决Leetcode第3470题全排列IV
3470.全排列IV 难度:困难 问题描述: 给你两个整数n和k,一个交替排列是前n个正整数的排列,且任意相邻两个元素不都为奇数或都为偶数。 返回第k个交替排列,并按字典序排序。如果有效的交替排列少于k个,则…...
MyBatis 配置文件核心
MyBatis 配置文件核心标签解析 以下是针对你的笔记中的三个核心标签的详细解析,帮助你全面理解它们的用途和配置逻辑。 1. properties 标签:动态加载外部配置 功能 将环境相关的配置(如数据库连接、密钥等)与 MyBatis 核心配置…...

bert模型笔记
1.各预训练模型说明 BERT模型在英文数据集上提供了两种大小的模型,Base和Large。Uncased是意味着输入的词都会转变成小写,cased是意味着输入的词会保存其大写(在命名实体识别等项目上需要)。Multilingual是支持多语言的࿰…...

微信小程序接入deepseek
先上效果 话不多说,直接上代码(本人用的hbuilder Xuniapp) <template><view class"container"><!-- 聊天内容区域 --><scroll-view class"chat-list" scroll-y :scroll-top"scrollTop":…...

推荐算法和推荐系统入门第一趴
以下是推荐系统技术总结的架构梳理和建议表达思路: 从原理到生产环境:推荐系统核心技术与实战代码解析 一、推荐算法的演进图谱 传统算法三剑客 ![推荐系统算法分类示意图] (使用Mermaid绘制算法分类关系图,清晰展示技术演进&am…...

unity pico开发 四 物体交互 抓取 交互层级
文章目录 手部设置物体交互物体抓取添加抓取抓取三种类型抓取点偏移抓取事件抓取时不让物体吸附到手部 射线抓取交互层级 手部设置 为手部(LeftHandController)添加XRDirInteractor脚本 并添加一个球形碰撞盒,勾选isTrigger,调整大小为0.1 …...

基于深度学习的青花瓷图像检索系统开发与实现
目录 1.研究背景与目的 1.1课题背景 1.2研究目的 二、调研资料情况 2.1图像分割研究现状 2.2图像检索调研 2.2.1选择深度学习进行检索的原因及优势 2.2.2基于深度学习的图像检索技术的发展 2.2.3基于深度学习的图像检索的研究重点 2.3基于深度学习的图像检索方法调研 …...
uniapp 系统学习,从入门到实战(八)—— Vuex 的使用
全篇大概 4500 字(含代码),建议阅读时间 30min 📚 目录 Vuex核心概念解析在 UniApp 中集成Vuex状态管理与数据共享实践总结 一、Vuex 核心概念解析 1.1 什么是状态管理 在跨多组件的大型应用中,不同页面/组件需要共享和修改相同数据时&am…...

Vue Hooks 深度解析:从原理到实践
Vue Hooks 深度解析:从原理到实践 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家!点我试试!! 文章目录 Vue Hooks 深度解析:从原理到实践一、背景…...
django中序列化器serializer 的高级使用和需要注意的点
在 Django REST framework(DRF)中,序列化器(Serializer)是一个强大的工具,用于将复杂的数据类型(如 Django 模型实例)转换为 Python 原生数据类型,以便将其渲染为 JSON、XML 等格式,同时也能将接收到的外部数据反序列化为 Django 模型实例。以下将介绍序列化器的高级…...

靶场(二)---靶场心得小白分享
开始: 看一下本地IP 21有未授权访问的话,就从21先看起 PORT STATE SERVICE VERSION 20/tcp closed ftp-data 21/tcp open ftp vsftpd 2.0.8 or later | ftp-anon: Anonymous FTP login allowed (FTP code 230) |_Cant get dire…...
PHP Error处理指南
PHP Error处理指南 引言 在PHP开发过程中,错误处理是一个至关重要的环节。正确的错误处理不仅能够提高代码的健壮性,还能提升用户体验。本文将详细介绍PHP中常见的错误类型、错误处理机制以及最佳实践,帮助开发者更好地应对和处理PHP错误。 PHP错误类型 在PHP中,错误主…...

视频输入设备-V4L2的开发流程简述
一、摄像头的工作原理与应用 基本概念 V4L2的全称是Video For Linux Two,其实指的是V4L的升级版,是linux系统关于视频设备的内核驱动,同时V4L2也包含Linux系统下关于视频以及音频采集的接口,只需要配合对应的视频采集设备就可以实…...

【Manus资料合集】激活码内测渠道+《Manus Al:Agent应用的ChatGPT时刻》(附资源)
DeepSeek 之后,又一个AI沸腾,冲击的不仅仅是通用大模型。 ——全球首款通用AI Agent的破圈启示录 2025年3月6日凌晨,全球AI圈被一款名为Manus的产品彻底点燃。由Monica团队(隶属中国夜莺科技)推出的“全球首款通用AI…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...