某景人事管理系统漏洞挖掘与分析
字数 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防护
    • 最小权限原则配置服务器
相似文章
相似文章
 全屏