某oa java代码审计2
2021-03-05 19:26:58 Author: xz.aliyun.com(查看原文) 阅读量:189 收藏

一、前言

之前审计的时候感觉他这权限校验的过滤器有些问题,然后就重新看了一下filter。然后就开始了这次审计。

二、过滤器缺陷

我们打开项目,来看web.xml
注意到这个过滤器

点进去看一下

此处判断用户是否登录,没登录的话就进去,登录了的话进入else。

if (!path.equals("/") && path.indexOf("/WXCallBack") == -1 && path.indexOf("/WXAddressCallBackServlet") == -1 && path.indexOf("/DdEventChangeReceiveServlet") == -1 && path.indexOf("/weixin") == -1 && path.indexOf("/dingding") == -1 && path.indexOf("common.js") == -1 && path.indexOf("module_field_ajax.jsp") == -1 && path.indexOf("/setup") == -1 && !path.equals("/index.jsp") && path.indexOf("/login_oa") == -1 && path.indexOf("/checkuser_ajax") == -1 && path.indexOf("/activex") == -1 && path.indexOf("/public") == -1 && path.indexOf("/js/") == -1 && path.indexOf("/inc/") == -1 && path.indexOf("/skin") == -1 && path.indexOf("/other") == -1 && path.indexOf("chatservice") == -1 && path.indexOf("images/") == -1 && path.indexOf("nest_") == -1 && path.indexOf("/flow/") == -1 && path.indexOf("module_sel.jsp") == -1 && path.indexOf("basic_select_sel.jsp") == -1 && path.indexOf("module_field_sel.jsp") == -1 && (isAccessUpfileNeedLogin || path.indexOf("/upfile") == -1) && path.indexOf("/wap") == -1 && path.indexOf("/test") == -1 && path.indexOf("desktop") == -1 && path.indexOf("admin/ide_left.jsp") == -1 && path.indexOf("reportServlet") == -1 && path.indexOf(".txt") == -1 && path.indexOf("wiki_export_doc") == -1 && path.indexOf("exam") == -1 && path.indexOf("macro") == -1 && path.indexOf("module_check") == -1 && requrl.indexOf("/error.jsp") == -1)

这个差不多相当于给出了哪些路径不需要登录。
但是他居然使用indexOf来判断,而且使用的getRequestURI()来获取路径。
所有我们只要使用/oa/js/../xx.jsp就能绕过这个过滤器的登录检测

三、任意文件上传

虽然我们绕过了过滤器的登录检测,但是有的jsp文件中存在用户登录检测。我们上篇文章中网盘功能的皆存在。

所以我要找一个文件中没有登录检测的上传功能。
最后找到visual_add.jsp这个文件可以利用

这个点进去一顿跟最后到这里

这里面没做后缀检测,但是全局过滤器存在检测不能上传jsp和jspx,windows下可以采用jsp空格等绕过


但是此上传不返回路径文件名,文件名存在数据库中,通过id=xx下载。
文件名为时间戳加几个随机数很难爆破。

四、目录遍历

于是想找一个目录遍历漏洞,查了一下java遍历目录下文件的方法。

全局搜索

点进去发现第一个存在漏洞。

获取一个mappingAddres参数,这个参数就是路径,这文件也不用登陆。

得到shell名字。

五、总结

通过发现过滤器缺陷绕过登录检测实现未授权文件上传,再通过目录遍历获取shell文件名成功RCE。


文章来源: http://xz.aliyun.com/t/9226
如有侵权请联系:admin#unsafe.sh