前言
往期文章:
《内网渗透测试:Kerberos 协议与 Kerberos
认证原理》
《内网渗透测试:Kerberos
协议相关安全问题分析与利用》
在上一篇文章《内网渗透测试:Kerberos 协议相关安全问题分析与利用》中,我们详细介绍了多种基于 Kerberos 协议进行的攻击,本节我们再来对
Kerberoast 攻击做一下介绍。
文中若有不当之处还请各位大佬多多点评
Kerberos 是一种支持票证身份验证的安全协议。如果客户端计算机身份验证请求包含有效的用户凭据和 SPN,则 Kerberos
身份验证服务器将授予一个票证以响应该请求。然后,客户端计算机使用该票证来访问网络资源。
什么是 SPN
SPN,ServicePrincipal Names,即服务主体名称,是服务实例(比如:HTTP、SMB、MySQL等服务)在使用 Kerberos
身份验证的网络上的唯一标识符,其由服务类、主机名和端口组成。Kerberos 认证过程使用 SPN 将服务实例与服务登录账户相关联,如果想使用
Kerberos 协议来认证服务,那么必须正确配置SPN。在使用 Kerberos 身份验证的网络中,必须在内置计算机帐户或域用户帐户下为服务器注册
SPN。对于内置机器帐户,SPN 将自动进行注册。但是,如果在域用户帐户下运行服务,则必须为要使用的帐户手动注册 SPN。
SPN 分为两种类型:
一种是注册在活动目录的机器帐户(Computers)下。当一个服务的权限为 Local System 或 Network Service 时,则 SPN
注册在机器帐户(Computers)下。
另一种是注册在活动目录的域用户帐户(Users)下,当一个服务的权限为一个域用户时,则 SPN 注册在域用户帐户(Users)下。
SPN的语法格式
<service class>/<host>:<port> <servername>
服务类型 /对应机器名:服务端口[默认端口可不写]
其中 <service class> 和 <host> 为必需元素
-
<service class>
可以理解为服务的名称,常见的有 WWW、LDAP、SMTP、DNS、HOST 等,例如MSSQLSvc/WIN-CKT0M35R6UO.top.pentest.top:1433
-
<host>
有两种形式,FQDN 和 NetBIOS 名,例如WIN-CKT0M35R6UO.top.pentest.top
或者是WIN-CKT0M35R6UO
-
如果服务运行在默认端口上,则端口号
<port>
可以省略
在内网中,SPN 扫描通过查询向域控服务器执行服务发现。这对于红队而言,可以帮助他们识别正在运行着重要服务的主机,如终端,交换机等。SPN 的识别与发现是
kerberoasting 攻击的第一步。
Kerberoasting
Kerberos 协议在请求访问某个服务时存在一个缺陷,Kerberoasting
正是利用这个缺陷的一种攻击技术。首先,我们来整体了解一下正常情况下一个用户请求访问某个服务时会经过哪些步骤:
-
首先用户将 AS-REQ 数据包发送给 KDC 密钥分发中心,要对一个域进行身份验证。
-
KDC 收到用户的请求后会验证用户的凭据,如果凭据有效,则返回 TGT 认购权证,该 TGT 认购权证用于以后的 ST 服务票据的请求。
-
如果用户想通过身份认证访问某个服务的话,那么他需要发起票据授予请求,请求中包含 TGT 以及所请求服务的 SPN 服务主体名称。
-
如果 TGT 有效并且没有过期,那么 TGS 会从 TGT 认购权证中提取信息创建一个用于访问目标服务的一个 ST 服务票据,该 ST 服务票据使用服务账户的凭据进行加密。然后,域控制器开始查找哪个帐户在 ServicedPrincipalName(SPN)字段中注册了所请求的 SPN。
-
用户收到包含了服务票据的 TGS 响应数据包。
-
最后,服务票据会转发给目标服务,然后使用服务账户的凭据进行解密。
整个过程比较简单,我们需要注意的是,服务票据会使用服务账户的哈希进行加密,这样一来,Windows域中任何经过身份验证的用户都可以从 TGS 处请求 ST
服务票据。由于服务票证是用链接到请求 SPN 的帐户的哈希加密的,所以攻击者可以离线破解这个加密块,恢复帐户的明文密码。
下面我们将我才能够一下几个步骤讲解 Kerberoasting 攻击的利用:
-
SPN 服务主体名称发现
-
请求服务票据
-
服务票据的导出
-
服务票据的暴力破解
SPN 服务主体名称发现
由于每台服务器都需要注册用于 Kerberos 身份验证服务的
SPN,因此这为在不进行大规模端口扫描的情况下收集有关内网域环境的服务运行信息提供了一个更加隐蔽的方法。
使用 SetSPN 查询
SetSPN 是 Windows 系统自带的工具,可以查询域内的 SPN:
setspn -Q */* # 查看当前域内所有的 SPN
setspn -T whoamianony.org -Q */* # 查看指定域 whoamianony.org 注册的SPN, 如果指定域不存在, 则默认切换到查找本域的 SPN
setspn -L <username>/<hostname> # 查找指定用户/主机名注册的 SPN
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6bGLaaze-1692510688092)(https://image.3001.net/images/20210523/1621744636_60a9dbfc09fb6d1ad37a2.png!small)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k7GLj30N-1692510688094)(https://image.3001.net/images/20210523/1621744636_60a9dbfc6fcc30397b0fe.png!small)]
使用 GetUserSPNs.ps1 脚本
GetUserSPNs 是 Kerberoast 工具集中的一个 PowerShell 脚本,可以用来查询域内用户注册的 SPN。
Import-Module .\GetUserSPNs.ps1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T8qFebLn-1692510688097)(https://image.3001.net/images/20210523/1621)]
可试读前40%内容
¥ 4.9 全文阅读
开通会员免费阅读 最低0.3元/天
t-Module .\GetUserSPNs.ps1
[外链图片转存中…(img-T8qFebLn-1692510688097)]
可试读前40%内容
¥ 4.9 全文阅读
开通会员免费阅读 最低0.3元/天
接下来我将给各位同学划分一张学习计划表!
学习计划
那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:
阶段一:初级网络安全工程师
接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。
综合薪资区间6k~15k
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)
2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等
3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)
4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现
5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固
6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?
阶段二:中级or高级网络安全工程师(看自己能力)
综合薪资区间15k~30k
7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。
零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;
Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完
用Python编写漏洞的exp,然后写一个简单的网络爬虫
PHP基本语法学习并书写一个简单的博客系统
熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)
了解Bootstrap的布局或者CSS。
阶段三:顶级网络安全工程师
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
学习资料分享
当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份【282G】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码链接领取哦。