CVE-2025-25257 FortiWeb SQL 注入漏洞
漏洞信息
CVE-2025-25257 FortiWeb SQL 注入漏洞
环境搭建
下载链接:https://dl.partian.co/FortiWeb/Version_7.00/7.6/7.6.3/ 默认凭证:admin 空 配置网络,这里修改适配器为 VMnet8 :
固件获取
vmdk 挂载
使用版本:7.6.3
使用一个 Linux 虚拟机挂载 vmdk 文件:

启动虚拟机就可以看到挂载的东西:
把 rootfs.gz 拿出来使用 binwalk 提取:
完成后就可以看到完整的目录:
http 服务在 /bin/httpsd 文件中,拖到 IDA 中。
cli 获取 shell
部分版本可以通过 cli 配置获取到 shell:
SQL 注入
watchtowr 是通过 7.6.3 和 7.6.4 diff 发现漏洞函数位于 get_fabric_user_by_token 函数中:
找调用的地方:
这里的 __isoc23_sscanf(v2, "Bearer %128s", &v4) 意思是获取 Bearer 后最多 128 个非空白字符,所以不能出现空格并且长度不能超过 128 个。
ap_hook_handler 是 Apache 中用于在模块中注册请求处理函数(handler)的钩子。
在 httpd.conf 中可以找到对应的 API 路径 /api/fabric/device/status:
RCE
watchtowr 实现 RCE 的思路如下: 1. 通过 MySQL into outfile 实现写 pth 文件 2. 访问 ml-draw.py 触发 pth 文件执行
CGI
CGI 介绍:
Apache CGI 配置:
这个环境中 /migadmin/cgi-bin/ 下还有一个 ml-draw.py 文件,同样也会被执行,可以通过 WEB 访问触发。
PTH
site-packages 中的 .pth 文件,文件中的任何一行以 import[SPACE] 或 import[TAB] 开头,后跟有效的 Python 代码,那么就会在启动的时候运行这个代码。
这里就是通过 mysql into outfile 写入 .pth 文件然后再访问 py 文件触发实现的 RCE,因为写一个 bash 的 cgi 还需要赋予权限所以只能借助 py 的 pth 实现。
绕过
在上面的 SQL 注入中有 空格+128字符的限制。 做法是分块写字符串到一个字段中,然后不断叠加最终完整,干净的 Payload 如下:
参考链接
- https://labs.watchtowr.com/pre-auth-sql-injection-to-rce-fortinet-fortiweb-fabric-connector-cve-2025-25257/
- https://mp.weixin.qq.com/s/FO0loFaE8c4KqBS3eDvalQ
- https://nosec.org/home/detail/4990.html













