某景人事管理系统漏洞挖掘与分析
字数 1784 2025-08-29 22:41:32

某景人事管理系统漏洞挖掘与分析教学文档

1. 系统概述

某景人事管理系统是一个基于Java开发的企业人力资源管理系统,采用多种Java技术栈构建,包括:

  • XFire (Java SOAP框架)
  • Struts框架
  • 传统Servlet/JSP技术

2. 漏洞分析

2.1 路由与权限认证分析

关键配置文件

  • web.xml:定义了系统主要路由,包含一个低版本filter
  • services.xml:XFire框架的服务端点配置
  • struts-config.xml:Struts框架配置,包含认证逻辑和路由

认证绕过问题

  • filter中为services接口设置了白名单,导致services.xml中定义的所有接口均可未授权访问

2.2 SQL注入漏洞

前台SQL注入点

  1. HrpService接口

    • 入口函数:getChangeUsers
    • 漏洞成因:SQL语句拼接后通过prepareStatement执行,但预编译SQL语句可控
    • 其他受影响方法:
      removeUser, changeUserOrg, validateUserId, getAllOrganizations, 
      getUsersByDeptId, getUsersByOrgId, batchAppend, batchUpdate, 
      batchDelete, updateEnabled, getCodeIdByCodeDesc, getObjectByParam, 
      isExist, isExecuteSql, initExecuteSql, isProtecting, updateInfoByMap
      
  2. HrService接口

    • 同样存在多处SQL注入点

前台查询所有用户密码

  • HrpService接口getEToken函数
  • 需要满足条件:第二个参数必须为c42YFCcwuJdC3uZF9CNUF/kDRn33hWpx
  • 通过UserView var7 = var4.getSetView(var1, "", "false", var6)查询用户信息
  • 返回用户名和密码的base64密文

其他前台接口

  • 任意用户添加接口:HrService.createUser
  • 查询所有用户接口:HrService.getAllUsers

2.3 XXE漏洞

前台XXE注入点

  • HrpService接口的多个方法:
    getHolidayMsg, impInfoByNotice, getRemainHolidays, 
    syncHolidayMsg, updateHolidays
    
  • SynToADServicesendSyncMsg方法
  • OutputTemplateDataServletdoPost方法

2.4 JDBC注入

  • SynEmpOrgToERPServiceSynToADServicesendSyncMsg方法
  • getConnection参数可控,但因缺少db2组件无法getshell

2.5 后台漏洞

任意文件读取

  • 路径:/components/fileupload/upload
  • 类:com.hjsj.hrms.utils.components.fileupload.servlet.FileUploadServlet
  • 可读取:
    • Windows系统:c:/windows/win.ini
    • Linux系统:/etc/hosts
  • 漏洞成因:参数解密后直接拼接至File对象,路径完全可控

反序列化漏洞

  • 低版本存在,高版本因function_id提示找不到而失效
  • 受影响类方法:
    GetGzReportDataTrans.execute
    GzAnalyseExportDataTrans.execute
    EditTableInfoTrans.execute
    GzReportDataExportTrans.execute
    
  • 反序列化点:java.io.ObjectInputStream#readObject

其他后台漏洞

  1. 源码打包与文件读取

    • 类:ExportDemandZipTrans.execute
    • 问题:会将原文件删除
  2. ZIP解压文件上传

    • 类:ReductionFileTrans.execute (多个位置)
    • 需要服务器端验证上传是否成功
  3. 任意文件读取

    • 可能需要普通用户权限
    • 未验证类:
      DisplayCustomerReportExcelFile
      downboard
      DisplayOleContent
      DisplayOleFile
      
  4. 文件上传漏洞

    • 可能需要管理员权限
    • 未验证类:
      uploadmediafileservlet
      YUfileUpLoadServlet (注意:文件重复会覆盖原文件)
      
  5. 模板导入漏洞

    • 路径:/gz/templateset/gz_templatelist.do?b_validateImport=validate

3. 漏洞利用链总结

3.1 前台利用链

  1. 通过未授权访问services接口
  2. 利用SQL注入获取用户凭证
  3. 通过XXE漏洞获取系统敏感信息
  4. 利用任意用户添加接口创建高权限账户

3.2 后台利用链

  1. 通过任意文件读取获取系统配置
  2. 利用反序列化漏洞执行远程代码
  3. 通过文件上传漏洞部署webshell
  4. 结合ZIP解压功能实现目录穿越

4. 防御建议

  1. 认证与授权

    • 移除services接口的白名单
    • 实现严格的权限控制
  2. SQL注入防护

    • 使用参数化查询
    • 实施输入验证
  3. XXE防护

    • 禁用外部实体解析
    • 使用安全配置的XML解析器
  4. 文件操作安全

    • 实施路径规范化
    • 限制文件操作权限
  5. 反序列化防护

    • 升级到安全版本
    • 使用安全的反序列化方法
  6. 其他

    • 定期安全审计
    • 实施WAF防护
    • 最小权限原则配置服务器
某景人事管理系统漏洞挖掘与分析教学文档 1. 系统概述 某景人事管理系统是一个基于Java开发的企业人力资源管理系统,采用多种Java技术栈构建,包括: XFire (Java SOAP框架) Struts框架 传统Servlet/JSP技术 2. 漏洞分析 2.1 路由与权限认证分析 关键配置文件 web.xml :定义了系统主要路由,包含一个低版本filter services.xml :XFire框架的服务端点配置 struts-config.xml :Struts框架配置,包含认证逻辑和路由 认证绕过问题 filter中为services接口设置了白名单,导致services.xml中定义的所有接口均可未授权访问 2.2 SQL注入漏洞 前台SQL注入点 HrpService接口 入口函数: getChangeUsers 漏洞成因:SQL语句拼接后通过 prepareStatement 执行,但预编译SQL语句可控 其他受影响方法: HrService接口 同样存在多处SQL注入点 前台查询所有用户密码 HrpService接口 的 getEToken 函数 需要满足条件:第二个参数必须为 c42YFCcwuJdC3uZF9CNUF/kDRn33hWpx 通过 UserView var7 = var4.getSetView(var1, "", "false", var6) 查询用户信息 返回用户名和密码的base64密文 其他前台接口 任意用户添加接口: HrService.createUser 查询所有用户接口: HrService.getAllUsers 2.3 XXE漏洞 前台XXE注入点 HrpService接口 的多个方法: SynToADService 的 sendSyncMsg 方法 OutputTemplateDataServlet 的 doPost 方法 2.4 JDBC注入 SynEmpOrgToERPService 和 SynToADService 的 sendSyncMsg 方法 getConnection 参数可控,但因缺少db2组件无法getshell 2.5 后台漏洞 任意文件读取 路径: /components/fileupload/upload 类: com.hjsj.hrms.utils.components.fileupload.servlet.FileUploadServlet 可读取: Windows系统: c:/windows/win.ini Linux系统: /etc/hosts 漏洞成因:参数解密后直接拼接至File对象,路径完全可控 反序列化漏洞 低版本存在,高版本因 function_id 提示找不到而失效 受影响类方法: 反序列化点: java.io.ObjectInputStream#readObject 其他后台漏洞 源码打包与文件读取 类: ExportDemandZipTrans.execute 问题:会将原文件删除 ZIP解压文件上传 类: ReductionFileTrans.execute (多个位置) 需要服务器端验证上传是否成功 任意文件读取 可能需要普通用户权限 未验证类: 文件上传漏洞 可能需要管理员权限 未验证类: 模板导入漏洞 路径: /gz/templateset/gz_templatelist.do?b_validateImport=validate 3. 漏洞利用链总结 3.1 前台利用链 通过未授权访问services接口 利用SQL注入获取用户凭证 通过XXE漏洞获取系统敏感信息 利用任意用户添加接口创建高权限账户 3.2 后台利用链 通过任意文件读取获取系统配置 利用反序列化漏洞执行远程代码 通过文件上传漏洞部署webshell 结合ZIP解压功能实现目录穿越 4. 防御建议 认证与授权 移除services接口的白名单 实现严格的权限控制 SQL注入防护 使用参数化查询 实施输入验证 XXE防护 禁用外部实体解析 使用安全配置的XML解析器 文件操作安全 实施路径规范化 限制文件操作权限 反序列化防护 升级到安全版本 使用安全的反序列化方法 其他 定期安全审计 实施WAF防护 最小权限原则配置服务器