欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

JAVA安全-JWT安全及预编译CASE注入等

时间:2023-07-05
JAVA中防止sql注入

//利用session防御,session内容正常情况下是用户无法修改的:select * from users where user = "'" + session.getAttribute("UserID") + "'";//参数绑定方式,利用了sql的预编译技术(PreparedStatement)预编译讲解:https://www.cnblogs.com/klyjb/p/11473857.html上面说的方式也不是能够绝对的进行SQL注入防御,只是减轻。比如参数绑定的方式可以使用下面的方式绕过:通过使用case when语句可以将order by后的orderexpression表达式中添加select语句。

JWT安全

组成
JWT 分为三部分,头部(Header),声明(Claims),签名(Signature),三个部分以英文句号.隔开。 JWT 的头部,声明内容以 base64进行了编码。
签名处通过头部和声明的内容以及特殊的密钥进行加密生成。

头部(Header){"alg":"HS256","typ":"JWT"}声明(Claims){"exp": 1416471934,"user_name": "user","scope": ["read","write"],"authorities": ["ROLE_ADMIN","ROLE_USER"],"jti": "9bc92a44-0b1a-4c5e-be70-da52075b9a84","client_id": "my-client-with-secret"}声明(Claims){"exp": 1416471934,"user_name": "user","scope": ["read","write"],"authorities": ["ROLE_ADMIN","ROLE_USER"],"jti": "9bc92a44-0b1a-4c5e-be70-da52075b9a84","client_id": "my-client-with-secret"}

靶场例子

无密钥-修改alg,删除签名
登陆用户时抓包,access_tocken为空
进行其它退出等操作后抓包,可以通过格式确定是JWT
在线jwt解码:https://jwt.io/
通过在线解密查看解密结果。此处alg:HS512的意思是,此签名(Signature)是通过头部(Header),声明(Claims),以及特殊的密钥进行HS512加密。
因为此处获取不了密钥,所以不能对签名进行解密。

当对方服务器上的验证不需要签名时,把对应的jwt进行修改后再base64加密
将alg修改为none进行base64编码

将admin的值修改为true
将两个base64编码后的字符串去掉等号用.拼接为jwt的格式,进行提交(因为这里alg的值为none,所以就没有进行加密,不会生成签名)

点击提交,登陆成功

如果对方服务器上要验证签名,则此方法是无效的

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。