运行靶机,获得IP:10.10.11.174
用nmap对该ip进行全端口扫描,得到以下关键端口信息,大体能推测这是一台仿DC的靶机
因为445端口是开着的,我们先尝试用smbclient连一下,看看有没有empty password
1 | 1. smbclient -L 10.10.11.174 |
这里是在support-tools 的共享下发现了空密码,也是成功下载了UserInfo.exe.zip
下载下来之后,咱们把UserInfo.exe.zip解压到特定目录下,用file命令查看下该文件属性,得到以下信息,发现是.NET
程序,按照常理来讲,这个时候我们的流程应该是用dnspy
做逆向查看下这个文件究竟是何方神圣,然后欢欣雀跃的发现这是一个ldap通信程序,接着再拿gpt写解密脚本把ldap服务器的用户和密码都给破译出来,链接上dc的ldap服务再接着做渗透。但博主的逆向水平实在薄弱,咱们直接上wireshark抓ldap的绑定包查看用户密码也是可以的(ldap协议绑定包里不加密)
1 | UserInfo.exe: PE32 executable (console) Intel 80386 Mono/.Net assembly, for MS Windows |
因为是exe程序,linux下没法直接运行,这里是用了wine
来启动的(还挺难配)。在终端输入wine UserInfo.exe -v find -first test0
的同时,用wireshark
抓eth0
的包,这里是先抓到了他的dns包,因为这个dns服务器不在公网,我们没办法通过这个域名解析获得到ip,需要我们自己去/etc/hosts
把support.htb
配置一下。这里还可以用dig
顺便挖一下历史解析记录。dig @10.10.11.174 +short support.htb any
把这个东西10.10.11.174 dc.support.hub support.htb
添加进去hosts
,然后用wireshark进行第二次抓包,如图筛选出来ldap协议的绑定包
用户:support\ldap
密码:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz
。
这里就已经可以连上ldap服务了,两条路子,可以用ldapserch
来连,也可以用Activity Directory Studio
来连,我们这里就用 Activity Directory Studio
来连了
注意下 DN
这里的填写,然后把刚才拿到的密码拿过来链接即可。
链接上以后,按DC=support,DC=htb
-> CN=Users
的结构查找到了CN=support
这个项,发现Info里面竟然有点东西,猜测可能是密码,并且因为support
属于Remote Management
组,这里可以尝试用evil-winrm
来链接一下info:Ironside47pleasure40Watchful
(下面是关于winrm的一些介绍,我之前也没了解过这里)
1 | WinRM 是 Windows Remote Managementd(Windows 远程管理)的简称,是 Web 服务管理标准 WebService-Management 协议的 Microsoft 实现。该协议是基于简单对象访问协议(SOAP)的、防火墙友好的标准协议,允许来自不同供应商的硬件和操作系统能够互操作。 |
在终端输入以下命令evil-winrm -u support -p 'Ironside47pleasure40Watchful' -i support.htb
,直接就是链接成功拿下用户权限,这里几步并一步,在桌面上读取到了user的flag,跨步进入提权阶段。
到了提权阶段,什么都是新鲜东西,看了看别的师傅写的wp,这里是用到了一个叫SharpHound
的工具,GPT的介绍大体如下
1 | SharpHound是BloodHound项目中的一个工具,用于收集Windows Active Directory环境中的信息,帮助进行网络攻击路径分析和权限提升。 |
先是把SharpHound.exe上传到DC主机上
再用SharpHound.exe对DC主机开始信息搜集,用到的命令如下,各个选项的解释也给附上了
./SharpHound.exe --memcache -c all -d SUPPORT.HTB -DomainController 127.0.0.1
1. --memcache
: 启用Memcached收集方法,用于从目标计算机中收集数据。Memcached是一种常用的缓存技术,可以在网络攻击中用于获取敏感信息。
2. -c all
:设置数据收集方法为”all”,即执行完整数据收集。此选项将包括跳板、组成员关系、本地管理员、用户有权访问的计算机等信息。
3. -d SUPPORT.HTB
:指定目标域为”SUPPORT.HTB”。将”SUPPORT.HTB”替换为你要收集信息的目标域。
4. DomainController 127.0.0.1
:指定用于数据收集的域控制器的IP地址
输入完之后会获得一个信息集合包,我们把他下载到本地进行分析
分析的工具用到的是BloodHound
,先找个终端把neo4j
给启动了,之后再找个终端去把BloodHound
给启动了,密码是我们自己设置的。
把刚拿到的文件拖进来分析后得到了一个非常酷炫的界面,选择 Analysis
-> Shortest Paths
->Shortest Paths to Unconstrained Delegation System
。
得到了这么一副图,我们会发现SUPPORT.HTB
域中的SHARED SUPPORT ACCOUNTS@SUPPORT.HTB
组对DC.SUPPORT.HTB
有GenericAll
权限。而我们可以访问的support
用户帐户正好是SHARED SUPPORT ACCOUNTS@SUPPORT.HTB
组的成员。
以下是一些常见的权限清单。
- GenericAll : 对对象具有完全权限(例如,添加用户到组或重置用户密码)。
- GenericWrite : 更新对象的属性(例如,登录脚本)。
- WriteOwner : 将对象所有者更改为攻击者控制的用户以接管对象。
- WriteDACL : 修改对象的访问控制项(ACEs),并赋予攻击者对对象的完全控制权限。
- AllExtendedRights : 具备添加用户到组或重置密码的能力。
- ForceChangePassword : 具备更改用户密码的能力。
- Self (Self-Membership) : 具备将自身添加到组中的能力。
因为后续的利用涉及到 基于资源的约束委派攻击
,这里简单的介绍一下流程,详情可以看下面这篇文章,感觉讲的非常nice。
Kerberos 基于资源的约束委派:计算机对象接管 - 红队说明 (ired.team)
流程分析
- 获取目标主机上一个具有高权限的账号A,以达到修改目标主机配置的目的。
- 利用账号A创建一个计算机对象并为其设置SPN(SPN是一个用于在Kerberos身份验证中标识和验证服务的机制,具有SPN的帐户通常用于充当服务或应用程序的身份)
- 利用账号A修改目标主机配置(改
msDS-AllowedToActOnBehalfOfOtherldentity
属性),配置基于资源的约束委派,允许刚才创建的计算机对象成为万能委派账号,模拟任何用户(这里要模拟的是administarator用户) - 使用Rubeus工具执行完整的S4U攻击(S4U2Self和S4U2Proxy,攻击者通过S4U2Self请求获得了对管理员的访问权限,然后通过S4U2Proxy请求了对受害者主机的访问权限)
- 通过哈希传递登录我们创建的计算机对象,再通过计算机对象代理administrator,实现提权。
附上之后的命令集,先把创建的计算机对象添加到AD里
然后再使用“约束委派”权限对计算机对象进行设置
1 | # 上传Powermad和Rubeus工具到目标计算机上。 |
1 | # 使用Rubeus生成新伪造计算机对象的密码哈希值,用于下一步 |
链接,提权,pwn!
1 | # 在Kali上进行以下步骤。 |