[TOC]
## Kerberos协议原理
Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。
该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。
## 认证步骤
(1)、客户端client将登录客户端的用户名、地址、时间戳信息发送给AS认证服务器,用来生成票据许可票据(TGT)+会话密钥(sessionKEY);
(2)、AS服务器收到客户端client的请求后,KDC服务器生成随机会话密钥(session key)得到密钥K,使用客户端登录用户的NTLM hash对会话密钥(session key )进行加密得到密钥A,KDC服务器用户的NTLM hash对会话密钥(session key )客户端相关信息(client info)、时间戳(timestamp)等信息加密得到TGT,最后将会话密钥(key1)A和TGT一起发送给客户端;
(3)、客户端对收到的请求密钥A,使用客户端账户的NTML hash对A进行解密得到(session key)密钥K,解密后的密钥K对客户端相关信息(client info)、时间戳(timestamp)进行加密得到B,最后将密钥(key2)B与TGT发送给TGS;
(4)、TGS 收到客户端的请求后,使用 KDC 的 NTLM Hash 解密 TGT,得到 Session Key和时间戳 (timestamp) 、客户端相关信息(Client Info),使用 TGT 解密出的 Session Key 解密密文B,得到时间戳 (timestamp) 和客户端相关信息(Client Info)。之后对比这俩解密通过后会随机生成一个新的会话密钥(session key),并用生成的新会话密钥对时间戳 (timestamp) 和客户端相关信息(Client Info)进行加密得到密文C,使用TGS服务器的NTML hash对新的会话密钥(session key)和(timestamp) 和客户端相关信息(Client Info)密文C进行加密得到最终票据(Ticket)即ST(Service Ticket),最后一起发送给client;
(5)、客户端client最后将服务票据ST(Service Ticket)和密文C直接请求服务;
(6)、服务票据ST(Service Ticket)和密文C解密后进行鉴别授权。
## 详细过程
**1. Client—>KDC-AS**
KRB_AS_REQ (Kerberos Authentication Service Request) - 客户端执行散列运算加密一个时间戳,然后发送给身份验证服务(KDC-AS)
client先向KDC的AS发送Authenticator1,内容为通过Client密码Hash加密的时间戳、Client ID、网络地址、加密类型等内容。
a. 客户端Client对用户口令执行散列运算转换为NTLM散列。此散列值(即用户密钥)成为客户端和KDC共享的长期密钥(long term key)。
b. KRB_AS_REQ (Kerberos Authentication Service Request) - 客户端执行散列运算加密一个时间戳,然后发送给身份验证服务(KDC-AS)。
**2. KDC-AS—>Client**
KRB_AS_REP (Kerberos Authentication Service Response) -
身份验证服务(KDC-AS)会解密时间戳,若解密成功(KDC-AS检查用户的信息(登录限制.组成员身份等)并创建票据授予票据(Ticket-Granting Ticket,TGT),
并向本地LSA (Local Security Authority)请求生成一个特殊的数据PAC,表明了客户端获得某个特定用户的口令(即验证了用户的身份)。
身份验证服务(KDC-AS)向客户端回复两条信息:
a. 短期会话密钥SessionKeya-kdc,用于客户端向KDC发起后续的请求 ,该消息经客户端的长期密钥(long term key)加密。(此短期会话密钥仅适用于该客户端和KDC之间)
b. 票据授予票据(Ticket Granting Ticket,简称TGT),包含有关用户名.域名.时间和组成员资格等信息。
TGT票据使用KDC的krbtgt密钥进行加密,PAC使用krbtgt密钥进行进行签名,并且系统很少会验证PAC数据(在Windows环境中为krbtgt账户的NT-Hash)。
**3.Client->KDC-TGS**
KRB_TGS_REQ (Kerberos Ticket Granting Service Request) -
Client使用AS返回的”短期会话密钥”构建访问特定服务的请求,再把AS返回的”票据授予票据(TGT)”连同请求一起发送到票据授予服务TGS) 此过程叫KRB_TGS_REQ
Client-A使用AS返回的会话密钥SessionKeya-kdc构建访问特定服务的请求。客户端Client再把请求连同TGT一起发送到票据授予服务TGS。
(TGT是被KDC的krbtgt密钥加密的,所以Client无法解密)
黄金票据 - 此过程3可以伪造TGT(前提是获取krbtgt账号的口令散列值),宣称自己是域内任何账号,包括域管或者不存在的用户,这是黄金票据的原理。
**4.KDC-TGS—>Client**
KRB_TGS_REP (Kerberos Ticket Granting Service Response) -
票据授予服务TGS解密TGT和服务请求,然后如果请求被允许(KDC会打开票据,进行校验和检查。如果DC能够打开票据,并能通过校验和检查,那么会认为TGT为有效票据。此时TGT中的数据会被复制,以创建TGS票据ST),Server密码HASH加密sessionkey-tgs
票据授予服务TGS向客户端Client发送一个服务票据(Service Ticket,简称ST),包括两个部分:
a. 远程服务器的部分 - 包含请求用户的组成员资格、时间戳、用于客户端和远程服务器之间通信的会话密钥。使用远程服务器Server-B和KDC共享的长期密钥(long term key)加密这部分消息。
b. 客户端的部分 - 包含用于客户端和远程服务器之间通信的会话密钥SessionKeya-b。(使用步骤2中AS回复的短期会话密钥(SessionKeya-kdc)加密这部分消息生成的会话密钥SessionKeya-b。)
**5.Client—>Server**
RB_AP_REQ (Kerberos Application Request) -
Client把服务票据(Service Ticket)中的服务器部分和请求一起发送到Server-B(用户要访问活动目录中的主机)。
远程服务器将直接接受该服务器票据,并不需要和KDC直接通信,因为该票据是用远程服务器和KDC共享的长期密钥加密过的。
解密成功(目标服务会使用自己的NTLM密码散列打开TGS票据,并提取用户的授权数据和会话密钥SessionKeya-b。)即表明KDC已经允许了此次通信。
白银票据 - 此过程5可以伪造TGS(前提是获取服务账号的口令散列值),宣称自己是域内任何账号,例如域管,这是白银票据的原理。
- 基础学习
- HTML基础
- HTTP协议原理
- HTTP代理
- 一句话木马
- HTML
- 计算机硬件
- JS脚本学习
- Ajax
- jQuery
- 栈溢出原理
- PHP基础
- php基础
- PHP数组
- PHP函数
- PHP算法
- PHP文件操作
- PHP表单处理
- PHP会话技术
- PHP类和对象
- PHP类继承
- 序列化和反序列化
- PHP小马
- PHP正则表达式
- PHP信息采集
- PDO预处理
- MySQL
- MySQL简介
- MySQL基础
- MySQL常见函数
- MySQL查询方式
- MySQL内置函数
- PHP操作MySQL
- 实战项目
- kail学习
- 基础命令
- 常见目录
- 物理设备规则
- 文件类型
- 文件权限
- shell介绍
- 文件查看命令
- kail搜索命令
- 压缩与解压缩
- 系统命令
- 系统状态检测
- 用户与权限管理
- 重定向管道符
- vim编辑器
- 实训-将做好的网站上传到服务器
- 网络技术
- OSI参考模型
- TCP/IP协议
- 物理层
- 数据链路层
- ARP协议
- 网络层
- IP地址分类
- 传输层
- 三次握手四次挥手
- CA证书
- HTTP报文结构
- 常用端口
- top10漏洞学习
- WEB十大漏洞
- 工具学习
- 插件学习
- Burp Suite工具
- Webshell管理工具
- Goodle搜索语法
- Fofa搜索语法
- shodan搜索语法
- 搜索引擎原理
- 漏洞扫描
- 弱口令爆破学习
- 绕过前端验证进行爆破
- 绕过后端验证码
- 前端Token验证绕过
- 常用爆破工具
- kydra(九头蛇)
- 常见的爆破协议
- 无线渗透基础
- SqlServer注入
- SqlServer简介
- 函数介绍
- SqlServer联合注入流程
- SqlServer报错注入
- SqlServer执行系统命令
- SqlServer备份写入shell
- SqlServer OpenRowSet 转发利用
- SqlServer延时注入
- Oracle注入
- Oracle+JSP联合注入
- Oracle+JSP的utl_http.request反弹注入
- Oracle报错注入
- Oracle布尔盲注
- Oracle延时注入
- SQL注入攻击
- 常用函数及命令
- SQL注入原理
- SQL注入基础
- SQL注入类型
- SQL联合报错注入
- 常见的注入方式
- 联合注入的流程
- 如何判断闭合方式和注释
- 报错注入常用的函数
- MySQL使用手册
- SQL注入floor函数报错原理
- SQL注入xpath函数报错原理
- 其它报错类型
- 头部信息注入
- SQL注入盲注
- SQL盲注类型
- 布尔注入常用函数
- 布尔注入例子
- 时间盲注常用函数
- 时间盲注例子
- 其它类型注入
- 万能密码原理
- 堆叠注入
- JSON注入
- 二次注入
- 二次编码注入
- 宽字节注入
- DNSlog注入
- getshell
- 绕过方法
- 常见的绕过方法
- 大小写绕过
- 注释绕过
- 空格绕过
- 垃圾数据绕过
- 更换提交方式绕过
- 双写绕过
- HTTP参数污染绕过
- 等价函数绕过
- 绕过WAF
- 扫描绕过
- 漏洞发现
- 权限控制
- 绕过safedog
- 绕过云锁
- Sqlmap工具
- Sqlmap目录
- Sqlmap流程及支持方法
- Sqlmap常用语法
- 常用Sql语句
- MySQL提权方法
- 文件包含漏洞
- 文件包含漏洞原理
- 文件包含常用函数
- PHP的伪协议
- 常用方法
- 文件包含绕过
- XXE漏洞
- 什么是XML
- 什么是DTD
- XXE漏洞原理
- XXE漏洞利用
- 文件上传漏洞
- 文件上传漏洞的原理
- 常见的木马植入方式
- 木马变形
- 图片马
- 文件上传的校验流程
- 靶场笔记
- 搜索文件上传语法
- 解析漏洞
- 常用的绕过方法
- 编辑器漏洞
- 上传漏洞分类
- 常见的绕狗方式
- XSS漏洞
- XSS漏洞原理
- shell箱子反杀
- HTTPOnly
- XSS绕过
- 常见函数
- CSRF漏洞
- CSRF漏洞原理
- CSRF利用
- 探测是否存在CSRF
- SSRF漏洞
- SSRF漏洞原理
- SSRF危险函数
- SSRF绕过方法
- SSRF用一句话木马
- RCE远程代码/命令执行
- 什么是RCE
- 远程代码执行
- 远程命令执行
- 文件下载漏洞
- 反序列化漏洞
- PHP反序列化漏洞原理
- PHP常用的函数
- PHP例子
- 钓鱼攻击
- 邮件钓鱼的协议
- CORS漏洞
- 未授权访问漏洞
- 伪随机验证码数漏洞
- JSON劫持漏洞
- XPath注入攻击
- Python基础学习
- Python基础
- Python简介
- Python语法基础
- Python模块
- Python函数
- Python运算符
- 程序流程结构
- Python数据结构
- Python字符串
- Python算法
- Python多线程
- 概念
- 线程常用函数
- 线程开启步骤
- Python网络编程
- 网络编程原理
- socket()函数
- 网络编程思路
- PHP代码审计
- 审计思路步骤
- 常用工具
- 配置文件
- 危险函数及特殊函数
- 危险函数-文件操作函数
- 危险函数-其他函数
- PHP代码审计-命令注入
- PHP代码审计-文件包含
- PHP代码审计-任意文件读取
- 内网渗透
- 攻防模型
- 网络框架
- 内网基础概念
- 内网域内信息收集
- 内网本机信息收集
- 简历通讯隧道简介
- 隧道-端口转发
- 隧道-反弹shell
- 隧道-代理
- Metasploit代理
- 隧道-隐蔽隧道
- NAT内网穿透
- 内网渗透大纲
- 内网不能出网要怎么办
- 反弹shell 的方法
- 权限提升
- Windows提权
- webshell权限提升思路
- 本地提权方法
- 系统权限介绍
- 查找补丁方法
- MSF漏洞检测利用
- 可信任服务路径漏洞
- MSL文件提权
- 绕过UAC提权
- 令牌窃取
- zend提权
- 数据库提权
- Mssql弱口令提权
- UDF提权
- 开机启动项提权
- MOF提权
- 数据库提权步骤
- Linux提权
- 脏牛提权
- Ubuntu内核提权
- sudo溢出提权
- GNU C Library动态链接库$ORIGIN溢出提权
- 权限维持
- 隐藏克隆账户
- Shift后门
- Shift映像劫持后门
- 启动项后门
- 计划任务后门
- Linux密码获取与破解
- MSF后门
- 常见的后门技术
- 伪造票据
- 横向移动
- 横向移动介绍
- IPC连接
- 密码和哈希
- PTH-哈希传递
- 票据传递
- Kerberos协议域认证领域
- 伪造黄金票据
- 伪造白银票据
- 痕迹清理
- Windows日志
- Linux日志
- Web日志
- 应急响应
- 应急响应概述
- 安全产品介绍
- 入侵排查
- 入侵排查分类
- 基本信息排查
- 用户信息排查
- 启动项排查
- 计划任务排查
- 系统进程排查
- 服务排查
- 文件痕迹排查
- 日志分析排查(Windows)
- 日志分析排查(Linux)
- 日志分析排查(其它日志)
- 内存分析排查
- 流量分析排查
- 威胁情报排查
- 相关工具
- 应急常用工具
- 多引擎在线病毒扫描
- 病毒查杀软件
- 病毒清除工具
- 勒索病毒搜索引擎
- Webshell检测工具
- 在线沙箱
- 安全分析工具
- 应急响应-常见漏洞
- 勒索病毒
- 勒索病毒简介
- 勒索病毒-攻击步骤
- 勒索病毒-事件处置
- SSH爆破
- SSH简介
- SSH爆破-攻击步骤
- SSH爆破-事件排查
- SSH爆破-溯源分析
- SSH爆破-事件处置
- 挖矿木马
- 挖矿木马简介
- 挖矿木马-攻击步骤
- 挖矿木马-事件处理
- 挖矿病毒-事件抑制
- Webshell后门
- Webshell简介
- 事件处置
- 网页篡改
- 网页篡改简介
- 网页篡改-攻击步骤
- 网页篡改-事件处置
- DDOS攻击
- DDOS攻击简介
- DDOS攻击分类
- DDOS攻击工具
- DDOS-模拟攻击
- DDOS-事件处置
- 主机入侵-事件处置
- 睿眼沙箱系统
- 睿眼攻击溯源系统
- Webshell应急
- 异常外连
- JAVA相关
- JAVA框架介绍
- JAVA框架判断
- JAVA漏洞目录
- 常规漏洞
- JAVA-SQL注入
- JAVA-目录遍历
- JAVA-不安全遍历
- JAVA-逻辑越权
- 身份验证
- JWT令牌
- JWT简介
- JWT伪造攻击
- JWT密匙爆破
- JAVA反序列化
- T3协议
- JAVA反序列化原理
- JAVA代码审计
- fastjson利用
- 面试问题
- Log4j2
- log4j2原理
- log4g2攻击过程
- log4j2绕过方法
- CSRF和SSRF的区别
- 给你一个网站如何渗透
- 注射式攻击简介
- 浅析HTTPS中间人攻击与证书校验
- 漏洞信息
- PTT PTK的区别
- Kerberos协议
- 中间件常见漏洞
- 安全基线
- spring漏洞
- 渗透测试
- 渗透测试流程
- 信息收集
- 信息收集网站
- 渗透测试相关工具
- 溯源反击
- IP溯源
- 身份ID溯源
- 流量分析
- HTTP包分析
- SMB协议分析
- 冰蝎和蚁剑的流量特征
- Godzilla和冰蝎 免杀马方式
- fastjson流量特征
- phpstudy流量特征
- shrio流量特征
- struts2-045流量特征
- ThinkPHP流量特征
- Tomcat流量特征
- weblogic流量特征
- web目录扫描流量特征
- 钓鱼邮件分析
- APP渗透
- 获取数据
- 抓包设置
- APP漏洞扫描
- API接口