Java安全-Filter权限绕过&框架安全审计,从零基础到精通,收藏这篇就够了!

🌟 ❤️

作者:yueji0j1anke

首发于公号:剑客古月的安全屋

字数:1997

阅读时间: 30min

声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。合法渗透,本文章内容纯属虚构,如遇巧合,纯属意外

目录

  • 前言

  • Filter权限绕过

  • 案例展示

  • 框架安全之某ERP系统

  • 总结

0x01 前言

本章主要讲解Java权限绕过以及网上某大量在线ERP系统的源码审计

0x02 Filter权限绕过

1.权限实现

首先给大家一个代码示例

先编写一个servlet

package com.springbootpractice2.controller;  
  
  
import com.springbootpractice2.pojo.Dept;  
import com.springbootpractice2.pojo.Result;  
import com.springbootpractice2.service.DeptService;  
import lombok.extern.slf4j.Slf4j;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.web.bind.annotation.\*;  
  
import java.util.List;  
import java.util.logging.Logger;  
  
@RestController  
@Slf4j  
  
public class DeptController {  
//    @RequestMapping(value = "/dept",method = RequestMethod.GET)  
  
    @Autowired  
    private DeptService deptService;  
  
    public DeptController() {  
        System.out.println("已经开始创建bean实例");  
    }  
  
    @RequestMapping("/depts")  
    public Result list() {  
        log.info("查询数据");  
        List<Dept\> deptList \= deptService.list();  
        return Result.success(deptList);  
    }  
  
    @DeleteMapping("/depts/{id}")  
    public Result delete(@PathVariable Integer id) {  
        log.info("delete department" + id);  
        deptService.delete(id);  
        return Result.success();  
    }  
  
    @PostMapping("/depts")  
    public Result insert(@RequestBody Dept dept) {  
        log.info("add adpartment");  
        deptService.add(dept);  
        return Result.success();  
    }  
}  


通常情况下,Filter层会与该controller层平行同级

public class LoginFilter implements Filter {  
  
    @Override  
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {  
        HttpServletRequest req \= (HttpServletRequest) servletRequest;  
        HttpServletResponse rep \= (HttpServletResponse) servletResponse;  
        String url \= req.getRequestURI().toString();  
        log.info("请求的url:{}", url);  
        if (url.contains("login")) {  
            log.info("登陆操作,放行");  
            filterChain.doFilter(servletRequest, servletResponse);  
            return;  
        }  
  
        String jwt \= req.getHeader("token");  
  
        if (!StringUtils.hasLength(jwt)) {  
            log.info("请求头为token,返回未登录的信息");  
            Result error \= Result.error("NOT\_LOGIN");  
            String notLogin \= JSONObject.toJSONString(error);  
            rep.getWriter().write(notLogin);  
            return;  
        }  
        try {  
            JwtUtils.parseJWT(jwt);  
        } catch (Exception e) {  
            e.printStackTrace();  
            log.info("jwt解析失败");  
            Result error \= Result.error("NOT\_LOGIN");  
            String notLogin \= JSONObject.toJSONString(error);  
            rep.getWriter().write(notLogin);  
            return;  
  
        }  
        log.info("令牌合法");  
        filterChain.doFilter(servletRequest, servletResponse);  
  
    }  
}

比如这个filter是拦截是否登录,判断header头里是否存在jwt令牌,能否解析,若没解析则跳转到login路由中

如图所示

现在想请各位看官看看是否能够绕过

2.绕过方法
…/绕过

解析原理

只需包含login即可

url截断绕过

在很多时候,开发人员都会把…/列为黑名单

 if(uri.contains("./")){  
            resp.getWriter().write("error");  
            return;  
        }

此时我们可以考虑使用;进行截断,不会对地址的访问有影响

/login/dept;123

该例还需结合下面多/绕过

多/绕过

//login/dept;123

即可完美绕过第二个if匹配规则,直接进入最后的filter完成绕过

url编码绕过
//login/dept;123 将其url编码可

此步的原理还是绕过if条件直接进入最后的filter

当然这些方法还是开发者开发经验不够,从而导致一些界面被绕过,笔者平时也很少遇见相关漏洞

0x03 权限绕过案例展示

1.shiro框架未授权访问
1.介绍

这个漏洞是比较老的漏洞了,CVE-2020-1957

shiro框架通过拦截器功能对用户权限进行控制,拦截器一般分为两种,如下所示

anon    匿名拦截器,不需要登录即可访问  
authc   登录拦截器,需要登录访问

而在spring中,/admin/xx 和 /admin/xx/都能够成功访问对应路由页面,若authc拦截器设置拦截进行登录,通常会因为匹配不到/admin/xx/ 而导致未授权访问,从而实现有效绕过

我这里选择搭建漏洞靶场去进行复现

2.复现
cd vulhub/shiro/CVE-2020-1957  
docker-compose up -d

访问本机8080端口

访问路径/admin 会出现302跳转

修改payload为 /xxx/…;/admin

成功访问

3.漏洞详解

shiro拦截器配置如下

\[urls\]  
/admin/\* = authc

admin目录下的所有页面都将需要被拦截并跳转至登录页面进行认证。

看似没有问题,实则通配符*只支持字符不支持匹配路径,当我们输入 /admin/ggg/ 即可完美绕过限制进行访问

0x04 框架安全之某ERP系统

某在线ERP

华夏ERP基于SpringBoot框架和SaaS模式,可以算作是国内人气较高的一款ERP项目。

源码下载地址:https://github.com/jishenghua/jshERP

不想搭建的可以根据指纹到网络搜索引擎上进行搜索

我对java代码的审计首先看看pom文件是否加载了具有威胁的组件,其次看看拦截器,是否存在未授权访问

看到pom文件存在fastjson组件,往后拉是mybatis组件

拦截器部分

1.未授权访问

拦截器的核心逻辑如下

1.获取用户是否登录的凭据信息,若否则返回登录界面  
2.判断是否请求url里面包含"/doc.html"、"/register.html" 或 "/login.html",若否返回登录界面  
3.若都不匹配则返回登录界面  
4.结尾若存在css,png后缀,则允许访问

此处存在疑似漏洞

即 …/绕过,;绕过 与无xss过滤和sql注入过滤

根据路由,尝试访问

{{baseurl}}/jshERP-boot/user/getAllList;.ico

2.Fastjson 反序列化命令执行

前面看到pom文件中有加载fastjson组件,寻找parseObject调用

发现search参数可控

且存在多处调用,找到对应的调用

随便尝试一处,打入payload

search={"@type":"java.net.Inet4Address","val":"yuejinjianke.dnslog.pw"}

3.越权改密码

可遍历id值进行越权改密码操作

源码审计

可以看到鉴权设置非常简陋,到数据库查询传入的参数值id是否为admin即可

0x05 总结

filter绕过近些年已经随着开发水平的提高越来越少见了,不过总会有捡漏的时候(捡了好几次了)。后期将会出一些内存马安全相关的,还请各位师傅多多指正。

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包,需要点击下方链接即可前往获取

读者福利 | 优快云大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)

👉1.成长路线图&学习规划👈

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
在这里插入图片描述

在这里插入图片描述

👉2.网安入门到进阶视频教程👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程文末领取哈)
在这里插入图片描述

在这里插入图片描述

👉3.SRC&黑客文档👈

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:

在这里插入图片描述

黑客资料由于是敏感资源,这里不能直接展示哦!(全套教程文末领取哈)

👉4.护网行动资料👈

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

在这里插入图片描述

👉5.黑客必读书单👈

在这里插入图片描述

👉6.网络安全岗面试题合集👈

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
在这里插入图片描述
所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~

读者福利 | 优快云大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值