某内部渗透比赛复盘
字数 4802 2025-11-07 08:41:54

某内部渗透测试竞赛全流程技术复盘与教学

文档说明:本文档旨在对一次综合性的内部渗透测试竞赛进行技术复盘,将参赛者的笔记整理成系统性的教学材料。内容涵盖了从外网入口点获取、权限提升、内网横向移动、到最终获取所有Flag的完整过程。每个步骤都包含漏洞原理、利用方法和关键命令,是学习现代网络渗透技术的优秀案例。

一、 环境概览与攻击路径总览

本次竞赛模拟了一个复杂的企业内网环境,包含多个网段:

  • 入口网段10.10.10.*
  • 内部网段A192.168.10.* (通过VPN接入)
  • 内部网段B192.168.30.* (深度内网)

攻击路径可以概括为:

  1. 突破边界:从外网入口机 (10.10.10.xx) 利用Spring Boot Actuator未授权访问漏洞获取初始立足点。
  2. 内网横向移动:以入口机为跳板,扫描10.10.10.0/24网段,攻击多个内部服务。
  3. 穿透VPN:在内部服务器上获取VPN配置文件,接入更核心的192.168.10.0/24网段。
  4. 深度渗透:在192.168.10.0/24网段获取关键源代码,反向利用于其他系统,并进一步搭建隧道进入最内层的192.168.30.0/24网段。
  5. 终极目标:在最内网网段通过数据库漏洞、UDF提权、主从复制等多种技术获取最终权限。

二、 分阶段详细技术解析

阶段一:外网突破 (入口机 - 10.10.10.xx)

1. 信息收集与Flag1获取

  • 技术点: 最基本的Web信息收集。
  • 操作: 访问入口机Web服务,右键查看网页源代码。
  • 结果: 在源代码中直接发现Flag1。这提示我们,任何看似简单的地方都可能存在关键信息。

2. 关键漏洞利用 - Spring Boot Actuator堆转储泄露

  • 漏洞原理: Spring Boot Actuator是一个用于监控和管理应用的生产级功能模块。如果配置不当(如未设置访问认证),攻击者可以访问其众多端点,其中 /actuator/heapdump 会生成当前JVM的内存堆转储文件。该文件包含应用运行时的大量敏感信息,如数据库连接密码、加密密钥、用户会话等。
  • 操作
    1. 直接访问URL: http://<入口机IP>/actuator/heapdump,下载生成的 .hprof 文件。
    2. 使用专业工具(如Eclipse MAT, JVisualVM)分析该堆转储文件。
  • 结果
    • 成功从内存中提取出 Shiro框架的加密密钥。Apache Shiro是一个Java安全框架,其RememberMe功能使用AES加密,如果密钥泄露,攻击者可以伪造任何用户的Cookie,实现身份认证绕过。
    • 同时获得了数据库等组件的凭证。

3. 权限维持 - 内存马注入

  • 技术点: 内存马(Memory Shell)是一种无文件落地的新型Webshell技术。它将恶意后门代码直接注入到Web服务器(如Tomcat, Jetty)的运行内存中,从而实现对服务器的控制。重启后失效,但极难被传统安全设备检测。
  • 操作
    1. 利用泄露的Shiro密钥,构造恶意RememberMe Cookie,通过Shiro反序列化漏洞执行代码。
    2. 将内存马(如Filter型、Servlet型、Controller型内存马)注入到目标应用中。
    3. 使用哥斯拉 等支持内存马管理的Webshell管理工具进行连接。
  • 结果: 获得了一个稳定的、无需写入文件系统的Webshell控制权限。

4. Flag2与Flag4获取

  • 操作: 通过已获得的Webshell,在服务器文件系统上进行探索。
  • 结果
    • 在网站根目录下找到 Flag2
    • 在根目录下的 start.sh 脚本中,发现了root用户的凭据(用户名/密码)和 Flag4
    • 替代方案: 使用从堆转储中泄露的数据库凭证直接登录数据库,也能查询到Flag4。

阶段二:内网横向移动 (10.10.10.0/24)

1. 网络探测与隧道搭建

  • 挑战: 入口机可能缺乏基本的网络探测命令(如 ifconfig, ip addr)。
  • 解决方案
    1. 利用哥斯拉自带的“命令执行”或“文件管理”功能,上传轻量级的内网扫描工具,如 fscan
    2. 使用工具进行存活主机和端口扫描。
  • 关键命令(fscan示例):
    ./fscan -h 10.10.10.1/24
    

2. 攻击目标1 - 10.10.10.34

  • 发现: 该主机存在类似漏洞。
  • 挑战: 打入内存马后无法连接。
  • 分析与利用
    1. 判断其使用了Spring Boot默认的 secret.key 进行JWT签名。
    2. JWT是一种用于创建访问令牌的开放标准。如果签名密钥薄弱或泄露,攻击者可以伪造令牌身份。
    3. 使用专门的JWT攻击工具(如 jwt_tool)进行密钥爆破或伪造。
  • 结果: 成功伪造JWT Token,获取系统权限,并找到 Flag3

3. 攻击目标2 - 10.10.10.78

  • 信息收集: 发现该服务使用了Druid数据库连接池。
  • 漏洞利用: Druid的监控页面可能泄露敏感信息。检查配置文件 application-druid.yml
  • 结果: 在该配置文件中直接找到了数据库的用户名和密码。
  • 操作: 使用获得的凭证连接数据库。
  • 结果: 在数据库中查询到 Flag5

4. 权限提升 - Flag6获取 (UDF提权)

  • 技术点: UDF提权是利用MySQL数据库的功能,通过编写一个自定义函数(UDF),并将其共享库文件(.so或.dll)植入系统,从而以数据库进程(通常是高权限的mysqlroot用户)身份执行系统命令。
  • 操作尝试1(失败): 使用自动化工具MDUT直接攻击,但遇到报错。
  • 操作尝试2(成功)
    1. 使用 Metasploit Frameworkexploit/multi/mysql/mysql_udf_payload 模块。
    2. 配置好数据库连接信息后,执行攻击。虽然可能没有直接返回Shell,但恶意 .so 文件被成功写入数据库插件目录。
    3. 由于靶机出网,直接使用MSF生成反向Shell的Payload,通过UDF执行该Payload。
  • 关键命令(MSF):
    use exploit/multi/mysql/mysql_udf_payload
    set rhosts 10.10.10.78
    set username <数据库用户名>
    set password <数据库密码>
    exploit
    
  • 结果: 成功获得一个反向连接的高权限Shell,并在系统上找到 Flag6

阶段三:深入核心内网 (192.168.10.0/24)

1. VPN接入与路由配置

  • 关键资产: 在 10.10.10.34 上找到了一个VPN客户端配置文件(如 .ovpn 文件)。
  • 操作
    1. 下载该VPN配置文件到攻击者本地机器。
    2. 使用OpenVPN连接该VPN: sudo openvpn client.ovpn
    3. 连接后,手动添加路由,使攻击机能够路由到 192.168.10.0/24 网段。
  • 关键命令(Linux添加路由):
    sudo ip route add 192.168.10.0/24 dev <VPN创建的虚拟网卡,如tun0>
    

2. 目标 - 192.168.10.100 (Flag7)

  • 信息关联: 在入口机的数据库中发现了一个加盐的Hash值。在入口机根目录下发现了 ruoyi-admin.jar(若依后台管理系统)。
  • 技术点: 代码审计与密码破解。
  • 操作
    1. 使用JD-GUI等工具反编译 ruoyi-admin.jar
    2. 审计源代码,分析其密码加密逻辑。复盘记录中提及加密方式为 md5(login_name + passwd + salt)
    3. 根据此逻辑,编写脚本生成特定用户的密码字典。
    4. 使用Hashcat或John the Ripper等工具,利用生成的字典进行爆破。
  • 结果: 成功破解Hash,获得某个系统的有效凭证,进而获取 Flag7

3. 目标 - 192.168.10.21 (Flag8)

  • 发现: 该主机存在FTP服务,并且凭证泄露。
  • 操作: 使用泄露的凭证登录FTP,下载了三个文件,其中包括 web.zip(工资查询系统源代码)。
  • 结果: 获得 Flag8

4. 代码审计与RCE - 10.10.10.56 (Flag9)

  • 漏洞挖掘: 对下载的 web.zip 进行代码审计。在 TbadminController.php 中发现危险函数 shell_exec 被直接用于执行用户输入,且无任何过滤。
  • 漏洞利用: 使用管道符 | 或分号 ; 绕过可能的简单限制,执行系统命令。
  • POC示例:
    http://10.10.10.56/vuln.php?cmd=; whoami
    
  • 结果: 成功实现远程代码执行,获取 Flag9

阶段四:终极内网突破 (192.168.30.0/24)

1. 目标 - 10.10.10.200 (Flag10 & Flag11)

  • 操作: 利用已知漏洞获取Webshell,但写入的Webshell连接不稳定。
  • 解决方案: 手动编写一个简单的Webshell并编码(如Base64),然后通过RCE漏洞解码写入。
  • 结果: 在根目录下找到 Flag10Flag11

2. 目标 - 192.168.30.22 (Flag12)

  • 操作: 常规渗透,获得系统凭据。
  • 结果: 使用凭据登录系统,找到 Flag12

3. 目标 - 192.168.30.65 (Flag13 & Flag14)

  • 信息泄露: 在Nacos(一个动态服务发现、配置和管理平台)的 application-druid.yml 配置文件中,发现了Redis数据库的凭据。
  • Redis漏洞利用 - 主从复制RCE:
    • 原理: 攻击者将自己的Redis服务器设置为目标Redis的从库。然后将一个恶意的 .so 模块文件内容通过主从复制同步到目标Redis,并加载该模块,从而实现RCE。
    • 操作: 使用工具如 redis-rogue-serverRedisModulesRCE 进行自动化攻击。
    • 挑战: 复盘中提到此方法未成功,可能是靶机环境限制。这体现了渗透测试中技术尝试的多样性。
  • 结果: 获得 Flag13。Flag14(主从复制)未成功。

4. 目标 - 192.168.30.75 (Flag15)

  • 密码学挑战: 从FTP下载的文件中有一个 LittleSecret.py 脚本,这是一个自定义的加密/解密算法。
  • 操作
    1. 分析 LittleSecret.py 的加密逻辑。
    2. 编写对应的解密脚本,或将代码喂给AI辅助生成解密脚本。
  • 结果: 成功解密出字符串 Z%Qb2$h@sazKEn#,此即为最终的 Flag15

三、 总结与核心知识点

本次竞赛复盘涵盖了现代渗透测试的绝大部分核心技术:

  1. 信息收集是基石: 源代码、配置文件、堆转储文件都是信息金矿。
  2. 漏洞利用链思维: 一个漏洞点的突破往往是为下一个漏洞利用创造条件(如:通过A漏洞获取B系统的密码)。
  3. 多种Web漏洞: 未授权访问、反序列化、命令注入、配置错误等。
  4. 权限提升技术: UDF提权是数据库类提权的重要方式。
  5. 内网穿透技术: 代理、隧道、VPN的配置与使用。
  6. 代码审计能力: 快速从源代码中定位安全漏洞。
  7. 密码学与破解: 分析加密逻辑,进行针对性爆破或解密。
  8. 工具熟练度: 熟练使用fscan、哥斯拉、Metasploit、MDUT、JWT工具等是效率的保证。
  9. ** persistence**: 内存马等高级持久化手段。

希望这份详尽的教学文档能帮助您系统地理解整个渗透测试流程。每个技术点都可以作为专题进行更深入的学习和研究。

某内部渗透测试竞赛全流程技术复盘与教学 文档说明 :本文档旨在对一次综合性的内部渗透测试竞赛进行技术复盘,将参赛者的笔记整理成系统性的教学材料。内容涵盖了从外网入口点获取、权限提升、内网横向移动、到最终获取所有Flag的完整过程。每个步骤都包含漏洞原理、利用方法和关键命令,是学习现代网络渗透技术的优秀案例。 一、 环境概览与攻击路径总览 本次竞赛模拟了一个复杂的企业内网环境,包含多个网段: 入口网段 : 10.10.10.* 内部网段A : 192.168.10.* (通过VPN接入) 内部网段B : 192.168.30.* (深度内网) 攻击路径可以概括为: 突破边界 :从外网入口机 ( 10.10.10.xx ) 利用Spring Boot Actuator未授权访问漏洞获取初始立足点。 内网横向移动 :以入口机为跳板,扫描 10.10.10.0/24 网段,攻击多个内部服务。 穿透VPN :在内部服务器上获取VPN配置文件,接入更核心的 192.168.10.0/24 网段。 深度渗透 :在 192.168.10.0/24 网段获取关键源代码,反向利用于其他系统,并进一步搭建隧道进入最内层的 192.168.30.0/24 网段。 终极目标 :在最内网网段通过数据库漏洞、UDF提权、主从复制等多种技术获取最终权限。 二、 分阶段详细技术解析 阶段一:外网突破 (入口机 - 10.10.10.xx ) 1. 信息收集与Flag1获取 技术点 : 最基本的Web信息收集。 操作 : 访问入口机Web服务,右键查看网页源代码。 结果 : 在源代码中直接发现 Flag1 。这提示我们,任何看似简单的地方都可能存在关键信息。 2. 关键漏洞利用 - Spring Boot Actuator堆转储泄露 漏洞原理 : Spring Boot Actuator是一个用于监控和管理应用的生产级功能模块。如果配置不当(如未设置访问认证),攻击者可以访问其众多端点,其中 /actuator/heapdump 会生成当前JVM的内存堆转储文件。该文件包含应用运行时的大量敏感信息,如数据库连接密码、加密密钥、用户会话等。 操作 : 直接访问URL: http://<入口机IP>/actuator/heapdump ,下载生成的 .hprof 文件。 使用专业工具(如Eclipse MAT, JVisualVM)分析该堆转储文件。 结果 : 成功从内存中提取出 Shiro框架的加密密钥 。Apache Shiro是一个Java安全框架,其RememberMe功能使用AES加密,如果密钥泄露,攻击者可以伪造任何用户的Cookie,实现身份认证绕过。 同时获得了数据库等组件的凭证。 3. 权限维持 - 内存马注入 技术点 : 内存马(Memory Shell)是一种无文件落地的新型Webshell技术。它将恶意后门代码直接注入到Web服务器(如Tomcat, Jetty)的运行内存中,从而实现对服务器的控制。重启后失效,但极难被传统安全设备检测。 操作 : 利用泄露的Shiro密钥,构造恶意RememberMe Cookie,通过Shiro反序列化漏洞执行代码。 将内存马(如Filter型、Servlet型、Controller型内存马)注入到目标应用中。 使用 哥斯拉 等支持内存马管理的Webshell管理工具进行连接。 结果 : 获得了一个稳定的、无需写入文件系统的Webshell控制权限。 4. Flag2与Flag4获取 操作 : 通过已获得的Webshell,在服务器文件系统上进行探索。 结果 : 在网站根目录下找到 Flag2 。 在根目录下的 start.sh 脚本中,发现了root用户的凭据(用户名/密码)和 Flag4 。 替代方案 : 使用从堆转储中泄露的数据库凭证直接登录数据库,也能查询到Flag4。 阶段二:内网横向移动 ( 10.10.10.0/24 ) 1. 网络探测与隧道搭建 挑战 : 入口机可能缺乏基本的网络探测命令(如 ifconfig , ip addr )。 解决方案 : 利用哥斯拉自带的“命令执行”或“文件管理”功能,上传轻量级的内网扫描工具,如 fscan 。 使用工具进行存活主机和端口扫描。 关键命令(fscan示例) : 2. 攻击目标1 - 10.10.10.34 发现 : 该主机存在类似漏洞。 挑战 : 打入内存马后无法连接。 分析与利用 : 判断其使用了Spring Boot默认的 secret.key 进行JWT签名。 JWT是一种用于创建访问令牌的开放标准。如果签名密钥薄弱或泄露,攻击者可以伪造令牌身份。 使用专门的JWT攻击工具(如 jwt_tool )进行密钥爆破或伪造。 结果 : 成功伪造JWT Token,获取系统权限,并找到 Flag3 。 3. 攻击目标2 - 10.10.10.78 信息收集 : 发现该服务使用了Druid数据库连接池。 漏洞利用 : Druid的监控页面可能泄露敏感信息。检查配置文件 application-druid.yml 。 结果 : 在该配置文件中直接找到了数据库的用户名和密码。 操作 : 使用获得的凭证连接数据库。 结果 : 在数据库中查询到 Flag5 。 4. 权限提升 - Flag6获取 (UDF提权) 技术点 : UDF提权是利用MySQL数据库的功能,通过编写一个自定义函数(UDF),并将其共享库文件(.so或.dll)植入系统,从而以数据库进程(通常是高权限的 mysql 或 root 用户)身份执行系统命令。 操作尝试1(失败) : 使用自动化工具 MDUT 直接攻击,但遇到报错。 操作尝试2(成功) : 使用 Metasploit Framework 的 exploit/multi/mysql/mysql_udf_payload 模块。 配置好数据库连接信息后,执行攻击。虽然可能没有直接返回Shell,但恶意 .so 文件被成功写入数据库插件目录。 由于靶机出网,直接使用MSF生成反向Shell的Payload,通过UDF执行该Payload。 关键命令(MSF) : 结果 : 成功获得一个反向连接的高权限Shell,并在系统上找到 Flag6 。 阶段三:深入核心内网 ( 192.168.10.0/24 ) 1. VPN接入与路由配置 关键资产 : 在 10.10.10.34 上找到了一个VPN客户端配置文件(如 .ovpn 文件)。 操作 : 下载该VPN配置文件到攻击者本地机器。 使用OpenVPN连接该VPN: sudo openvpn client.ovpn 。 连接后,手动添加路由,使攻击机能够路由到 192.168.10.0/24 网段。 关键命令(Linux添加路由) : 2. 目标 - 192.168.10.100 (Flag7) 信息关联 : 在入口机的数据库中发现了一个加盐的Hash值。在入口机根目录下发现了 ruoyi-admin.jar (若依后台管理系统)。 技术点 : 代码审计与密码破解。 操作 : 使用JD-GUI等工具反编译 ruoyi-admin.jar 。 审计源代码,分析其密码加密逻辑。复盘记录中提及加密方式为 md5(login_name + passwd + salt) 。 根据此逻辑,编写脚本生成特定用户的密码字典。 使用Hashcat或John the Ripper等工具,利用生成的字典进行爆破。 结果 : 成功破解Hash,获得某个系统的有效凭证,进而获取 Flag7 。 3. 目标 - 192.168.10.21 (Flag8) 发现 : 该主机存在FTP服务,并且凭证泄露。 操作 : 使用泄露的凭证登录FTP,下载了三个文件,其中包括 web.zip (工资查询系统源代码)。 结果 : 获得 Flag8 。 4. 代码审计与RCE - 10.10.10.56 (Flag9) 漏洞挖掘 : 对下载的 web.zip 进行代码审计。在 TbadminController.php 中发现危险函数 shell_exec 被直接用于执行用户输入,且无任何过滤。 漏洞利用 : 使用管道符 | 或分号 ; 绕过可能的简单限制,执行系统命令。 POC示例 : 结果 : 成功实现远程代码执行,获取 Flag9 。 阶段四:终极内网突破 ( 192.168.30.0/24 ) 1. 目标 - 10.10.10.200 (Flag10 & Flag11) 操作 : 利用已知漏洞获取Webshell,但写入的Webshell连接不稳定。 解决方案 : 手动编写一个简单的Webshell并编码(如Base64),然后通过RCE漏洞解码写入。 结果 : 在根目录下找到 Flag10 和 Flag11 。 2. 目标 - 192.168.30.22 (Flag12) 操作 : 常规渗透,获得系统凭据。 结果 : 使用凭据登录系统,找到 Flag12 。 3. 目标 - 192.168.30.65 (Flag13 & Flag14) 信息泄露 : 在Nacos(一个动态服务发现、配置和管理平台)的 application-druid.yml 配置文件中,发现了Redis数据库的凭据。 Redis漏洞利用 - 主从复制RCE : 原理 : 攻击者将自己的Redis服务器设置为目标Redis的从库。然后将一个恶意的 .so 模块文件内容通过主从复制同步到目标Redis,并加载该模块,从而实现RCE。 操作 : 使用工具如 redis-rogue-server 或 RedisModulesRCE 进行自动化攻击。 挑战 : 复盘中提到此方法未成功,可能是靶机环境限制。这体现了渗透测试中技术尝试的多样性。 结果 : 获得 Flag13 。Flag14(主从复制)未成功。 4. 目标 - 192.168.30.75 (Flag15) 密码学挑战 : 从FTP下载的文件中有一个 LittleSecret.py 脚本,这是一个自定义的加密/解密算法。 操作 : 分析 LittleSecret.py 的加密逻辑。 编写对应的解密脚本,或将代码喂给AI辅助生成解密脚本。 结果 : 成功解密出字符串 Z%Qb2$h@sazKEn# ,此即为最终的 Flag15 。 三、 总结与核心知识点 本次竞赛复盘涵盖了现代渗透测试的绝大部分核心技术: 信息收集是基石 : 源代码、配置文件、堆转储文件都是信息金矿。 漏洞利用链思维 : 一个漏洞点的突破往往是为下一个漏洞利用创造条件(如:通过A漏洞获取B系统的密码)。 多种Web漏洞 : 未授权访问、反序列化、命令注入、配置错误等。 权限提升技术 : UDF提权是数据库类提权的重要方式。 内网穿透技术 : 代理、隧道、VPN的配置与使用。 代码审计能力 : 快速从源代码中定位安全漏洞。 密码学与破解 : 分析加密逻辑,进行针对性爆破或解密。 工具熟练度 : 熟练使用fscan、哥斯拉、Metasploit、MDUT、JWT工具等是效率的保证。 ** persistence** : 内存马等高级持久化手段。 希望这份详尽的教学文档能帮助您系统地理解整个渗透测试流程。每个技术点都可以作为专题进行更深入的学习和研究。