给予调试启发以及固件文件提取启发的参考地址

CVE-2022-40684:防火墙身份认证绕过漏洞

格式化字符串漏洞学习地址:

【闭眼入坑】PWN题格式化字符串漏洞介绍_哔哩哔哩_bilibili

漏洞复现参考:

Fortinet FortiGate CVE-2024-23113 - A Super Complex Vulnerability In A Super Secure Appliance In 2024

调试模式

kali机器 192.168.206.162

Fortigate7.4.0 192.168.206.10

通过这些命令启动FGFM服务的调试

之后启动可视化管理页面 尝试连接不存在的FortigateManager 192.168.206.11

接下来尝试把POC打过去 再看下返回信息

结合POC逻辑 发送过去的测试POC内容如下:

format_string_payload = b"reply 200\r\nrequest=auth\r\nauthip=%n\r\n\r\n\x00"

切入点set_fgfm_sni

通过切入点 set_fgfm_sni 查找字符串

找到相应内容 后续即可结合这部分开始分析源代码

我们可以在IDA中通过搜索string,搜索FGFM的部分,可以找到如下内容

这个函数向上回溯 也就找到的漏洞所在的位置(或者我们参考的文章中也指出了漏洞的位置)

我们可以对比修复以后的漏洞的代码

很明显 这个位置补充了一个%s 用于避免格式化字符串的漏洞

snprintf函数的功能和相应的用法如下

补充一些关于格式化字符串的漏洞笔记

举例子:

int var = 0;
printf("Hello, world!%n", &var);
printf("Written: %d\n", var);

首先会输出Hello,world! 然后将字符数量13(包含\n)作为数字(4B长度内)写到var里。之后第三行会继续输出Written:13

结果如下:

Hello, world!Written: 13

之后我们分析一下这个函数sub_B0D9A0的功能到底是什么

感觉函数sub_B24690的调用,类似于从其中查找一些相关的配置等信息。比如fmg_fqdn,mgmtip和mgmtport端口等信息

协议逆向

接下来主要从这个协议开始分析。

按照参考 我们本地生成相应的ssl证书等

之后做文章中的一些复现操作 都可以成功获得结果

后续就是相应的Payload即可 完全一致 复现成功


 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐