白盒JAFVA。
如何从java代码当中分析你的组件有没有安全问题。或者黑盒角度看组件当中是否存在安全问题。
注入在java当中很难产生。
java的预编译机制筛掉了很多漏洞,例如注入漏洞。
JAVA知识点-Java/JWT/安全组件
1、JavaWeb常见安全及代码逻辑
2、目录遍历&身份验证&逻辑&JWT
3、访问控制&安全组件&越权&三方组件
java无代码难度巨大
JavaWeb-WebGoat8靶场搭建使用
- 搭建以及访问 启动jar包,搭建环境,端口9091.(启动web服务器,源码是webgoat-server-8.1.0.jar) $ java -jar webgoat-server-8.1.0.jar --server.port=9091 访问方法:http: 初次需要注册,且页面全英文
- 关卡众多 1.各种各样的安全问题,分等级打关 寻找对应文件的包的办法(数据包中URL与相关数据<==映射==>源码中的执行文件与执行方法): 1.抓包: 抓对应的访问流量包 2.识别: 根据抓包反馈的URL信息到对应的目录下去找到相似的jar包(例如jar忽略大小写,找到相似拼写的文件名包) 3.分析: 根据URL特征以及包内携带的POST信息等,分析执行的方法在哪个位置,再分析执行逻辑,找到特殊函数 4.最终目的:找到URL对应的可执行文件,寻找当中的逻辑是否存在安全问题 2.文件上传漏洞所在的关卡 1.打开http: 2.选择A1,并且转到最后的Path traversal即可
|
安全问题-目录遍历&身份认证-JWT攻击
目录遍历
- 小插曲:解压jar IJ内获取jar包的源码的简易方法:选中并且选择自动解压即可 优先查看配置性文件:例如META-INF
- 文件上传漏洞的价值: 漏洞:任意位置文件上传(通用型漏洞) 应用的价值:后门漏洞 安全限制:目录可执行权限限制,例如限制图片目录无脚本执行权限 ==> 攻击思路:将脚本放在可执行目录下,例如主目录
- 目录遍历与数据库遍历 后门脚本执行权限防护设置: 指定目录设置后门限制,无法执行脚本文件。例如图片目录。不受到限制的执行目录是根目录。 例如:在上传文件(如用户头像)时,爆出上传路径,路径被任意修改后会导致任意文件上传漏洞
- 逻辑漏洞:键值对双双传入 正常接受和访问:接受键值,再放到对应的查询语句到后台去查询 异常接受与访问:接受键名和键值,再放到数据库去查询,造成数据的任意查找漏洞。 安全修复:修复键名为锁死,防止存在不存在键名问题。
|
身份验证&JWT
1.涉及题库:靶场A2的Authentication Bypasses 1.目的: 重置密码回答问题的绕过,需要绕过回答问题到重置密码那里 2.漏洞: 3.修正漏洞:改为只接受固定键名
2.JWT安全问题( JSON Web Tokens) 功能:解决身份认证的安全问题。 组成:header.payload.signature 识别方法: 1.cookie出现两点作为间隔符号,大小写区分的字母+数字组成的长串字符串, 格式类似于: xxx_token=xxxxxxxxx.xxxxxx.xxxxxx 算法内容 密钥 单纯的修改payload内容,没有修改密钥部分的内容也是不行的
2.查看cookie,在游客状态和登录状态下的区别是否存在上述情况,是则存在JWT 应用领域:Web应用-java/Python身份验证
|
JWT攻击方法
博客资源:https: 1.空加密算法攻击(签名没验证空加密): 修改header部分的内容,去除掉部分的修改解密算法的模式none,最后去掉第三段即可(前提是服务器支持不要密钥生成的--空模式加密) --使用脚本生成空加密算法进行攻击
2.爆破密钥: 使用爆破字典+python特定爆破代码进行爆破,爆破出真实密钥就能实现任意用户登录 -- 注意: 如果字典不得行(不够强大)时,一定爆破不出密钥的。 -- 注意: 爆破的脚本不能命名为jwt.py,会导致导入包直接失效(导包冲突)!切记! 拿到密钥后,直接在官网(jwt.io)使用密钥进行生成
3.kid攻击: kid功能:可选参数,用于指定加密算法的密钥。 危害: 1. 任意文件读取 2. SQL注入 3. 命令注入
|
安全问题-访问控制&安全组件-第三方组件
访问控制
隐藏属性
前端为了不在明面上展示过多的信息,使用了隐藏属性隐藏了部分信息。例如获取坐标信息并且存入表单当中用于提交:
<form action="xxx.php" method="post"> <input type="hidden" name="idport" value=<?php echo $_SERVER['SERVER_ADDR'];?> > <input type="submit" name="submit" value="提交"> </form>
|
隐藏敏感信息,防止用户篡改敏感信息 越权 查看其它用户信息什么的。查看隐藏属性的办法很简单,使用查看源码就能看到了。
水平越权:同一级别用户权限的查看
与上面的差不多,篡改后实现同等级查看其它用户的敏感信息。
安全组件
关键点:是否调用了第三方的组件库。
- 联想到刚爆出的Log4j2
- 想要利用Log4j漏洞,看哪个地方导入了Log4j库即可。
<sorted-set> <string>foo</string> <dynamic-proxy> <interface>java.lang.Comparable</interface> <handler class="java.beans.EventHandler"> <target class="java.lang.ProcessBuilder"> <command> <string>calc.exe</string> </command> </target> <action>start</action> </handler> </dynamic-proxy> </sorted-set>
|