简介:
oasys是一个OA办公自动化系统,使用Maven进行项目管理,基于springboot框架开发的项目,mysql底层数据库,前端采用freemarker模板引擎,Bootstrap作为前端UI框架,集成了jpa、mybatis等框架。
源码可以访问链接下载:https://gitee.com/aaluoxiang/oa_system?_from=gitee_search
环境搭建:
环境搭建没有什么特别的,数据库创建oasys的数据库后导入oasys.sql,然后在application.properties文件中配置数据库地址就可以了。
漏洞挖掘:
SQL注入(通知列表)
首先拿到代码后看一下依赖,发现项目中使用了mybatis,然后在映射文件看一下有没有用${}的:可以看到,下面的接口使用了${}字符串拼接。
接下来在控制器中搜索一下看哪个控制器使用了该接口,最终在通知列表处找到一次使用:
漏洞复现:
通过构造paylaod,成功实现sql注入。
SQL注入(通讯录)
这个注入和上面一样,同样因为使用${}进行字符串拼接。
映射文件如下:
控制器代码如下:
漏洞复现:
构造请求如下:
存储XSS(部门管理)
漏洞位于部门管理->添加部门处:
代码查看:
可以看到没有进行任何过滤直接调用deptdao.save将数据存入数据库。
存储XSS(用户管理)
用户管理->编辑用户处存在存储XSS。
可以看到同样没有任何过滤就直接存入数据库,说明XSS漏洞在全站存在多处。
代码分析:
越权漏洞
漏洞位于流程管理->我的申请->查看流程处:
可以看到URL中有个id参数,猜测该参数为流程id标识,看一下后端代码:
这里只放上部分关键代码,可以看到首先获取了当前用户对象,然后根据URL中的ID参数获取了流程对象,并且对比userID判断是申请人还是审批人。可以看出并没有对其他用户越权访问进行处理。
使用另外一个低权限账号登录系统,首先查看流程列表:
可以看到没有任何流程,接下来使用该用户cookie来调用查看流程的接口来枚举流程:
使用另外一个低权限账号登录系统,首先查看流程列表:
可以看到没有任何流程,接下来使用该用户cookie来调用查看流程的接口来枚举流程:
可以看到枚举出很多流程,证明越权确实存在。