可以在以下地址进行下载虚拟机镜像
https://fortiweb.ru/en/download/FortiGate/
下载 New deployment of xxxx 的 zip 压缩包,比如 FGT_VM64-v7.4.2.F-build2571-FORTINET.out.ovf.zip 解压之后双击 .ovf 文件,用 vmware station 导入虚拟机即可.
导入后将虚拟机网卡绑定到 NAT 网卡 (默认是物理桥接,理论上应该也没有问题).
启动后使用 admin + 空密码登录系统,按提示设置 admin 账户密码,然后给网卡配置 ip,以及允许访问的服务/端口,端口配置如下(NAT网段为 192.168.137.0/24)
如果访问WebUI发现需要联网激活(没有离线license),则仍需通过命令行让FortiGate能够访问Internet。
本例中默认网关设置为192.168.137.2
,并将port1
设置为互联网访问接口。请根据需要修改。
未授权时,FortiOS GUI 允许您使用 FortiCare 帐户凭据从 FortiCare 下载永久 VM 试用许可证。在 FortiGate VM 许可证页面中,对于“您将如何授权此 VM?”,选择“评估许可证”。
运行以下命令来检查永久虚拟机试用License是否有效:
开启sslvpn web管理
挂载.vmdk磁盘
使用getrootfskey.py从内核( flatkc)检索 ramdisk 加密密钥并解密rootfs.gz
解压bin.tar.xz以访问/bin/init二进制文件
修补/bin/init以禁用之前发现的完整性检查
将我们的工具部署到/bin
重新打包bin.tar.xz,替换为rootfs.gz
调试 FortiGate 内核以禁用 ramdisk 签名检查。
二进制程序位于虚拟机磁盘文件中,使用 vmware workstation (Linux 虚拟机)挂载 fortinet 虚拟机的磁盘文件,在虚拟机中挂载分区。
主要业务二进制位于 FORTIOS 分区的 rootfs.gz 打包文件中。
提取rootfs .gz
之后发现是一个加密的文件,对其进行解密,首先我们extlinux.conf
文件发现,其通过flatkc
加载rootfs .gz
,因此我们先使用vmlinux-to-elf去转换此文件。
使用getrootfskey.py获取加密种子
使用decrypt_rootfs和加密种子解密rootfs .gz,这样就完成的对rootfs .gz的解密,具体原理可以参考下面的链接。
先使用gzip解压解密的文件,然后在使用cpio解压文件。
为了添加自定义程序(固件)我们要patch固件的完整性检查,在/bin/init文件中。
修补之前
修补完成
为了获得合适的 shell,我们将使用嵌入式设备中经常遇到的流行工具:busybox。它将为我们提供与操作系统交互的基本 Unix 命令。我们将安装一个绑定 shell,其目的是将busybox连接到套接字,以便我们能够远程连接到 FortiGate。
然后下载busybox和gdbserver,最终我们得到下面的4个文件。把文件放入/bin进行重新打包
然后重新打包加密固件
卸载挂载,然后替换原来的磁盘文件。
打包完成后,直接进行内核调试,在fgt_verify_initrd
函数下断点,修改下面的r12d
寄存器为0就可以了。
通过这种方法可以重新打包固件获取root shell,但是这种方法有其局限性:每次重启系统都要进行内核调试,因此就有了下面的方法。
前面的提取解密和patch文件步骤都是一样的,只不过添加了一步修改内核来patch掉文件检测。
通过Catalpa
文章得知,我们知道linux内核在引导映像那个位置,以下就是我测试的FortiGate版本的内核信息。定位此段代码的特征码564889F748
。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2024-12-13 15:57
被l140w4n9编辑
,原因: