1.前言
oasys是一个OA办公自动化系统,使用Maven进行项目管理,基于springboot框架开发的项目。
下载地址自行在github或gitee寻找即可。
部署流程也不做过多讲解,因为是springboot项目,导入数据库即可正常使用。
默认端口为8088,
之后正常访问即可。
2.漏洞挖掘
2.1存储XSS
其实XSS的话,这个系统有很多。首先是在用户面板的便签处。
在cn\gson\oasys\controller\user\UserpanelController.java中,savepaper该方法将用户输入的内容直接进行了存储,并没有过滤。从157开始的判断,只是进行了非空判断,而且如果为null的话,也会自动设置默认值之后就进入了save进行保存。
成功触发。
2.2 越权+XSS
在usermanagepaging这个controller中,无任何校验。所以会造成越权。同时用了一个Pageable分页的插件,而size默认设置为了10,所以在访问时,将size参数给一个足够大的值,那么所有用户即可遍历出来。
(PS:此处也有xss,可以看到model添加之后,进行了return,而在拦截器和该方法都没有过滤。)
在用户管理中,可以建低权限的账号,准备一个低权限的账号。
之后用低权限账号登录访问,如果不带参数访问该Controller的话,页面有问题,无法进行查看10条以后的数据。
所以还是要利用size参数,在传参的时候可以看到这三个参数都有默认值。而默认是每页显示size(10)条数据,所以就造成了上面的用户数据显示不全的问题。
之后利用将size传入一个较大的数值即可。下断点追踪过程如下:
可以看到Pageable分页插件,随机输入比较大最大值,是没有爆出一些异常的。而是会将全部数据回显。
到该方法最后,model将数据保存之后,并转发到了usermanagepaging.ftl中。因为此OA用的freemarker进行整合的,所以直接去templates寻找即可。
之后遍历输出到了界面,细心的人是不是也发现了XSS?
但在这里逐渐发现了思路,这个方法没有进行用户登录判断或用户session获取等操作。那是不是就可以造成未授权访问呢?
当换一个浏览器之后,再次访问,被弹回了登录界面,那说明可能存在filter或拦截器。
直接寻找拦截器即可,因为像springboot的项目很少会整合filter。最终在\java\cn\gson\oasys\common\Interceptor\recordInterceptor找到拦截器。
这下就一目了然了,首先获取了Session。之后进行getAttribute来获取userId。
直接在此处下断,未登录的情况下并在访问127.0.0.1:8088/usermanagepaging?usersearch=1
这下就更清晰了,现在未登录,所以Attribute为空,条件不成立直接跳回登录页。
2.3 SQL注入
在resources\mappers中,发现了mapper文件,在第16行用了$拼接,那么会造成SQL注入,但前提是看一下pinyin这个参数是不是可控。
那就一步步往上跟:
cn.gson.oasys.mappers.AddressMapper接口------>allDirector方法
直接全局搜索,定位到Controller中
进入到AddrController中outAddress方法,可以确定在Mapper中pinyin这个参数是可以被利用的。
既然是RequestMapping,不用再去找页面中摸索功能点了。那么直接进行get方式访问。
直接扔sqlmap跑一下,但是第一次跑的时候,没出来。
想了一下,可能是没有Cookie的原因。
直接带上cookie,继续跑。
看来果然是Cookie的问题,不一会儿就出来了。
3.结尾
感觉收获到了很多技巧,同时有一些漏洞确实是因为疏忽而造成。