13JWT安全及预编译CASE注入

java 防御注入以及绕过

预编译防止注入(参数绑定)

  1. java 注入防御

    1.1 参数绑定,通过预编译实现
    预编译可以将传递的参数值只当做要查询的数据
    不给机会执行破坏语句
    sql = “select * from tabel where id=?”
    如果出现 order by 就可以通过 case when 绕过
    一般需要排序的地方都会用到 order by

    1.2 具体绕过方式
    一种预编译绕过方法 通过 case when 绕过,必须要在代码中使用了 order by 才能生效
    需要通过 python 编写脚本利用,这是部分代码:
    在这里插入图片描述

    1.3 java 预防注入的手法图:
    在这里插入图片描述

session防注入

  1. 通过 session 防御
    因为 session 在服务器端,所以无法操作

jwt 安全

jwt简介

  1. jwt 安全 json web token
    3.1 jwt 组成部分:头部 header、声明 claims、签名 signature
    这是 jwt 组成的示意图:
    在这里插入图片描述

    3.2 jwt 的编码方式&加密方式
    jwt 的头部与声明部分是通过 base64 编码的
    签名部分是基于 header 中指定的签名算法(默认情况下为 HMAC SHA256)生成加密字符串,
    这个加密字符串既可以 base64 编码,也可以不编码

jwt攻击

jwt伪造攻击

3.3 基于 jwt 的攻击-jwt 伪造
话不多说上链接,通过 jwt 解密网站,可以将前两部分解密
得到用户信息
一个例子,解密后变成这样:
在这里插入图片描述

我们通过 burpsuite 的 decoder 修改 jwt 头部,将签名方式 alg 的内容改为 none
在这里插入图片描述

再将 payload 声明中的 admin 改为 true,这个是改用户权限,
操作与上面相同
完成修改我们要手动删除 base64 加密后的==
在这里插入图片描述

再将改好的 admin 也拼接上去
在这里插入图片描述

最后就是复制到数据包的 token 处发送给服务器

注意需要在最后再补上一个.否则服务器无法解析
这种方式只有在服务端不验证签名方式的情况下才有用

jwt密钥爆破攻击

3.4 基于 jwt 的攻击-jwt 密钥爆破
上面说到签名是通过头部指定的加密方式加上密钥得到的,
又由于加密方式我们可以直接从头部得到,那么我们只要不断更换密钥,
通过脚本加密出签名然后与原来的签名对比即可知道密钥是否正确,
也就是密钥爆破(因为相当于一个一个试)

这里有一部分 python 实现密钥爆破的代码,具体的等以后学到 python 开发再试:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值