热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Kerberoasting攻击

安全库:http:www.seclibs.com网络安全爱好者的安全导航,专注收集信安、红队常用网站、工具和技术博客前面我们介绍了《Windows本地

安全库:http://www.seclibs.com/
网络安全爱好者的安全导航,专注收集信安、红队常用网站、工具和技术博客

前面我们介绍了《Windows本地认证》、《Windows网络认证》、《Windows域认证》和《SPN扫描》,这次继续讲解域内相关的东西。


0x01介绍

当发布Windows 2000和Active Directory时,微软打算在 Windows NT 和Windows 95 上也支持Active Directory,这意味着不仅会产生各种各样的安全问题也会导致更多不安全的配置方式。同时,也意味着,微软要保证在多个不同版本的 Windows 客户端上均支持Kerberos协议。要实现这个想法的一个简单的办法就是在Kerberos协议中使用·RC4加密算法·,并将NTLM密码哈希作为该加密算法的私钥,该私钥可用于加密或签名Kerberos票证。因此,对于攻击者来说,一旦发现了 NTLM 密码哈希,就可以随意使用,包括重新拿回Active Directory域权限(比如:黄金票证和白银票证攻击)。

之前我们已经了解过通过SPN来进行域内服务发现,如果对spn还没有了解透彻的,请移步“SPN扫描”


0x02 Kerberos通信流程

这里借鉴一下网上给出的Kerberos的通信流程

file

用户使用用户名和密码进行登录

1a.将原始的明文密码转换为NTLM哈希,再将这个哈希和时间戳一起加密。最后,将加密的结果作为身份验证者发送到KDC进行身份验证的票据(TGT)请求(AS-REQ)。

1b.域控(KDC)检查用户信息(登录限制,组成员等)并创建票证授权票证(Ticket Granting Ticket-TGT)。

2.将TGT加密,签名并返回给用户(AS-REP)。只有域中的Kerberos服务(KRBTGT)才能打开和读取TGT数据。

3.当用户请求票证授权服务(TGS)票证(TGS-REQ)时,会将TGT发送给DC。 DC打开TGT并验证PAC校验和 – 如果DC可以打开票证并且校验和也可以验证通过,那么这个TGT就是有效的。之后,复制TGT中的数据用于创建TGS票证。

4.使用目标服务帐户的NTLM密码哈希对TGS进行加密并将加密结果发送给用户(TGS-REP)。

5.用户连接到服务器托管的服务的相应端口上并发送TGS(AP-REQ)给服务器。被托管的服务会使用服务账户的NTLM密码哈希打开TGS票证。

6.如果客户端需要进行相互之间的身份验证(可以想想MS15-011:在2月份发布的强化UNC的组策略补丁)就会执行这一步。

在第四步的时候,用户将受到由目标服务实例的NTLM hash加密生成的TGS,他的加密算法为·RC4-HMAC·,那么我们在获得这个TGS后,便可以通过穷举的方式,生成TGS与它进行比较,如果相同,就可以代表密码正确

然后还有几点是需要大家明白的

1.当域控查询某一个服务的SPN时

如果该SPN注册在机器账户computers下,将会查询所有机器账户的servicePrincipalName属性,找到所对应的账户。

如果是注册在域用户账户users下,将会查询所有域用户账户的servicePrincipalName属性,找到其所对应的账户。

找到对应的账户之后,使用它的NTLM hash生成TGS。

2.域内的所有主机都是可以查询SPN的

3.域内的任何用户都是可以向域内的任何服务请求TGS

所以,域内的任何一台主机,都可以通过查询SPN,向域内的所有服务请求TGS,然后进行暴力破解,但是对于破解出的明文,只有域用户的是可以利用的,机器账户的不能用于远程连接,所以我们的关注点主要就在域用户下注册的SPN


0x03 实验

首先我们先登陆服务器


域控
192.168.5.130
AdministratorWin7
192.168.5.238
机器账号SECQUAN_WIN7-PC\secquan_win7
域用户账号ZHUJIAN\win7

我们使用下列命令来进行查询

setspn -q */*

file

file

这个内容我们在spn扫描中也已经说明了,而且我们也发现MSSQL服务是注册在机器账户下的,前面也说过了,我们要关注的是域用户下注册的SPN

这里还有一个东西需要注意一下,在使用 Kerberos 身份验证的网络中,必须在内置计算机帐户(如 NetworkService 或 LocalSystem)或用户帐户下为服务器注册 SPN。

** 对于内置帐户,SPN将自动进行注册。但是,如果在域用户帐户下运行服务,则必须为要使用的帐户手动注册SPN,所以我们需要手动在域用户下注册SPN。

我们先使用 klist 命令,查询一下当前计算机下所存在的票据

file

紧接着,我们来给域用户下的MSSQL服务注册SPN

setspn -A MSSQLSvc/SECQUAN_WIN7-PC.zhujian.com zhujian\win7

file

注册完成后,我们再进行查看,确保已经注册到这个域用户下

可以发现已经多了一行域用户的值

file

然后 请求SPN Kerberos Tickets

Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList " MSSQLSvc/SECQUAN_WIN7-PC.zhujian.com "

file

然后再次查询所存放的票据

file

比之前多了一条,且加密类型是RC4-HMAC

然后使用mimikatz来导出票据

file

接下来便可以使用tgsrepcrack或者保存hash使用hashcat破解

这里我们使用tgsrepcrack来进行测试

python tgsrepcrack.py mima.txt 1-40a00000-win7@MSSQLSvc~SECQUAN_WIN7-PC.zhujian.com-ZHUJIAN.COM.kirbi

file

可以发现已经成功爆破得到密码

** PS:使用其他工具的方法都是类似的,工具都一样,重点在字典上


0x04 kerberoasting后门利用

如果我们有了SPN的注册权限,我们就可以给指定的域用户注册一个SPN,然后获取到TGS,然后破解得到密码

这里我们用网上的一个例子来让大家明白一下流程即可,其他的内容均与前面所讲到的相同

file

文章首发公众号:无心的梦呓(wuxinmengyi)

这是一个记录红队学习、信安笔记,个人成长的公众号

扫码关注即可

file


推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
author-avatar
不分日夜的我
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有