某oa java代码审计2
字数 1635 2025-08-06 08:35:22
OA系统Java代码审计:过滤器缺陷与漏洞利用分析
一、漏洞背景
本次审计针对某OA系统的Java代码,主要发现其权限校验过滤器存在设计缺陷,导致可以绕过登录验证,并结合其他漏洞实现远程代码执行(RCE)。
二、过滤器缺陷分析
1. 过滤器配置
在web.xml中配置的过滤器存在严重缺陷,关键代码如下:
if (!path.equals("/") &&
path.indexOf("/WXCallBack") == -1 &&
path.indexOf("/WXAddressCallBackServlet") == -1 &&
// ... 省略多个类似条件 ...
path.indexOf("/upfile") == -1) &&
// ... 更多条件 ...
)
2. 缺陷点
-
路径验证方式不安全:
- 使用
indexOf()进行路径匹配,而非精确匹配 - 使用
getRequestURI()获取路径,未进行规范化处理
- 使用
-
绕过方法:
- 通过路径遍历可以绕过检查,例如:
/oa/js/../xx.jsp - 这种构造方式会被系统识别为合法路径,但实际访问的是受限资源
- 通过路径遍历可以绕过检查,例如:
3. 不需要登录的路径
从条件判断中可提取出以下不需要登录的路径:
/WXCallBack/WXAddressCallBackServlet/DdEventChangeReceiveServlet/weixin/dingdingcommon.jsmodule_field_ajax.jsp/setup/index.jsp/login_oa/checkuser_ajax/activex/public/js//inc//skin/otherchatserviceimages/nest_/flow/module_sel.jspbasic_select_sel.jspmodule_field_sel.jsp/upfile(取决于isAccessUpfileNeedLogin配置)/wap/testdesktopadmin/ide_left.jspreportServlet.txtwiki_export_docexammacromodule_check/error.jsp
三、任意文件上传漏洞
1. 漏洞位置
通过审计发现visual_add.jsp文件存在上传功能,且该文件中没有用户登录检测。
2. 漏洞细节
-
上传点特征:
- 未对文件后缀进行严格检测
- 全局过滤器虽然限制了
.jsp和.jspx上传,但在Windows系统下可通过添加空格等方式绕过
-
上传限制:
- 上传后不返回文件路径
- 文件名存储在数据库中,通过ID参数下载
- 文件名生成规则:时间戳+随机数,难以爆破
四、目录遍历漏洞
1. 漏洞发现
通过搜索Java遍历目录的方法,发现存在未授权访问的目录遍历漏洞。
2. 漏洞利用
-
漏洞位置:
- 通过
mappingAddres参数直接指定路径 - 该功能无需登录即可访问
- 通过
-
利用方式:
- 构造请求获取服务器文件列表
- 结合上传漏洞获取webshell文件名
五、完整攻击链
-
绕过登录验证:
- 使用路径遍历技术访问受限资源,如:
/oa/js/../visual_add.jsp
- 使用路径遍历技术访问受限资源,如:
-
上传webshell:
- 通过
visual_add.jsp上传恶意文件 - 使用Windows特性绕过后缀限制(如添加空格)
- 通过
-
获取webshell路径:
- 利用目录遍历漏洞查看上传目录
- 获取webshell的实际文件名
-
执行任意代码:
- 访问上传的webshell实现RCE
六、修复建议
-
过滤器改进:
- 使用精确路径匹配而非
indexOf() - 对请求路径进行规范化处理
- 实现统一的权限验证机制
- 使用精确路径匹配而非
-
上传功能加固:
- 实施严格的文件后缀白名单
- 对上传内容进行检测
- 避免将上传文件存储在web可访问目录
-
目录遍历防护:
- 禁止用户输入直接作为文件路径
- 对文件访问操作实施权限检查
-
其他建议:
- 实施最小权限原则
- 对敏感操作进行日志记录
- 定期进行安全审计
七、总结
本案例展示了如何通过代码审计发现OA系统中的安全缺陷,特别是过滤器设计不当导致的权限绕过问题。结合文件上传和目录遍历漏洞,攻击者可以构造完整的攻击链实现未授权RCE。这提醒开发者在设计安全机制时需要全面考虑各种边界情况和攻击向量。