白盒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>
 
  |