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 提取:
1 |
|
完成后就可以看到完整的目录:
http 服务在 /bin/httpsd
文件中,拖到 IDA 中。
cli 获取 shell
部分版本可以通过 cli 配置获取到 shell:
1 |
|
SQL 注入
watchtowr 是通过 7.6.3 和 7.6.4 diff 发现漏洞函数位于 get_fabric_user_by_token
函数中:
找调用的地方:
1 |
|
这里的 __isoc23_sscanf(v2, "Bearer %128s", &v4)
意思是获取 Bearer 后最多 128 个非空白字符,所以不能出现空格并且长度不能超过 128 个。
1 |
|
1 |
|
ap_hook_handler 是 Apache 中用于在模块中注册请求处理函数(handler)的钩子。
在 httpd.conf 中可以找到对应的 API 路径 /api/fabric/device/status
:
RCE
watchtowr 实现 RCE 的思路如下:
- 通过 MySQL into outfile 实现写 pth 文件
- 访问 ml-draw.py 触发 pth 文件执行
CGI
CGI 介绍:
Apache CGI 配置:
1 |
|
这个环境中 /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 如下:
1 |
|