某景人事管理系统漏洞挖掘与分析
字数 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注入点
-
HrpService接口
- 入口函数:
getChangeUsers - 漏洞成因:SQL语句拼接后通过
prepareStatement执行,但预编译SQL语句可控 - 其他受影响方法:
removeUser, changeUserOrg, validateUserId, getAllOrganizations, getUsersByDeptId, getUsersByOrgId, batchAppend, batchUpdate, batchDelete, updateEnabled, getCodeIdByCodeDesc, getObjectByParam, isExist, isExecuteSql, initExecuteSql, isProtecting, updateInfoByMap
- 入口函数:
-
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 - 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
- Windows系统:
- 漏洞成因:参数解密后直接拼接至File对象,路径完全可控
反序列化漏洞
- 低版本存在,高版本因
function_id提示找不到而失效 - 受影响类方法:
GetGzReportDataTrans.execute GzAnalyseExportDataTrans.execute EditTableInfoTrans.execute GzReportDataExportTrans.execute - 反序列化点:
java.io.ObjectInputStream#readObject
其他后台漏洞
-
源码打包与文件读取
- 类:
ExportDemandZipTrans.execute - 问题:会将原文件删除
- 类:
-
ZIP解压文件上传
- 类:
ReductionFileTrans.execute(多个位置) - 需要服务器端验证上传是否成功
- 类:
-
任意文件读取
- 可能需要普通用户权限
- 未验证类:
DisplayCustomerReportExcelFile downboard DisplayOleContent DisplayOleFile
-
文件上传漏洞
- 可能需要管理员权限
- 未验证类:
uploadmediafileservlet YUfileUpLoadServlet (注意:文件重复会覆盖原文件)
-
模板导入漏洞
- 路径:
/gz/templateset/gz_templatelist.do?b_validateImport=validate
- 路径:
3. 漏洞利用链总结
3.1 前台利用链
- 通过未授权访问services接口
- 利用SQL注入获取用户凭证
- 通过XXE漏洞获取系统敏感信息
- 利用任意用户添加接口创建高权限账户
3.2 后台利用链
- 通过任意文件读取获取系统配置
- 利用反序列化漏洞执行远程代码
- 通过文件上传漏洞部署webshell
- 结合ZIP解压功能实现目录穿越
4. 防御建议
-
认证与授权
- 移除services接口的白名单
- 实现严格的权限控制
-
SQL注入防护
- 使用参数化查询
- 实施输入验证
-
XXE防护
- 禁用外部实体解析
- 使用安全配置的XML解析器
-
文件操作安全
- 实施路径规范化
- 限制文件操作权限
-
反序列化防护
- 升级到安全版本
- 使用安全的反序列化方法
-
其他
- 定期安全审计
- 实施WAF防护
- 最小权限原则配置服务器