某运营管理平台登录绕过及文件上传漏洞分析
字数 1139 2025-08-18 17:33:44
某运营管理平台登录绕过及文件上传漏洞分析
漏洞概述
本文详细分析某运营管理平台存在的两个高危漏洞:
- 登录绕过漏洞 - 通过特定参数构造可绕过身份验证直接登录系统
- 文件上传漏洞 - 结合中间件特性和路径穿越实现任意文件上传
Filter分析
系统使用controllerFilter处理多个路由,其doFilter方法逻辑如下:
-
第一层判断:
- 检查URL是否包含
/dwr/或以.js结尾 - 不满足上述条件则进入下一步
- 检查URL是否包含
-
verificationURL方法验证用户登录状态:
- 未登录用户重定向到
/login/abnormal_exit.jsp - 返回false阻止进入后续逻辑
- 未登录用户重定向到
-
第二层判断:
- 检查URL是否包含
/ProxyServletUtil和/servlet/pageProcessServlet - 不满足则进入下一步
- 检查URL是否包含
-
第三层判断:
- URL不以
.xf和.xml结尾 - 如果以
.jsp结尾,则检查是否在白名单中(isNotValidatePage方法) - 白名单外的jsp文件访问被阻止
- URL不以
登录绕过漏洞1
漏洞位置
LinkUtil.getLinkMeta方法处理.ln结尾的URL
利用原理
-
系统处理
.ln请求时:- 获取
SYS_LINK参数 - 进行hex解码和decrypt解密
- 解密后格式应为:
url||时间||用户
- 获取
-
时间格式:
yyyy-MM-dd -
构造payload示例:
/main/main.jsp||2025-01-01||admin -
利用步骤:
- 对payload进行加密(EncrypUtil.encrypt)
- 转换为hex(BaseFunc.bytesToHexString)
- 访问URL:
/xxx.ln?SYS_LINK=hex数据
漏洞代码
// LinkUtil.getLinkMeta方法
String decrypted = EncrypUtil.decrypt(BaseFunc.hexStringToBytes(SYS_LINK));
String[] parts = decrypted.split("\\|\\|");
String url = parts[0];
String time = parts[1];
String user = parts[2];
// 登录逻辑
loginByUserName(user, request);
文件上传漏洞
漏洞位置
/iweboffice/OfficeServer.jsp使用了存在漏洞的金格组件(DBstep.jar)
利用限制
- 直接访问会被Filter拦截
- 需要绕过jsp文件访问限制
绕过方法
利用Tomcat特性:
- 使用
.jsp;或.js%70形式绕过.jsp后缀检测 - Tomcat会自动处理这些特殊字符
利用步骤
- 上传jsp文件到存在的目录
- 使用白名单中的jsp文件名
- 通过特殊格式访问上传的文件
登录绕过漏洞2
漏洞位置
/loginService.fe路由对应的fe.ext.erp.FeErpLoginServlet
利用方法
当参数op=D时,会设置userName=admin并自动登录:
if ("D".equals(op)) {
String userName = "admin";
loginByCas(userName, request);
}
参考链接
防护建议
- 加强Filter对所有请求的校验
- 移除或修复LinkUtil中的不安全逻辑
- 更新存在漏洞的金格组件
- 对.fe接口添加权限验证
- 实施严格的输入验证和输出编码