第一次接触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了。

都有定数,自知自省向上走,有一天也会对高薪工作和这个社会祛魅的,好好生活


欢迎来访 这是我的小窝~ 网安弱鸡 健身屌丝 好不容易搭出来的 大佬略过我
最后更新于 2025-07-25