简单的 Python 辅助工具,用于探测 Fortinet/FortiWeb 目标上的 fwbcgi 认证绕过模式,该模式由 watchTowr Labs 报告。情报和请求详情来自:https://labs.watchtowr.com/when-the-impersonation-function-gets-used-to-impersonate-users-fortinet-fortiweb-auth-bypass/
python3 scanner.py http://192.168.9.1:80
python3 scanner.py -f targets.txt --find-forti --follow-redirects
目标必须显式包含协议(http:// 或 https://)。如果省略端口,扫描器默认为 HTTP 使用 80,HTTPS 使用 443。每个目标输出一行,带有 [+] VULNERABLE、[+] MAY BE VULNERABLE、[+] PATCHED、[+] POSSIBLY PATCHED 或 [-] INDETERMINATE;可选地高亮包含“forti”的词语。
targets:命令行中的一个或多个 <scheme>://<host>[:<port>] 条目(端口默认为 HTTP 的 80 或 HTTPS 的 443)。-f/--targets-file:从文件中读取额外目标;格式同上 <scheme>://<host>[:<port>]。--timeout:套接字超时秒数(默认 5)。--find-forti:打印响应正文中出现的包含“forti”的唯一令牌。--follow-redirects:对发出 30x 响应的目标选择性地处理重定向。--max-redirects:当 --follow-redirects 激活时的重定向跳数限制(默认 3,0 表示即使指定了该标志也不跟随)。由于缺乏良好的测试基础设施,以下是我使用的简单测试套件。
PYTHONPYCACHEPREFIX=./.pycache python3 -m unittest discover -s tests
扫描器依赖 TLS 1.2+ 支持来与现代 Fortinet 或 Cloudflare 前端站点通信。请确保您运行的 python3 链接了较新的 OpenSSL 版本:
/usr/bin/python3)绑定的是 LibreSSL 2.8,无法协商 TLS 1.3,会导致 TLSV1_ALERT_PROTOCOL_VERSION 错误。通过 Homebrew(brew install python)或 pyenv 安装最新的解释器,并使用该二进制文件运行扫描器(例如 /opt/homebrew/bin/python3)。python3 - <<'PY'\nimport ssl; print(ssl.OPENSSL_VERSION)\nPY 验证。如果报告的是更旧的版本,请安装更新的 Python(pyenv、发行版 backports 等)。ssl.OPENSSL_VERSION 片段再次检查。如果您必须在较旧的解释器上运行,则需要 TLS 1.3 的 HTTPS 目标将会失败;HTTP 目标始终可以正常工作。
--validate-tls:强制对 HTTPS 目标和重定向进行证书验证(默认行为跳过验证以避免因自签名证书而阻塞)。--workers:通过 asyncio 运行的并发扫描数量(默认 10)。--user-agent:自定义 HTTP User-Agent 头(默认 fwbcgi-scanner/1.0)。--csv-output:将 <target>,<classification> 行写入指定的 CSV 文件(同时输出到控制台)。