某内部渗透比赛复盘
字数 4802 2025-11-07 08:41:54
某内部渗透测试竞赛全流程技术复盘与教学
文档说明:本文档旨在对一次综合性的内部渗透测试竞赛进行技术复盘,将参赛者的笔记整理成系统性的教学材料。内容涵盖了从外网入口点获取、权限提升、内网横向移动、到最终获取所有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)分析该堆转储文件。
- 直接访问URL:
- 结果:
- 成功从内存中提取出 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示例):
./fscan -h 10.10.10.1/24
2. 攻击目标1 - 10.10.10.34
- 发现: 该主机存在类似漏洞。
- 挑战: 打入内存马后无法连接。
- 分析与利用:
- 判断其使用了Spring Boot默认的
secret.key进行JWT签名。 - JWT是一种用于创建访问令牌的开放标准。如果签名密钥薄弱或泄露,攻击者可以伪造令牌身份。
- 使用专门的JWT攻击工具(如
jwt_tool)进行密钥爆破或伪造。
- 判断其使用了Spring Boot默认的
- 结果: 成功伪造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。
- 使用 Metasploit Framework 的
- 关键命令(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文件)。 - 操作:
- 下载该VPN配置文件到攻击者本地机器。
- 使用OpenVPN连接该VPN:
sudo openvpn client.ovpn。 - 连接后,手动添加路由,使攻击机能够路由到
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(若依后台管理系统)。 - 技术点: 代码审计与密码破解。
- 操作:
- 使用JD-GUI等工具反编译
ruoyi-admin.jar。 - 审计源代码,分析其密码加密逻辑。复盘记录中提及加密方式为
md5(login_name + passwd + salt)。 - 根据此逻辑,编写脚本生成特定用户的密码字典。
- 使用Hashcat或John the Ripper等工具,利用生成的字典进行爆破。
- 使用JD-GUI等工具反编译
- 结果: 成功破解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漏洞解码写入。
- 结果: 在根目录下找到 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进行自动化攻击。 - 挑战: 复盘中提到此方法未成功,可能是靶机环境限制。这体现了渗透测试中技术尝试的多样性。
- 原理: 攻击者将自己的Redis服务器设置为目标Redis的从库。然后将一个恶意的
- 结果: 获得 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**: 内存马等高级持久化手段。
希望这份详尽的教学文档能帮助您系统地理解整个渗透测试流程。每个技术点都可以作为专题进行更深入的学习和研究。