飞塔防火墙漏洞深度利用及调试环境搭建
字数 2113 2025-08-29 22:41:24
飞塔防火墙漏洞深度利用及调试环境搭建指南
1. 环境搭建
1.1 虚拟机准备
- 从官方下载FortiGate-VM镜像
- 导入到虚拟化平台(VMware等)
- 参考脚本进行激活: fgt-gadgets
1.2 网络配置
- 设置第一个网卡为NAT模式
- 配置网卡IP地址
- 完成配置后可通过Web界面访问
1.3 SSL VPN配置
- 启用SSL VPN功能
- 配置SSLVPN地址和子网
- 创建新用户
- 修改VPN门户设置:
- 进入
VPN -> SSL-VPN-Portals -> full-access - 修改相关设置
- 进入
- 调整防火墙策略
- 测试访问4433端口
2. 调试环境搭建
2.1 固件提取
- 安装libguestfs工具集(用于访问虚拟机磁盘映像)
- 查看磁盘分区情况
- 挂载磁盘(建议在VMware中直接挂载)
- 提取rootfs.gz(文件系统压缩包)
- 赋权并解压rootfs.gz
2.2 工具准备
-
Busybox准备:
- 提供完整shell指令(FortiGate自带shell功能有限)
- 编译可能遇到问题,建议多尝试几个版本
- 配置时去掉Networking Utilities中的tc功能
-
gdbserver配置:
- 利用
diagnose hardware smartctl执行路径 - 替换/bin/smartctl为自定义程序
- 复用22端口为shell
- 利用
2.3 内核修改
- 反编译内核文件flatkc
- 分析启动流程(主要关注init文件)
- Patch init文件:
- 修改所有涉及do_halt函数的调用
- 重打包文件系统
- 覆盖原始rootfs.gz
2.4 调试技巧
- 系统可能不断重启(因身份验证失败)
- 调试策略:
- 不要直接点击"继续"按钮
- 从最早的点开始断点
- 逐步接近目标断点位置
- 关键调试命令:
ni单步执行set $rax=0修改寄存器值c继续执行
3. 漏洞分析
3.1 漏洞描述
- 类型: 基于堆的缓冲区溢出(CWE-122)
- 影响版本:
- FortiOS SSL-VPN:
- 7.2.0-7.2.2
- 7.0.0-7.0.8
- 6.4.0-6.4.10
- 6.2.0-6.2.11
- 6.0.15及更早
- FortiProxy SSL-VPN:
- 7.2.0-7.2.1
- 7.0.7及更早
- FortiOS SSL-VPN:
- 影响: 远程未认证攻击者可执行任意代码
3.2 攻击思路比较
-
system() vs exec():
- system()创建新进程并等待返回
- exec()用新进程覆盖原进程
- system()返回值不影响原进程
- exec()返回值影响原进程
-
无/bin/sh环境下的攻击选择:
- 下载编译好的busybox(推荐)
- 通过ROP上传执行文件(文件大易崩溃)
3.3 ROP链构造难点
- gadget不足且不能破坏已有参数
- ROP链长度限制
- 长字符串参数(如IP地址)处理困难
- 数组传参导致ROP链复杂
4. 漏洞利用实战
4.1 基础利用
- 使用mprotect开启可执行段:
- 需要控制rdi、rsi、rdx三个寄存器
- 查找合适gadget
- 通过jmp rsp跳转到shellcode
4.2 Shellcode编写
- 空间限制约0xc0字节
- 解决方案:
- 迁移RIP到0x620+8位置
- 使用lea rax, [rip + 0x69]扩展空间
- 示例功能:
- 通过execl执行tftp下载
- 参数传递注意事项:
- 超过8字节需分段传递
- 注意参数顺序和NULL终止
4.3 权限问题解决
- 直接上传busybox到/bin失败原因:
- 权限不足
- 缺少库文件
- 替代方案:
- 上传到/tmp目录
- 通过其他方式提权
4.4 Node.js利用方案
- 发现FortiGate内置Node.js
- 优势:
- 可执行.js文件
- 有修改文件权限的函数
- 攻击流程:
- 下载shell.js
- shell.js功能:
- 下载busybox
- 赋权
- 创建shell软链
- 调用busybox命令
- 预编译busybox资源:
4.5 反弹Shell实现
- 通过Node.js渲染执行:
- 下载busybox
- 赋权
- 建立反弹连接
- js文件示例内容:
// 下载busybox // 赋权 // 建立shell
5. 完整攻击流程
-
初始访问:
- 通过SSL VPN漏洞获得初步执行能力
-
环境准备:
- 上传busybox或利用Node.js方案
- 解决权限问题
-
持久化:
- 创建可持续访问的后门
- 可能包括:
- 修改系统文件
- 创建隐藏账户
- 设置定时任务
-
横向移动:
- 利用获取的权限探索内网
- 可能结合其他漏洞扩大影响
-
清理痕迹:
- 删除日志记录
- 隐藏上传的文件
6. 防御建议
- 及时更新到最新版本
- 限制SSL VPN访问源IP
- 监控异常网络行为
- 定期审计系统配置
- 实施最小权限原则
7. 总结
本指南详细介绍了FortiGate防火墙漏洞的利用过程,从环境搭建到漏洞利用,涵盖了多种攻击路径和解决方案。重点包括:
- 调试环境的特殊处理
- 无完整shell环境下的攻击思路
- ROP链构造的挑战与解决方案
- Node.js在漏洞利用中的巧妙应用
- 完整攻击链的构建
这些技术不仅适用于FortiGate设备,其思路也可应用于其他受限环境下的漏洞利用场景。