当前位置: 首页 > article >正文

记录一次学习--kerberos协议学习以及一些攻击手法

目录

kerberos协议过程简介

请求WIN-1的cifs的服务的ST票据

抓包查看kerberos过程

kerberos流量解密

抓包

相关安全问题

pass the hash(权限限于管理员和管理员组)

例子

​编辑

pass the key

例子

用户名枚举

 密码喷洒

AS-REPRoasting

黄金票据

Pass The Ticket

Kerberoasting

白银票据


kerberos协议过程简介

AS_REQ:客户端向KDC(密钥分发中心)发起AE_REQ请求,请求的凭据是用自己hash加密的时间戳。

AS_REP:KDC使用客户端的密钥进行解密,解密成功且时间戳并没有过期。则发放TGT票据(使用krbtgt的hash进行加密,krbtgt是用户分发中心的账户),TGT里面有PAC,PAC里面有客户端的sid(域管理员500,可以类比llinux中suid),和客户端所在组。然后如果TGT中PAC里面的客户端权限够高,就可以请求所有服务。这个TGT就是黄金票据。黄金票据不是你前期入侵的时候使用的前期入侵的时候没有办法使用这个东西是权限维持也就是你把这个东西黑下来了,把整个域打通以后你拿到域控制器域管理员的hash拿到krbtgt的hash,才可以伪造黄金票据,,所以这个东西是用来权限维持,用来留下一个稳定的后门。

(上面两步只是验证你的权限)

TGS_REQ:客户端凭借TGT票据向KDC针对特定服务发起请求。请求中里面还有一个时间戳,这里的时间戳使用上面TGT票据中的logon session key这个进行加密。

TGS_REP:然后KDC用krbtgt hash进行解密,结果正确的话就返回用服务hash(不同服务有不同账号)加密的TGS票据,这里无论用户有没有访问服务的权限,只要TGT正确,就返回TGS票据

(这里一般不会验证上面的PAC,如果你获取了服务的hash就可以请求到服务,这就是白银票据。验证PAC这个功能可以开启,但是注册再本地系统账户下的服务无论如何配置都不会触发KDC的PAC签名)

AP_REQ:然后客户端拿着TGS票据去请求服务

AP_REP:然后服务拿着自己的hash解密TGS票据。解密正确的话,就拿着PAC去KDC访问客户端。

请求WIN-1的cifs的服务的ST票据

python3 getST.py -dc-ip 192.168.244.134 -spn cifs/WIN10-1.xinhuo.com xinhuo.com/xxx:xxxx


为域控IP

所请求服务,机器

账号密码

抓包查看kerberos过程

kerberos流量解密

第一步

mimikatz提取 Active Directory 中 krbtgt 账户哈希值。

命令

mimikatz # lsadump::dcsync /user:xinhuo\krbtgt

然后复制 Hash NTLM值,将值放到python文件中去

但是我这里不知道为啥Hash NTML不能直接复制,下面也有解决办法

在管理员cmd模式下,并且在mimikatz路径下执行下面命令后,在mimikatz目录下会生成一个log文件,文件中有你执行命令的结果

mimikatz.exe ""privilege::debug"" ""lsadump::dcsync" "/user:xinhuo\krbtgt"" exit >> log.txt

 

然后就可以正常复制NTLM了,建议再整一个域管理员的hash,我这里只整了krbtgt

然后将抓取到的NTLM和aes256_hmac和aes128_hmac放入下面连接的python文件中如下图所示位置

forest-trust-tools/keytab.py at master · dirkjanm/forest-trust-tools · GitHub

然后执行该python文件,并生成一个密钥文件

python 该文件 要生成文件

将生成文件导入到wireshark中,再wireshark的首选项的protocols中的KRB5中导入,然后你去抓包就可以解密成功了

抓包

请求WIN-1的cifs的服务的ST票据是wireshark抓取连接windows虚拟机的网卡

下面是抓出来的一些值

然后大家对应Kerberos协议的过程对于抓包的内容进行分析就可以了

在分析完各种流程的数据包和后我们会在过程中发现一些安全问题

相关安全问题

pass the hash(权限限于管理员和管理员组)

当你输入密码后会将你的密码转化成hash值,然后将hash存到SAM文件中,后续就是你再次输入密码就会比对你输入密码的哈希和SAM文件中的hash如果相同就可以登陆不同则不可以登陆。这种验证没有经过KDC这里经过的是NTML。这里在公司中有可能运维所设置很多台设备都是同一个账户和密码,只要我们拿下了一台设备,并且权限够,我们可以使用mimikazt等工具抓取hash,然后通过impacket里面的smbexec.py进行攻击,就可以尝试登陆其他设备。(mimikatz从Windows Vista和Windows Server 2008后就抓不到明文了要抓的话需要修改注册表)

这里回弹回来的权限就是system很危险

例子

这里我有两台设备(两台本地设备都是一样的密码这意味着他们的hash相同)本地登陆后抓取NTLM,我用抓取到的hash取登陆另外一台设备

首先抓取192.168.244.132的administrator的NTLM hash

尝试登陆

这里弹回来的是system权限

pass the key

这里是传递方式是kerberos方式,这里的密码hash,转化成了aes256 hash,就是ae-req用来加密时间戳的密钥。其他的与上面pass the hash几乎一样

这里漏洞可以访问到c盘,然后我们可以将木马放到c盘然后去执行任务计划,用at或者schedule什么的,然后就可以上线木马了。

例子

使用下面语句可以抓出ase key

mimikatz.exe ""privilege::debug"" ""sekurlsa::ekeys"" exit >> log.txt

这里将key抓出来了

使用以下语句就可以登陆了

在查阅了一些文章后文章说是要打kb2871997 这个补丁,但是我这里测试没有打补丁的情况下也可以远程登陆,但是需要用户具有管理员或者是管理员组的里面成员的权限

 mimikatz "privilege::debug" "sekurlsa::pth /user:administrator /domain:xinhuo.local /aes256:"抓出来的hash

这里忘记截图了

用户名枚举

当你拿下了一台域内服务器,然后就可以来实现我们的用户名枚举

这里是指定了一个密码不停的尝试用户名

这个东西的依据就是依靠报错信息的不同,不同的报错信息的含义不同

存在用户:`error_code:eRR-PREAUTH-REQUIRED`
密码错误:`error_code:eRR-PREAUTH-FAILED`

我们可以使用这么个工具来进行用户名枚举

 密码喷洒

固定一个密码去尝试不同的用户名,这个也是通过返回的报错信息不同

AS-REPRoasting

这里是由于对于域用户设置了不要求kerberos预身份验证,这里域里面的机器用的就是rc4加密,在RC4_HMAC加密方式下,我们可以通过穷举明文口令,利用相同加密流程加密明文口令,然后将加密结果对比密文是否相同来判断爆破结果,然后你拿到了logon session key后可以通过工具破解出来。但是一般人不会设置不要求kerberos预身份验证,且这个hash也不一定好破解,这个可以破解出来的概率也是很小的。我们可以通过ldap查询没有进行kerberos预身份验证得用户,然后我们可以使用rubeus这么个工具进行破解破解密码得hash值,将这个值整成hashcat可以破解得形式。然后使用hashcat破解进行破解(一般破解不出来,因为这里进行破解依靠的是你的字典)。

未开启kerberos预身份验证得查询条件: userAccountControl:1.2.840.113556.1.4.803:=4194304

查询命令:adfind -b dc=域名,dc=local -f"(查询条件)" -dn

获取hash(这里是获取得拼接后的,然后可以使用hashcat破解):Rubeus.exe asreproast /nowrap /format:hashcat

爆破hash:hashcat -m 18200 hash.txt passwords.dict --force

hash.txt这里放的就是你刚刚通过rubrus获取得hash

passwords.dict这里就是爆破得密码

黄金票据

在AS_REP里面的ticket的encpart是使用krbtgt的hash进行加密的,如果我们拥有krbtgt的hash
就可以给我们自己签发任意用户的TGT票据,这个票据也被称为黄金票据。这个就是用来权限维持的,因为Krbtgt只有域控制器上面才有,所以使用黄金凭据意味着你之前拿到过域控制器的权限。所以这里不难推断出黄金票据的两个特点,需要与域控通信,拿下域控获取krbtgt的的密钥.

获取krbtgt hash:使用mimikatz的这个命令lsadump::dcsync /domain:god.org /all /csv

这里是mimikatz伪造一台域控制器,然后mimikatz伪造的域控制器主动与真实的域控制器通信,然后将真的域控的hash同步过来(这个前提是你要有域管理员的权限)

制作黄金票据条件:

域名称

域SID值

域的krbtgt账户密码hash

伪造用户名(这里TGT使用在20分钟内,域控KDC服务不会验证TGT中的用户账户)

首先获取域名称

可以使用ipconfig /all

获取域SID值

使用whoami /all

我们只需要前面的一段数字(这是域里面的唯一标识符)去掉-后面的东西

获取krbtgt hash

这个在上面有,就是解密kerberos的过程中

然后可以使用mimikatz制作黄金票据

mimikatz.exe "kerberos::golden /domain:域名 /sid:抓取的值 /user:test /krbtgt:hash值/ticket:k0u.kiribi" exit

票据制作成功

Pass The Ticket

这个攻击就是通过拿到票据或者伪造票据来进行横向移动,比如说上面的黄金门票就是这个攻击手法的一种。

除去黄金门票,我们还可以导出内存中的票据,然后我们可以抓到鱼贯的TGT,然后我们可以注入域管的TGT到缓存中,然后使用这个域管的TGT来向TGS换取相应的服务凭证ST

导出票据

Mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" exit

 注入缓存(票据文件注入内存的默认有效时间为10小时)

kerberos::ptt ./抓取到的票据如下图

Kerberoasting

这个工具看名字就知道应该是利用加密算法的问题来破解一些hash之类的东西。这个工具所破解的是Server Hash这个hash是TGS_REP回复的时候用来加密的服务hash,当认证加密算法为RC4_HMAC(弱加密类型)时,我们可以通过穷举口令,利用相同的加密过程获得密文,将获得的密文与ST票据中的密文比较,若相同,则说明口令正确,成功爆破获得服务凭据的明文。

我们可以使用如下图语句发现有价值的spn(spn是服务实例的唯一标识服务,然后使用spn对服务进行身份认证的时候,必须在服务实例用于登陆的账户对象上注册spn)

然后我们可以提取并转存TSG票据获取hash,然后将票据格式转化未hashcat格式,然后使用hashcat破解

导出TGS票据

mimikatz.exe "kerberos::ask /target:服务名/域名:端口号" "kerberos::list /export" exit

使用hashcat暴力破解

hash:hashcat -m 13100 hash.txt passwords.dict --force

(既然是暴力破解那么最重要的是你的字典中是否有那个密码,所以这个就是看你前期信息收集,或者你拿下服务器然后在社工库搜索那个服务器中记录的管理员的常用的密码,然后使用那些密码进行尝试)

这个暴力破解仅仅支持rc4的加密算法,但是如果是aes256或者aes128加密算法我们可以使用rubeus这个工具让TGS_REQ最高支持的算法是RC4,然后这个样子TGS_REP与TGS_REQ协商的时候用的算法就是RC4,然后这样就可以抓取TGS票据然后进行爆破了,这个东西限制只有进行用RC4这个算法才可以禁用

使用如下语句

Rubeus kerberoast /tgtdeleg

白银票据

白银票据是不需要与域控(KDC)交互

白银票据是需要目标服务的NTLM Hash(获取Server Hash伪造TGS)

如果我们有了Server Hash的话,我们就可以伪造ST,服务器在没有收到ST之前是不知道Server Sessoin Key的,所以这一切的认证最重要的就是Server Hash,有了Server Hash我们就可以伪造ST来访问指定的服务。 然后这里的server hash是看你访问什么服务你访问的服务是那个用户下的,服务hash就是那个下面

白银票据条件

域名称:使用ipconfig /all 获取

域SID: 使用whoami /all获取

server hash

目标服务器上面的kerberos服务

使用mimikatz制作白银票据

kerberos::golden /domain:域名 /sid:抓取的值 /target:目标(就是你的域控) /service:服务名 /rc4:抓取的hash /ppt

白银票据的应用场景,有朝一日你拿下的域控被管理员发现了,然后如果你有个普通用户的hash就可以进行白银票据的制作然后访问对应服务,比如说登陆域控。


http://www.kler.cn/news/318857.html

相关文章:

  • 【Java】虚拟机(JVM)内存模型全解析
  • PostgreSQL运用关键点是什么呢?
  • RL进阶(一):变分推断、生成模型、SAC
  • ESXI主机加入VCENTER现有集群提示出现常规性错误
  • Vue 自定义指令实现权限控制
  • Redis哨兵详细理论实操教程
  • UE4_后期处理七—仿红外线成像效果
  • 配置Docker镜像加速器
  • 一个10k stars开源的证件照工具
  • 【Go语言】Go语言结构体全面解析
  • 9.24-k8s服务发布
  • C#|.net core 基础 - 深拷贝的五大类N种实现方式
  • streamlit 文件上传保存+预览
  • 七层负载均衡和四层负载均衡的区别
  • 苍穹外卖学习笔记(十一)
  • 智谱AI:CogVideoX-2b——视频生成模型的得力工具
  • 短视频矩阵源码/短视频矩阵系统搭建/源码开发知识分享
  • Github + Hexo + Shoka搭建个人博客以及遇到的部分问题
  • mysqldump使用cmd窗口和powersell窗口导出sql中文乱码的问题
  • 工厂模式在短信发送中的应用 —— 以腾讯云、阿里云、华为云为例
  • Vue.js 中,@click 和 @click.stop的区别
  • Redis 多级缓存
  • 可以把台式电脑做成服务器吗
  • 状态模式原理剖析
  • OpenCV normalize() 函数详解及用法示例
  • 钰泰-ETA6964A 锂电池充电器IC
  • 基于STM32F103C8T6单片机的农业环境监测系统设计
  • 3D模型在UI设计中应用越来越多,给UI带来了什么?
  • API代理是什么?解读其原理与作用
  • golang context管理channel