概述
JWT安全及预编译CASE注入
- java 防御注入以及绕过
- 预编译防止注入(参数绑定)
- session防注入
- jwt 安全
- jwt简介
- jwt攻击
- jwt伪造攻击
- jwt密钥爆破攻击
java 防御注入以及绕过
预编译防止注入(参数绑定)
-
java 注入防御
1.1 参数绑定,通过预编译实现
预编译可以将传递的参数值只当做要查询的数据
不给机会执行破坏语句
sql = “select * from tabel where id=?”
如果出现 order by 就可以通过 case when 绕过
一般需要排序的地方都会用到 order by1.2 具体绕过方式
一种预编译绕过方法 通过 case when 绕过,必须要在代码中使用了 order by 才能生效
需要通过 python 编写脚本利用,这是部分代码:
1.3 java 预防注入的手法图:
session防注入
- 通过 session 防御
因为 session 在服务器端,所以无法操作
jwt 安全
jwt简介
-
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 开发再试:
最后
以上就是温暖香烟为你收集整理的13JWT安全及预编译CASE注入java 防御注入以及绕过jwt 安全的全部内容,希望文章能够帮你解决13JWT安全及预编译CASE注入java 防御注入以及绕过jwt 安全所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复