freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

NetScaler ADC 和 NetScaler Gateway远程代码执行漏洞分析与复现
2024-11-22 18:52:56
所属地 广东省

CVE-2023-3519漏洞分析

影响范围

NetScaler ADC 和 NetScaler Gateway 13.1 < 13.1-49.13。
NetScaler ADC 和 NetScaler Gateway 13.0  < 13.0-91.13。
NetScaler ADC 13.1-FIPS < 13.1-37.159。
NetScaler ADC 12.1-FIPS < 12.1-55.297。
NetScaler ADC 12.1-NDcPP < 12.1-55.297。

二 分析背景

Citrix宣布Citrix ADC 和 Citrix Gateway 中存在未经身份验证的远程代码执行漏洞。(CVE-2023-3519)。
当前分析版本ADC 13.0-47.24。
nsppe这个可执行文件没有现代内存损坏缓解措施,例如 ASLR 或 DEP,这些措施目前已有 20 多年的历史。这意味着内存地址不会改变,并且我们可以直接从堆栈运行有效负载。

我们在使用网上公开的poc会发现,不是所有的Citrix ADC都可以使用,以msf为列。也只记录了四个版本,分别是13.1-48.47,13.0-91.12,12.1-65.25,12.1-64.17。那遇见存在漏洞,又没有对应poc的其他版本我们又该怎么处理呢?接下来就给大家讲一讲该漏洞利用的具体细节以及poc

三 需要工具

Ghidra,IDA,Citrix ADC13.0-47.24,python,X-Ways Forensics。
⦁ CVE-2023-3519漏洞分析
使用 Ghidra 对nsppe文件进行反编译。由于二进制文件太大,需要调整一些 Ghidra 反编译设置。我们将“编辑”->“工具选项”->“反编译器”下的反编译器资源增加到以下内容。
⦁ 缓存大小(功能):2048
⦁ 反编译器最大有效负载(MB):512
⦁ 反编译器超时(秒):900
⦁ 每个功能的最大指令数:3000000
反编译每个二进制文件后,为每个二进制文件生成一个BinExport Ghidra 扩展名的 BinDiff 文件。然后在 BinDiff 中对它们进行比较,我们开始查看更改的每个函数。对于大多数函数,我们没有直接在 BinDiff 中比较它们,而是从 Ghidra 中,获取函数的反编译代码,并进行文本比较。
找到ns_aaa_gwtest_get_event_and_target_names函数,在代码的修补版本中,看到了附加长度检查的内容。
跟踪ns_aaa_gwtest_get_event_and_target_names的调用过程,找到触发函数调用的url路径。

四 漏洞复现

1 获取nsppe

从服务器虚拟机中提取nsppe,通过“X-Ways Forensics”工具打开NSVPX-ESX-13.0-47.24_nc_64-disk1.vmdk,

2 提取nsppe

从虚拟机中看nsppe的路径是/netscaler/nsppe,但是实际在虚拟机磁盘vmdk文件中未找到这个文件。
新建一个磁盘test,查找磁盘,如下所示。

root@ns# ls /dev/ | grep da
da0   //第一块磁盘
da0p1
da0p2
da0p3
da1   //第二块磁盘
创建格式化分区,挂载分区。如下所示。
gpart create -s gpt da1 //创建GPT分区
gpart add -t freebsd-ufs -s 1G da1  //t代表type,s代表size
newfs -j /dev/da1 //格式化分区
mount /dev/da1 /mnt/test //挂载分区


使用cp /netscaler/nsppe /mnt/test/nsppe命令,拷贝nsppe到新建的磁盘分区。通过“X-Ways Forensics”工具打开NSVPX-ESX-13.0-47.24_nc_64_test.vmdk,提取nsppe。

3 IDA分析nsppe

使用IDA分析nsppe,ns_aaa_saml_url_decode。ns_aaa_gwtest_get_event_and_target_names(url > ?event=start&target=)(该函数对target查询参数进行 URL 解码,不进行长度检查)(未补丁版本存在栈溢出攻击, 补丁版本添加了长度检查)。ns_aaa_gwtest_get_valid_fsso_server(未补丁版本,栈溢出覆盖了ns_aaa_gwtest_get_valid_fsso_server的返回地址)。如图所示。
1731468568_67341d181883ea7a3b5e6.png!small?1731472800182
获取函数对应的url,ns_aaa_gwtest_handler(url -> /formssso),
ns_vpn_process_unauthenticated_request(url -> /gwtest/)。
编写溢出攻击对应的url。

https://192.168.1.225/gwtest/formssso?event=start&target=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

4 调试 Citrix NetScaler

禁用pitboss(“看门狗定时器”)。

root@ns# /netscaler/nspf nsppe-00 pbmonitor 0
nspf NSPPE-00 pbmonitor 0
Removing pitboss mo
# 漏洞 # 网络安全 # web安全 # 漏洞分析
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录