长亭百川云 - 文章详情

跟着大佬学渗透之高级篇06

牧之

60

2024-06-30

前言

今天的靶机依然是HTB(Hack The Box)的靶机--Support。通过这次的靶机训练,我们可以继续了解域渗透工具BloodHound的使用,也可以了解一点PE文件逆向相关的知识。

**开干:
**

1、环境准备

  • HTB的靶机

选择HTB的Support靶机,下载HTB的VPN。

  • Kali

将HTB的vpn文件put到kali中,使用命令 openvpn + ovpn文件路径 命令开启vpn连接。连接成功会在HTB网页右上角显示CONNECTIONS

2、扫描开放端口

使用nmap命令扫描开放端口:

nmap xxx.xxx.xxx.xxx -sV -sC -p- -T4 -Pn 

列举几个比较重要的端口:88(kerberos),135、593(RPC),139、445(SMB),389、3268、3269(Ldap)

3、寻找漏洞尝试利用

开放了Ldap服务,先使用ldapsearch匿名搜索下目录对象。

ldapsearch -x -H ldap://10.129.xxx.xxx/ -D '' -w '' -b 'DC=htb,DC=local'

并没有权限,接着访问下SMB服务,列举下共享目录:

访问support-tools目录:

目录下有很多exe文件,mget 将所有文件下载到本地,其中有个文件名称为UserInfo.exe.zip,可能存在一些用户信息,将该文件解压:

其中有个文件名称为UserInfo.exe,将该文件导入IDA中,当然也可以选择其他PE文件逆向工具。

查看左边的方法名称,有个方法为getPassword,似乎与密码有关。

.field private static string enc_password 表明enc_password是一个私有静态字段,下面就去其他方法中查找enc_password是在哪赋值的。

这边可以看到enc_password的值为:0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E

加密的密钥为:armando

继续研究getPassword方法,尝试逆向解密方法。

把getPassword方法直接丢进GPT:

所以流程为:

1、将base64的密文解码为字节数组。

2、解码后的字节数组与密钥的字节数组中相应的字节进行异或操作,然后再与数字223(16进制的0xDF)进行异或操作。

3、将最后的字节数组转换为字符串。

编写代码,尝试解密密钥:

得到密钥为:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz

接下来就是去找用户,在UserInfo.Services.LdapQuery相关方法中找到一些和用户相关的逻辑:

可以看到这边调用了UserInfo.Services.Protected::getPassword() 方法,获取一个密码字符串,并将其放到堆栈上,然后将字符串 "LDAP://support.htb" 加载到栈上,将字符串 "support\ldap" 加载到栈上。

总结来说,这个方法初始化LdapQuery实例,获取一个密码,以及LDAP路径和用户名创建一个DirectoryEntry实例。为后续LDAP操作做准备。所以我们通过这边可以找到用户名就是 “support” 。

至此我们就找到了一对用户名密码,"support" : "nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz"

尝试winrm登录:

登录失败了,因为通过逆向这个exe文件,发现是在做Ldap相关的操作,所以接下来用这个用户对LDAP服务进行搜索操作,看看能不能发现其他有用的信息:

可以发现在用户support这边,有个info字段,内容为:Ironside47pleasure40Watchful,以这个为密码,用evil-winrm尝试登录:

成功登录后,读取用户Flag:

4、提权

靶机开放了88端口,是个域环境靶机,使用SharpHound进行域内信息收集再好不过了。

下载SharpHound进行域内信息收集

将生成的zip文件下载到装有BloodHound的机器(sharphound&bloodhound的安装启动,可以参考上一篇文章)。

点击Shortest Paths to Unconstrained Delegation Systems

将拿到的用户SUPPORT@SUPPORT.HTB 设置为起始节点,查看该节点的详细信息,包括与之相关的权限和控制关系。

这边我们就可以看到,SUPPORT@SUPPORT.HTB用户是SHARED SUPPORT ACCOUNTS@SUPPORT.HTB组的成员,同时,SHARED SUPPORT ACCOUNTS@SUPPORT.HTB组对DC.SUPPORT.HTB有GenericAll权限,DC.SUPPORT.HTB又是DOMAIN CONTROLLERS@SUPPORT.HTB组的成员。

右键GenericAll 查看使用建议:

其中说到,对计算机对象的完全控制可用于执行基于资源的约束委派攻击。接下来就按照Help中的步骤,一步步执行。

执行提示中的Powershell命令,需要下载两个脚本PowerView.ps1、Powermad.ps1,还需要下载一个针对Kerberos认证系统的工具Rubeus.exe。三个工具都可以去github中下载。

. ./Powermad.ps1

. ./PowerView.ps1

运行两个PowerShell脚本文件后,执行攻击命令。

流程是这样的:

1、首先,如果攻击者没有控制设置了 SPN 的账户,可以使用 Kevin Robertson 的 Powermad 项目添加一个新的攻击者控制的计算机账户

2、然后可以使用 PowerView 来检索新创建的计算机帐户的安全标识符 (SID)。

3、再以攻击者添加的计算机 SID 为委托人建立一个通用 ACE,并获取新 DACL/ACE

4、接下来,需要在接管的计算器账户的 msDS-AllowedToActOnBehalfOfOtherIdentity 字段中设置这个新创建的安全描述符

5、然后,使用 Rubeus 将明文密码散列为 RC4_HMAC 形式

6、最后,使用 Rubeus 的 *s4u* 模块,为要 "假装 "为 "管理员 "的服务名称(sname)获取服务票据。

将票据复制出来,去除其中所有的空格,保存本地。

在将Kerberos票据文件转换为ticket.ccache文件(Kerberos凭据缓存文件)

更新KRB5CCNAME 环境变量,将域名support.htb、dc.support.htb添加到/etc/hosts中,使用带有Kerberos身份验证的psexec获取SYSTEM shell。

这边获取失败了,可能之前票据处理空格时候有点问题,下面直接使用getST脚本自动生成票据。

命令如下:

impacket-getST -spn 'cifs/support.htb' -impersonate 'administrator' -dc-ip 'xxx.xxx.xxx.xxx' 'support.htb'/'attackersystem$':'xxxxxxxxx'

  • "-spn 'cifs/support.htb'" 指定了要请求服务票据的服务主体名称(Service Principal Name)。

  • "-impersonate 'administrator'" 表示要冒充(impersonate)管理员用户来请求票据。

  • "-dc-ip 'xxx.xxx.xxx.xxx'" 指定域控制器的 IP 地址。

  • "'support.htb'/'attackersystem$':'xxxxxxxxx'" 包含了目标域、攻击者系统的计算机名以及相应的密码。

更新KRB5CCNAME 环境变量,使用带有Kerberos身份验证的psexec获取SYSTEM shell。

成功拿到管理员的shell,读取root flag:

5、总结

获取这个靶机的用户权限,先是通过逆向分析smb服务中的共享文件,拿到ldap服务的一个账户、密码。然后通过ldapsearch发现了用户support的密码。

获取这个靶机的管理员权限,先是通过SharpHound进行域内信息收集,然后通过基于资源的约束委派攻击(RBCD)提权。

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2