现在只对常读和星标的公众号才展示大图推送,建议大家把潇湘信安“设为星标”,否则可能看不到了!
文章出自我们贝塔安全团队@Destiny(eth0)师傅,之前好像有发过一次,忘了啥原因给删了,重发一次!
Citrix Receiver简介
Citrix Receiver是一种轻便的通用软件客户端,并带有类似浏览器的可扩展“插件”架构。Receiver标配有多种可选插件,可在Citrix Delivery Center产品系列,如:XenApp、XenDesktop、Citrix Access Gateway和Branch Repeater中与前端基础设施进行通信。这些插件支持的功能包括在线和离线应用、虚拟桌面交付、安全访问控制、密码管理、应用加速、多媒体加速、 服务级监测以及语音通信。
0x00 前言
如果对Citrix receiver或者其他云桌面平台熟悉的话,那么本文才有其价值所在,否则就会认为是篇鸡肋文章。即便如此,依旧建议走马观花过一遍,缘分很奇妙,可能哪天你就会遇到这样的环境。
用户登陆平台点击对应的连接方式,即可在用户端打开服务器端上面的应用程序进行本地操作。
应用系统连接方式 主要是各类主流浏览器,如IE、火狐、Google Chrome等,可参考下图:

主机系统连接方式 主要是远程类终端进行登录,如:mstsc、Redmin、Putty、SecureCRT等。本文主要是利用应用系统映射的浏览器进行渗透。

0x01 浏览器利用
2.1 越权/SSRF
由于地址栏是可控的,且浏览器功能完整,因此可以通过修改已授权的应用系统地址去访问他人的系统。该漏洞可以认为是越权漏洞,又由于这些操作都是通过服务器请求完成的,因此也可归类为服务器端请求伪造(SSRF)。
此漏洞的危害点主要在于能越权访问他人系统,并可探测他人服务器的端口信息。但由于接入的系统通常都经过基线安全检查,弱口令几率较小,故该点较难直接用于入侵系统。
2.2 文件读取
文件读取主要利用 file 协议,可以读取服务器公共盘中的文件,如下图所示:

2.3 服务器端工具调用
服务器端工具调用主要利用了 火狐浏览器 对应用程序的处理方式。通过不断尝试,发现使用 telnet:/// 可以调用服务器上的应用程序(火狐可以调用应用程序,Google Chrome则可以调用telnet终端本身),如下图所示:

随后,通过翻阅火狐浏览器配置,发现其确实可以对特定协议(Content-Type)关联应用程序进行处理:


后续尝试发现,irc、ircs、webcal、mailto 等协议均有效,但此方法仅对火狐浏览器有效,如下图所示:

然而,服务器通常对自己的系统盘(如C盘)做了限制。虽然可以使用 file 协议读取C盘文件,但尝试调用C盘上的应用程序时,由于权限不足而失败,如下图所示:



如果直接调用本地磁盘上的应用程序,显然权限是不够的,否则所有客户端都可能被直接控制。调用失败的提示如下:

2.4 默认关联打开PowerShell
通过查看本地电脑的关联程序,发现 .psc1 扩展名文件默认关联了 PowerShell,如下图所示:

2.5 生成PSC1文件
.psc1 文件可以使用 Export-Console 命令生成。在PowerShell中执行 Export-Console F:\x.psc1 即可得到一个 .psc1 文件,如下图所示:

生成的 x.psc1 文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<PSConsoleFile ConsoleSchemaVersion="1.0">
<PSVersion>5.1.17134.858</PSVersion>
<PSSnapIns />
</PSConsoleFile>
由于本地生成的 .psc1 文件中配置的PowerShell版本过高,导致第一次未成功。通过将 <PSVersion> 修改为 3.0 后即可成功。修改后的文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<PSConsoleFile ConsoleSchemaVersion="1.0">
<PSVersion>3.0</PSVersion>
<PSSnapIns />
</PSConsoleFile>
2.5.1 火狐浏览器获取PowerShell
火狐浏览器可以直接通过 file:// 协议展示文件,单击文件即可打开并获取一个PowerShell会话,如下图所示:


为了证明此Shell会话是服务器端的而非本地的,特此截图(注意用户名为服务器上的用户名):

另外,还可以通过 telnet 等协议来调用本地的 .psc1 文件,从而获取服务器端的PowerShell。在文件浏览对话框中,虽然不会直接显示 .psc1 文件,但我们可以在文件名输入框中手动输入 x.psc1:




2.5.2 IE浏览器获取PowerShell
由于服务器的IE浏览器通常禁用了地址栏、鼠标右键、菜单及设置等功能,因此在本地IE浏览器进行测试。在地址栏中直接访问 .psc1 文件会提示下载,下载后打开可能会遇到安全警告:



2.5.3 Google Chrome浏览器获取PowerShell
在Google Chrome中,通过 file:// 协议点击文件下载,然后打开即可:


2.6 获取PowerShell之后
通过上述方法获取到PowerShell会话后,即可进行下一步的横向渗透或调用任意工具,同时也绕过了系统对C盘的限制,如下图所示:


注: 由于本案例中的系统是超重要系统,因此未进行下一步的提权操作!但可以自行探索或参考90sec社区的另一篇文章:CitrixReceiver平台的一次渗透测试【通过】 ,其链接为:
https://forum.90sec.com/t/topic/310
2.7 Firefox/Google浏览器SSRF内网端口扫描
使用Firefox或Google Chrome浏览器访问 telnet:///,第一个应用程序选项就是默认的Telnet终端:


打开链接即可进入Telnet终端。由于服务器做了限制,这里使用本地环境测试,成功打开并可以扫描端口:


0x02 修复建议
- 设置权限控制:对用户可访问的资产进行白名单限制,白名单之外的资产拒绝访问!
- 最小化原则:禁用不必要的浏览器功能,如禁用鼠标右键、不显示地址栏、不显示菜单栏等,这可以在Citrix Receiver的策略中配置。不过,此方法可能影响正常使用体验,需要根据实际业务权衡。
文章篇幅有限,以上仅为对Citrix Receiver浏览器端安全风险的一种渗透测试思路的剖析。安全攻防是一个持续对抗的过程,关键在于理解原理,举一反三。如果你对类似的漏洞利用、内网安全或服务器端请求伪造(SSRF)等技术话题有更多兴趣,欢迎到云栈社区参与讨论,与更多安全从业者交流学习。