freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

内网渗透之横向移动 :AS-REP Roasting&Kerberoast
2021-10-16 11:54:06

AS-REP Roasting

预身份验证是Kerberos身份验证的第一步(AS_REQ & AS_REP),它的主要作用是防止密码脱机爆破。默认情况下,预身份验证是开启的,KDC会记录密码错误次数,防止在线爆破。

AS-REP Roasting是一种对用户账号进行离线爆破的攻击方式。但是该攻击方式利用比较局限,因为其需要用户账号设置 "Do not require Kerberos preauthentication(不需要kerberos预身份验证) " 。而该属性默认是没有勾选上的。

1634355671_616a49d7deedba68a8027.png!small?1634355672987

勾选上后,域控不会作任何验证就将TGT票据和该用户Hash加密的Session Key返回。因此,攻击者就可以对获取到的用户Hash加密的Session Key进行离线破解,如果破解成功,就能得到该指定用户的密码明文。

使用Rubeus.exe

下载地址:https://github.com/GhostPack/Rubeus

Rubeus里面的kerberoast支持对所有用户或者特定用户执行kerberoasting操作,其原理在于先用LDAP查询域内的spn,再通过发送TGS包,然后直接打印出能使用hashcat或爆破的Hash。 以下的命令会打印出注册于用户下的所有SPN的服务票据的hashcat格式。

Rubeus.exe asreproast

1634355680_616a49e0761aee3ce2b17.png!small?1634355681566

或者

Rubeus.exe asreproast > hash.txt

来将hash导出到文件当中

1634355686_616a49e60d41fdc5ea356.png!small?1634355687158

为了能让hashcat识别,我们要在$krb5asrep后面添加一个$23

1634355690_616a49ea29638458ff8f9.png!small?1634355691239

然后使用hashcat爆破即可

使用Powerview.ps1&ASREPRoast.ps1

powerview脚本是包含在empire项目下的

empire下载地址:https://github.com/EmpireProject/Empire/

powerview脚本可以查找域中设置了不需要kerberos预身份验证的用户,导入脚本后运行命令

Get-DomainUser -PreauthNotRequired

1634355695_616a49ef5063ad177905b.png!small?1634355696408

然后再使用ASREPRoast.ps1获取AS-REP返回的Hash

下载地址:https://github.com/HarmJ0y/ASREPRoast/

先导入脚本,在执行命令

Get-ASREPHash -UserName testuser -Domain g1ts.com

就可以拿到hash,然后就可以用hashcat进行爆破

Kerberoast

SPN在域环境中的应用

Windows域环境是基于微软的活动目录服务工作的,它在网络系统环境中将物理位置分散、所属部门不同的用户进行分组,集中资源,有效地对资源访控制权限进行细粒度的分配,提高了网络环境的安全性及网络资源统一分配管理的便利性。

在域环境中运行的大量应用包含了多种资源,为资源的合理分组、分类和再分配提供了便利。微软给域内的每种资源分配了不同的眼务主体名称( Service Principal Name,SPN)

SPN扫描

概念

在使用 Kerberos协议进行身份验证的网络中,必须在内置账号(Networkservice, Localsystem)或者用户账号下为服务器注册SPN。对于内置账号,SPN将自动进行注册。

但是,如果在域用户账号下运行服务,则必须为要使用的账号手动注册SPN。因为域环境中的每台服务器都需要在Kerberos身份验证服务中注册SPN,所以攻击者会直接向域控制器发送查询请求,获取其需要的服务的SPN,从而知晓其需要使用的服务资源在哪台机器上。

Kerberos身份验证使用sPN将服务实例与服务登录账号关联起来。如果域中的计算机上安了多个服务实例,那么每个实例都必须有自己的SPN。如果客户端可能使用多个名称进行身份验证,那么给定的服务实例可以有多个SPN。例如,SPN总是包含运行的服务实例的主机名称,所以,服务实例可以为其所在主机的每个名称或别名注册一个SPN。

根据Kerberos协议,当用户输人自己的账号和密码登录活动目录时,域控制器会对账号和密码进行验证。验证通过后,密钥分发中心(KDC)会将服务授权的票据(TGT)发送给用户(作为用户访问资源时的身份凭据)

下面通过一个例子来说明。当用户需要访问MSSQL服务时,系统会以当前用户身份向城制器查询SPN为“MSSQL”的记录。找到该SPN记录后,用户会再次与KDC通信,将KDC发放的TGT作为身份凭据发送给KDC,并将需要访问的SPN发送给KDC.KDC中的身份验证量务(AS)对TGT进行解密。

确认无误后,由TGS将一张允许访问该SPN所对应的服务的票据和该SPN所对应的地址发送给用户,用户使用该票据即可访问MSSQL服务。

SPN命令格式

SPN = serviceclass "/" hostname [":"port] ["/" servicename]

serviceclass:服务组件的名称

hostname:以"/"与后面的每次分割,是计算机的FQDN(全限定域名,同时带有计算机名和域名)

port:以冒号分隔,后面的内容为该服务监听的端口号。

servicename:一个字符串,可以是服务的专有名称(DN)、objectGuid、Internet主机名或全限定域名。

常见SPN服务

MSSQL服务的示例代码如下

MSSOLSvc/computer1.g1ts.com:1433

MSSQLSvc:服务组件的名称,此处为 MSSQL服务。

pentest com:主机名为computer1,域名为pentest.com

1433:监听的端口为1433

serviceclass和hostname是必选参数,port和servicename是可选参数,hostname和port之间的冒号只有在该服务对某端口进行监听时才会使用

Exchange服务的示例代码如下

exchangeMDB/EXCAS01.g1ts.com

RDP服务的示例代码如下

TERMSERV/EXCAS01.g1ts.com

WSMan/WinRM/PSRemoting服务的示例代码如下

NSMAN/EXCAS01.g1ts.com

用于进行SPN扫描的PSH脚本

当计算机加入域时,主SPN会自动添加到域的计算机账号的ServicePrincipalName属性中。在安装新的服务后,SPN也会被记录在计算机账号的相应属性中。

SPN扫描也称作“扫描Kerberos服务实例名称”。在活动目录中发现服务的最佳方法就是SPN扫描。SPN扫描通过请求特定SPN类型的服务主体名称来查找服务。

与网络端口扫描相比,SPN扫描的主要特点是不需要通过连接网络中的每个IP地址来检查服务端口(不会因触发内网中的IPS、IDS等设备的规则而产生大量的警告日志),因为SPN查询是 Kerberos票据行为的一部分,所以检测难度较大。

PowerShell-AD-Recon工具包提供了一系列服务与服务登录号和运行服务的主机之间的对应关系,这些服务包括但不限于MSSQL、Exchange、RDP、WinRM。

PowerShell-AD-Recon下载地址:https://github.com/PyroTek3/PowerShell-AD-Recon

(1)利用SPN发现域中所有的MSSQL服务

Discover-PSMSSQLServers下载地址:https://github.com/PyroTek3/PowerShell-AD-Recon/blob/master/Discover-PSMSSQLServers

因为SPN是通过LDAP协议向域控制器进行查询的,所以,攻击者只要获得一个普通的域用户权限,就可以进行SPN扫描。

在域中的任意一台机器上,以域用户身份运行一个Powershell进程,将脚本导入并执行,命令如下

先导入脚本

Discover-PSMSSQLServers

我的机器没有装MSSQL

1634355715_616a4a03de6f7e88f571c.png!small?1634355716908

(2)扫描域中所有的SPN信息

Discover- Psinterestingservices的下载地址见:https://github.com/PyroTek3/PowerShell-AD-Recon/blob/master/Discover-PSInterestingServices

在域中的任意一台机器上,以域用户的身份运行一个Powershell进程,将脚本导入并执行,命令如下

先导入脚本

Discover-PSInterestingServices

可以看到,域中有LDAP、DNS Zone、Wsman、MSSQL等多个SPN

因为每个重要的服务在域中都有对应的SPN,所以,攻击者不必使用复杂的端口扫描技术,只要利用SPN扫描技术就能找到大部分的应用服务器。

1634355721_616a4a09036efad6bdbfc.png!small?1634355722063

(3)powershell自带命令

在不使用第三方的powershell脚本的情况下,输入命令

setspn -T domain -q */* // 查看当前域内所有的 SPN

即可使用windows自带的工具列出域中所有的SPN信息

1634355725_616a4a0d97b80e6268e86.png!small?1634355726811

setspn -T g1ts.com -Q */*
//查看指定域g1ts.com注册的SPN,如果指定域不存在,则默认切换到查找本域的SPN

1634355734_616a4a16721f566983bc3.png!small?1634355735528

setspn -L <username>/<hostname>
//查找指定用户/主机名注册的 SPN

(4)使用GetUserSPNs.ps1脚本

下载地址:https://github.com/nidem/kerberoast.git

1634355739_616a4a1b38b572780c2e4.png!small?1634355740329

(5)使用powerview脚本

同样可以使用上面AS-REP Roasting提到的powerview脚本,此脚本包含在empire中

导入后使用命令

Get-NetUser -SPN

1634355743_616a4a1f4055cbcf57ad1.png!small?1634355744380

请求服务票据

使用Rubeus

同样可以用到上文提到的Rubeus

Rubeus里面的kerberoast支持对所有用户或者特定用户执行kerberoasting操作,其原理在于先用LDAP查询于内的spn,再通过发送TGS包,然后直接打印出能使用 hashcat 或 john 爆破的Hash。 以下的命令会打印出注册于用户下的所有SPN的服务票据的hashcat格式。

Rubeus.exe kerberoast

使用powershell请求服务票据

请求服务票据

Add-Type -AssemblyName System.IdentityModel

New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MySQL/WinSer2016.g1ts.com:3306/MySQL"

1634355749_616a4a2548f2b94b01aa6.png!small?1634355750328

klist

1634355754_616a4a2a8916425cc2244.png!small?1634355755680

使用mimikatz

//请求服务票据
kerberos::ask /target:MySQL/WinSer2016.g1ts.com:3306
//列出服务票据
kerberos::list 
//清除所有票据
kerberos::purge

服务票据的导出

使用 Mimikatz 工具导出

kerberos::list /export

1634355758_616a4a2ec06404beed51b.png!small?1634355760075

服务票据的暴力破解

使用tgsrepcrack.py脚本

下载地址:https://github.com/nidem/kerberoast.git

Tgsrepcrack.py 是 Kerberoast 工具集中的一个 Python 脚本,可用来对导出的服务票据文件进行离线破解

//python2 tgsrepcrack.py <字典> <导出的服务票据>
python2 tgsrepcrack.py wordlists.txt xxxxxx.kirbi

使用 Hashcat 工具

之前我们在请求和导出服务票据时,可以直接得到Hashcat格式的票据,将导出的 Hashcat 格式的票据保存在文件中,使用Hashcat进行爆破即可

# 渗透测试 # web安全 # 内网渗透 # 漏洞分析 # Kerberos协议
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
内网渗透 -- 横向移动
  • 0 文章数
  • 0 关注者
文章目录