浅析内网渗透中协议基础与常见手法

时间:2022-04-29

前言

一年一度的国家级HW行动即将到来,现如今掌握内网渗透的技术手段已经逐渐成为每个安全人员必备的技能树之一,提到内网渗透中用到的很多横向移动手法其实都离不开我们内网中的一些身份鉴别协议。攻防的对抗永远拼的是基础,本文来给大家介绍内网中最基本的两个身份授权协议和一些常用的内网攻击技术手段,旨在帮助大家打牢内网渗透基础知识。

Kerberos协议

1.kerberos设计初衷:

Kerberos首先是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认 证,kerberos侧重于通信前双方身份的认定工作,帮助客户端和服务端解决身份信息的鉴定,客户端需 要确认即将访问的网络服务就是自己所想要访问的服务而不是一个伪造的服务器,而服务端需要确认这 个客户端是一个身份真实,安全可靠的客户端,而不是一个想要进行恶意网络攻击的用户。

2.kerberos协议中的角色

1.客户端:发送服务请求

2.服务端:接受服务请求
3.KDC(密钥分发中心):由三部分组成分别为:

Kerberos Database:包含有所有客户端和服务的密码

AS:认证服务器,专门用来认证客户端的身份并发放客户用于访问TGS的TGT(访问TGS的票据)

TGS:票据授予服务器,用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据(访问服务的server ticket)

3.kerberos协议协商流程

1.客户端(Client)向KDC中的AS发起请求认证,发送自己使用客户端(Client)hash加密的身份信息。

2.AS接受到了请求,使用客户端的hash解密,解密结果如果正确返回用krbtgt hash加密的TGT票据,包含pac。

3.客户端(Client)使用刚刚获得的TGT向KDC中的TGS发送请求,请求自己需要得到的资源

4.KDC中的TGS使用krbtgthash解密TGT,解密结果正确返回用服务器的hash加密的server ticket(TGS)

5.客户端(Client)拿着获得的server ticket(TGS)去服务器请求资源

6.服务端:使用自己服务的Hash成功解密TGS后,然后拿着TGS中获取的PAC去访问KDC判断客户端是否有权限访问。KDC解密PAC后获取用户sid以及所在组的信息,并根据访问控制表(ACL)判断权限。若符合,server返回资源给client

1650700339_6263b0333b1d76e16fe2b.png

4.常见的基于kerberos协议的攻击有如下几种(攻击阶段请参考上图)

PTH:如果找到了某个用户的ntlmhash,就可以拿这个ntlmhash当作凭证进行远程登陆了(在kerberos协议第一阶段发起的攻击)

PTK:若某个用户的加密方式是aeskey,那么就是拿到他的PTK就可以当作凭证进行远程登陆了(在kerberos协议第一阶段发起的攻击)

黄金票据:得到krbtgt的NTLMHash,就可以伪造TGT和LogonSession Key来进入下一步客户端与TGS的交互。(在kerberos协议第二阶段发起的攻击)

白银票据:白银票据的利用过程是伪造TGS,通过已知的授权服务密码生成一张可以访问该服务的TGS。因为在票据生成过程中不需要使用KDC(即没有前四步),所以可以绕过域控制器(在kerberos协议第五阶段发起的攻击)

MS14-068:KDC对pac校验算法上有缺陷,畸形TGT包可以解析而且服务器没有向域控DC验证pac,客户端可以伪造域管的权限来访问服务器(在kerberos协议第六阶段发起的攻击)

S4U2self/S4U2proxy协议:

1.概念

S4U2self/S4U2proxy协议是Kerberos协议的一个扩展,他的用处是在于当某个用户没有使用kerberos认证登陆了service,当这个用户想访问域内资源的时候,由于没有Kerberos的TGT就无法获取TGS进而 无法继续访问其他服务,为了解决这个难题故引进了S4U2self/S4U2proxy协议。

2.S4U2self/S4U2proxy 协议协商过程

1650700430_6263b08e803bf2760f714.png

(1) 用户登陆Service 1在请求Service 2的中的某些资源。

(2) 通过 S4U2self 扩展以用户的名义向 KDC 请求用于访问 service1 的 ST1。

(3) KDC解密来自Service 1的TGT后返回一个新的ST1,

(4) service1 可以使用 ST 中的授权数据来满足用户的请求,然后响应用户。

S4U2proxy:

尽管 S4U2self 向 service1 提供有关用户的信息,但 S4U2self 不允许 service1 代表用户发出其他服务的请求,这时候就轮到 S4U2proxy 发挥作用了。

(5) 用户向 service1 发送请求,service1 需要以用户身份访问 service2 上的资源。

(6) service1 以用户的名义向 KDC 请求用户访问 service 2的 ST2。

(7) 如果请求中包含 PAC,则 KDC 通过检查 PAC 的签名数据来验证 PAC ,如果 PAC 有效或不存在,则 KDC 返回 ST2 给 service1,但存储在 ST2 的 cname 和 crealm 字段中的客户端身份是用户的身份,而不是 service1 的身份。

(8) service1 使用 ST2 以用户的名义向 service2 发送请求,并判定用户已由 KDC 进行身份验证。

(9) service2 收到 ST2进行判断,如果身份满足响应步骤 8 的请求。

(10) service1 响应用户对步骤 5 中的请求

2.基于S4U2self协议的攻击:

提到S4U2self协议就不得不提到域内委派攻击,那么什么是委派呢,通俗的来讲就是,在域中A使用Kerberos身份验证访问域中的服务B,而B再利用A的身份去请求域中的服务C,这个过程就可以理解为 委派。委派攻击分非约束委派,约束委派,其中针对约束委派的攻击需要利用我们提到的S4U2proxy协议,下面我们逐个介绍。

非约束委派攻击:

用户会将从KDC处得到的TGT发送给访问的service1(可以是任意服务),service1拿到TGT之后可以通 过TGT访问域内任意其他服务。非约束性委派利用:非约束委派是一种被动的方式,我们需要被害主机  主动访问我们已经控制的一台域内主机上的服务。

1650700475_6263b0bb4dfcc04bcdbf4.png

很明显上面的约束委派的安全性很差,所以微软发布了约束委派,包括一组S4U2Self和S4U2Proxy的Kerberos协议扩展。

约束委派攻击:

如果我们能获取到开启了约束委派的服务用户的明文密码或者NTLMHash,我们就可以模拟任意用户伪造S4U请求,进而伪装成服务用户以任意账户的权限申请访问委派设置的指定服务的ST。我们不仅可以获得指定的服务的权限,还可以获得本身与该hash账户关联的服务如:如果我们能够访问CIFS服务,那么同样有权限访问HOST服务1650700498_6263b0d20275ceccd2581.png



联系老师 微信扫一扫关注我们 15527777548/18696195380 在线咨询
关闭