飞塔 FortiGate 7.4.1 格式化字符串漏洞

新发布格式化字符串命令执行
2026-09-02 12:50
5316

1、下载飞塔 FortiGate 7.4.1 的 VM 虚拟机镜像

图片.png
第一步、下载完解压放到 linux 虚拟机里
把 vmdk 这种 "VMware 专有包装格式" 变成 Linux 标准工具能直接读的 "裸盘镜像"
执行命令:qemu-img convert -f vmdk -O raw fortios.vmdk fortios.raw

图片.png
第二步、查看看分区表
执行命令:fdisk -l fortios.raw

图片.png
第三步、抠出分区 fortios.raw1 ,起始扇区 2048、长度 524288 扇区正好是 256MB
执行命令:dd if=fortios.raw of=fortios_p1.ext2 bs=512 skip=2048 count=524288

图片.png
第四步、从分区 fortios.raw1 里 dump 内核和加密的 rootfs
执行命令:
mkdir FORTIOS741
debugfs -R "dump /flatkc FORTIOS741/flatkc" fortios_p1.ext2
debugfs -R "dump /rootfs.gz FORTIOS741/rootfs.gz" fortios_p1.ext2
debugfs -R "dump /flatkc.chk FORTIOS741/flatkc.chk" fortios_p1.ext2
debugfs -R "dump /rootfs.gz.chk FORTIOS741/rootfs.gz.chk" fortios_p1.ext2
第五步、tail 抠出 gzip 流再解压
flatkc 是 bzImage(MZ 引导头 + setup 段 + 内层 gzip 流)
gzip 流不在文件开头,而在偏移 0x41b4
然后 kernel_741.gz 开头才是 1f 8b 方能解压了
把 seed 从内核 ELF 里抠出来(48 字节)
执行命令:

tail -c +$((0x41b4 + 1)) FORTIOS741/flatkc > kernel_741.gz

gzip -d -c kernel_741.gz > kernel_741.elf
dd if=kernel_741.elf of=seed.bin bs=1 skip=$((0x19952e0)) count=48
xxd seed.bin

图片.png
第六步、/dev/zero 是内核提供的一个 "特殊设备文件"
从它里面读数据,它永远返回 0x00 字节,要多少给多少
再用 chacha_dec.py 去解密生成两个文件 rootfs_741.decrypted(重要)、pub_key_741.der
执行命令:
dd if=/dev/zero of=enc_pub_key.bin bs=1 count=270
python3 chacha_dec.py

图片.png
第七步、gzip 解出 cpio 归档
执行命令:
gzip -d -c rootfs_741.decrypted > rootfs_741.cpio
xxd rootfs_741.cpio | head -1

图片.png
第八步、cpio 解包
执行命令:
mkdir rootfs741
cd rootfs741
sudo cpio -idmv < ../rootfs_741.cpio

图片.png
第九步、解开里面的 tar.xz
严格说普通用户也能解,sudo su 主要是为了,保持文件属主是 root(和固件里一致)
普通用户(iotsec-zone)解包时,
没法把属主设回 root,解出来的文件就变成自己的:
-rwxr-xr-x 1 iotsec-zone iotsec-zone 12345 ... ← 属主变了

root 有权限执行 chown,
所以 tar 能把属主恢复成固件里记录的样子(root : root):
-rwxr-xr-x 1 root root 12345 ... ← 和固件一致
执行命令:
xz -d bin.tar.xz && tar -xvf bin.tar && r

试读结束,发布七天后转为公开

公开时间:2026年9月9日 12:50:27

提前解锁全文,需花费 50 积分

登录解锁全文
分享到

参与评论

0 / 200

全部评论 1

皮皮先生的头像
牛🤬
2026-09-02 18:54
投稿
签到
联系我们
关于我们