第一次接触java,代码感觉复杂的多,说白了JAVA漏洞还是一知半解,我是个der
一、知识点
javaweb常见安全及代码逻辑
目录遍历 身份验证 逻辑漏洞 JWT
访问控制 安全组件 越权问题 安全组件(库?)
二、初识JAVA&靶场演示
1、思路
JAVA的架构,如何通过代码或者url对应上源码,JAVA没有源码很难渗透啊
JWT身份验证,类似cookie和session
JAVA源码可以自己写,但是大部分都封装在jar包里,访问地址需用IDA看jar
JAVA漏洞几乎都在第三方组件
2、靶场演示 webGoat 没太搞懂
webGoat靶场过关https://www.cnblogs.com/HAN91/p/14585449.html
(1)情景1:路径遍历
上传文件时的路径遍历,也是一些函数过滤
步骤:
解压jar包,载入IDA,根据抓包的地址路径找
案例应用:
上传图片的文件夹中,对文件夹设置了权限,只能访问文件夹中的图片,但是上传的后门不能执行,此时利用JAVA任意目录上传,再执行后门
(2)情景2:键名 键值 问题答案等逻辑问题
服务器接受键名=键值,对应正确后返回结果(但是现在一般都是固定接受键名)
绕过:
修改接受的键名,键值随意了,数据库查询和问题没关系,是答案有一部分留空了
防御:
查询出不存在返回NULL,抛出异常
三、JWT令牌身份验证(秘钥、流程、特征、绕过)
https://www.cnblogs.com/yokan/p/14468030.html <---这讲的是真牛啵一
判断:找cookie,对比验证和未验证的包,看格式即可
JAVA和python一般都用JWT进行身份验证,官方网站有解密工具
传统token方式:
用户登录成功后,服务端生成一个随机token给用户,并且在服务端(数据库或缓存)中保存一份token,以后用户再来访问时需携带token,服务端接收到token之后,去数据库或缓存中进行校验token的是否超时、是否合法。
jwt方式:
用户登录成功后,服务端通过jwt生成一个随机token给用户(服务端无需保留token),以后用户再来访问时需携带token,服务端接收到token之后,通过jwt对token进行校验是否超时、是否合法。

注意:base64url加密是先做base64加密,然后再将 - 替代 + 及 _ 替代 / 。
JWT攻击绕过:
从原理入手,生成字符串:算法+秘钥
(1)空加密算法 签名没验证
此方法指定header里面的加密算法为None,就导致第三段没有字符串,只有两段字符串两个点,但是此类一般用于调试,需要后端开启空加密方式
(2)爆破秘钥
Token解码后,将admin等其他攻击信息修改后,再对秘钥进行bp,需要靠谱字典(在源码里),可以用python跑
(3)修改KID参数
秘钥一般是源码设置好的,kid是指定的秘钥路径,可以由用户输入,任意文件读取,sql注入
四、安全组件
语言越强大,拓展功能越强大,简便但是会带来很多问题
java代码中分析组件问题,分析到使用了这个安全组件(库),那就搜对应版本的漏洞
calc.exe是计算器
java代码中import引用很多库,io,java开头的 org就是第三方库
五、访问控制(不止JAVA)
(1)隐藏属性:前端页面的自慰限制,比如返回包中,页面信息不回全部显示,只会显示必要的,如角色、等级、大区,其他的比如身份证号哈,就不会显示,但是js源码能看到,抓包可以修改数据越权
(2)水平越权:同一级别用户权限的查看
小结
原来那么多人卷JAVA,是JAVA真的牛,不是特别懂估计问题也不大,等学反序列化和逆向的时候要重视Java了。
都有定数,自知自省向上走,有一天也会对高薪工作和这个社会祛魅的,好好生活
Comments NOTHING