本仓库包含用于 Citrix NetScaler 设备的应急排查脚本:
iocitrix.py —— 一个 Dissect 脚本,用于对 Citrix NetScaler 镜像/目标进行应急排查。scan-citrix-netscaler-version.py —— 通过 HTTP(s) 扫描并识别 NetScaler 设备的版本。您可以使用此脚本通过 HTTP(s) 扫描并确定 Citrix NetScaler 设备的版本。 它还会根据版本判断该 NetScaler 是否容易受到特定 CVE 的攻击。
scan-citrix-netscaler-version.py如果您使用 pip,请按照以下步骤操作:
如果使用 uv,您可以直接运行该脚本:
使用示例:
$ python3 scan-citrix-netscaler-version.py 192.168.1.10 192.168.1.12
192.168.1.10 (*.local.domain) is running Citrix NetScaler version 13.1-51.15 (VULNERABLE)
192.168.1.12 (*.local.domain) is running Citrix NetScaler version 12.1-55.330 (NOT VULNERABLE)
或者以 JSON 格式获取结果:
$ python3 scan-citrix-netscaler-version.py https://192.168.1.11 --json | jq
{
"scanned_at": "2025-09-03T23:11:36.864228+00:00",
"target": "https://192.168.1.11",
"tls_names": "my-first-netscaler.local",
"rdx_en_stamp": 1702886392,
"rdx_en_dt": "2023-12-18T07:59:52+00:00",
"version": "12.1-55.302",
"error": null,
"vulnerable": {
"CVE-2025-5349": true,
"CVE-2025-5777": true,
"CVE-2025-6543": false,
"CVE-2025-7775": true,
"CVE-2025-7776": true,
"CVE-2025-8424": true
},
"is_vulnerable": true
}
还可以通过使用 --cve 标志将漏洞状态检查限制为特定的 CVE:
$ python3 scan-citrix-netscaler-version.py https://192.168.1.11 --cve CVE-2025-6543 --json | jq
{
"scanned_at": "2025-09-03T23:16:36.573016+00:00",
"target": "https://192.168.1.11",
"tls_names": "my-first-netscaler.local",
"rdx_en_stamp": 1702886392,
"rdx_en_dt": "2023-12-18T07:59:52+00:00",
"version": "12.1-55.302",
"error": null,
"vulnerable": {
"CVE-2025-6543": false
},
"is_vulnerable": false
}
要以 CSV 格式获取结果,只需使用 --csv 标志。
更多选项请参阅 --help。
您可以使用 iocitrix.py 在 NetScaler Dissect 目标上检查已知的入侵指标(IOC)。它会检查以下内容:
请注意,此脚本旨在针对 Citrix NetScaler 设备的取证磁盘镜像运行,而非在设备本身上运行。 另请参阅 创建 Citrix NetScaler 磁盘镜像 部分,了解如何为您的 Citrix NetScaler 创建取证磁盘镜像。
请确保您拥有最新版本的 Dissect,对 Citrix NetScaler 的支持已在此 PR 中添加:https://github.com/fox-it/dissect.target/pull/357
免责声明:虽然此工具力求准确,但仍可能产生误报或漏报。建议用户在根据此工具的输出做出任何决定之前,交叉核对结果并运用自己的判断。
iocitrix.py请按照以下步骤操作:
请注意,第 4 步会打印以下错误,但您可以忽略它:
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
然后您可以运行 iocitrix.py <TARGETS> 对一个或多个取证镜像启动 IOC 检查。该脚本接受 dissect 可以作为 Target 读取的任何输入,例如 .VMDK 或原始磁盘镜像。下面提供了一些示例。
python3 iocitrix.py image.vmx
python3 iocitrix.py image.vmdk
如果您还创建了 RAM 磁盘 的取证镜像,则可以按如下方式利用 iocitrix.py 将易失性数据纳入其应急排查中:
python3 iocitrix.py md0.img+image.vmx
python3 iocitrix.py md0.img+image.vmdk
python3 iocitrix.py md0.img+da0.img
+(加号)会将两个磁盘镜像作为单个 Dissect Target 加载。
Citrix NetScaler 会暴露两个重要的块设备,可以对其进行镜像以进行离线取证分析。这些块设备文件可以在以下路径找到:
/dev/md0:保存根(/)目录的磁盘。这是一个 RAM 磁盘/dev/da0:保存 /var 和 /flash 目录的磁盘。这是一个持久化磁盘。Citrix NetScaler 的根目录(/)是一个 RAM 磁盘,这意味着它是一个易失性磁盘。当 NetScaler 开机运行时,可以在 /dev/md0 找到该磁盘,而当 NetScaler 关机时该磁盘将不可用。/var 和 /flash 目录位于 /dev/da0 磁盘上,作为两个独立的分区,并且是持久化的。
以下命令可以在本地 Linux 机器上使用,通过 SSH 为您的 NetScaler 创建磁盘镜像:
/dev/da0 磁盘的镜像创建到您的本地机器local ~ $ ssh nsroot@<YOUR-NETSCALER-IP> shell dd if=/dev/da0 bs=10M | tail -c +7 | head -c -6 > da0.img
请注意,这可能需要一些时间才能完成。使用 dd 时不会显示进度。
建议等待直到您重新获得提示符的控制权。这是 dd 完成的标志。
另外,如果您没有 /dev/da0,它很可能是 /dev/ada0,您可以使用 mount 或 gpart show 命令进行验证。
/dev/md0 磁盘的镜像创建到您的本地机器local ~ $ ssh nsroot@<YOUR-NETSCALER-IP> shell dd if=/dev/md0 bs=10M | tail -c +7 | head -c -6 > md0.img
注意:虽然建议同时创建 /dev/md0 和 /dev/da0 的磁盘镜像,但创建 /dev/md0 的磁盘镜像是可选的。可以跳过此步骤,但这可能导致 iocitrix.py 遗漏某些入侵指标。
iocitrix.py在您的本地机器上执行上述命令后,将存在 da0.img 和 md0.img 文件。您可以将 iocitrix 指向这些文件以开始对您的镜像进行应急排查。请使用以下命令:
local ~ $ python3 iocitrix.py md0.img+da0.img
示例输出:
(venv) user@dissect:/data/netscaler/image$ python3 iocitrix.py md0.img+da0.img
<Target md0.img+da0.img>
Disks
- <RawContainer size=555745286 vs=None>
- <RawContainer size=21474836486 vs=<DissectVolumeSystem serial=None>>
Volumes
- <Volume name=None size=555745286 fs=<FfsFilesystem>>
- <Volume name='part_00000000' size=1717567488 fs=<FfsFilesystem>>
- <Volume name='part_66600000' size=4401922048 fs=<FfsFilesystem>>
- <Volume name='part_16cc00000' size=2097152 fs=<FfsFilesystem>>
- <Volume name='part_16ce00000' size=15353200128 fs=<FfsFilesystem>>
Hostname : None
Domain : None
IPs : 10.164.0.39, 10.164.0.10
OS family : citrix-netscaler (CitrixBsdPlugin)
OS version : NetScaler 13.1 build 30 (ns-13.1-30.52)
Architecture : x86_64-citrix-netscaler
Language(s) :
Timezone : None
Install date : 2023-08-08 13:59:38.228043+00:00
Last activity : 2023-08-11 08:51:13.979536+00:00
*** Checking for webshells ***
<ioc/hit type='php-file-permission' alert='Suspicious php permission 0o644' confidence='high' path='/var/netscaler/logon/LogonPoint/uiareas/linux/adminupevents.php'>
<ioc/hit type='php-file-contents' alert="Suspicious PHP code 'b'array_filter(''" confidence='high' path='/var/netscaler/logon/LogonPoint/uiareas/linux/adminupevents.php'>
<ioc/hit type='php-file-permission' alert='Suspicious php permission 0o644' confidence='high' path='/var/vpn/config.php'>
<ioc/hit type='php-file-contents' alert="Suspicious PHP code 'b'array_filter(''" confidence='high' path='/var/vpn/config.php'>
<ioc/hit type='php-file-permission' alert='Suspicious php permission 0o644' confidence='high' path='/var/vpn/themes/config.php'>
*** Checking for timestomped files ***
*** Checking for suspicious cronjobs ***
*** Checking for SUID Binaries (this takes a while) ***
<ioc/hit type='binary/suid' alert='Binary with SUID bit set Observed' confidence='medium' path='/tmp/python/bash'>
********************************************************************************
*** ***
*** There were findings for Indicators of Compromise. ***
*** Please consider performing further forensic investigation of the system. ***
*** ***
********************************************************************************
Confidence Type Alert Artefact Location
------------ ------------------- ------------------------------------------ ---------------------------------------------------------------
high php-file-permission Suspicious php permission 0o644 /var/netscaler/logon/LogonPoint/uiareas/linux/adminupevents.php
high php-file-contents Suspicious PHP code 'b'array_filter('' /var/netscaler/logon/LogonPoint/uiareas/linux/adminupevents.php
high php-file-permission Suspicious php permission 0o644 /var/vpn/config.php
high php-file-contents Suspicious PHP code 'b'array_filter('' /var/vpn/config.php
high php-file-permission Suspicious php permission 0o644 /var/vpn/themes/config.php
medium binary/suid Binary with SUID bit set Observed /tmp/python/bash
All targets analyzed.