-
Notifications
You must be signed in to change notification settings - Fork 0
/
atom.xml
629 lines (351 loc) · 42.4 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>妙尽璇机</title>
<link href="https://changeyourway.github.io/atom.xml" rel="self"/>
<link href="https://changeyourway.github.io/"/>
<updated>2024-11-14T06:07:26.392Z</updated>
<id>https://changeyourway.github.io/</id>
<author>
<name>妙尽璇机</name>
</author>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>基础篇 - Hessian 协议详解</title>
<link href="https://changeyourway.github.io/2024/11/13/Java%20%E5%AE%89%E5%85%A8/%E5%9F%BA%E7%A1%80%E7%AF%87-Hessian%E5%8D%8F%E8%AE%AE%E8%AF%A6%E8%A7%A3/"/>
<id>https://changeyourway.github.io/2024/11/13/Java%20%E5%AE%89%E5%85%A8/%E5%9F%BA%E7%A1%80%E7%AF%87-Hessian%E5%8D%8F%E8%AE%AE%E8%AF%A6%E8%A7%A3/</id>
<published>2024-11-13T01:40:36.653Z</published>
<updated>2024-11-14T06:07:26.392Z</updated>
<summary type="html"><h2 id="Hessian-协议介绍"><a href="#Hessian-协议介绍" class="headerlink" title="Hessian 协议介绍"></a>Hessian 协议介绍</h2><p>Hessian 协议是一种高效、跨语言的二进制 RPC(Remote Procedure Call,远程过程调用)协议,由 Caucho 公司设计,最早应用于 Java 和 Java 之间的远程调用。其主要特点是使用紧凑的二进制格式传输数据,提供高性能的序列化和反序列化操作,因此适合在网络带宽较低或数据传输效率要求较高的场景中使用。</p>
<h6 id="Hessian-协议的特点"><a href="#Hessian-协议的特点" class="headerlink" title="Hessian 协议的特点"></a>Hessian 协议的特点</h6><ol>
<li><strong>跨语言支持</strong>:Hessian 协议设计为跨平台的,支持多种语言,如 Java、Python、C#、PHP 等。不同语言的系统可以通过 Hessian 协议实现远程调用,达到语言无关的通信目的。</li>
<li><strong>高效的二进制序列化</strong>:与 XML 或 JSON 相比,Hessian 采用二进制格式,不仅能减少数据体积,还能降低解析的开销,从而提升性能。Hessian 使用较少的字节来表示复杂的数据结构,尤其适合需要频繁远程调用的分布式系统。</li>
<li><strong>轻量化</strong>:Hessian 协议比传统的 SOAP 和 XML-RPC 更轻量,不依赖任何外部配置文件,序列化和反序列化开销低,适合在资源有限的环境中使用。</li>
<li><strong>良好的兼容性和扩展性</strong>:Hess</summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>漏洞篇 - JavaAgent 内存马</title>
<link href="https://changeyourway.github.io/2024/10/31/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-JavaAgent%E5%86%85%E5%AD%98%E9%A9%AC/"/>
<id>https://changeyourway.github.io/2024/10/31/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-JavaAgent%E5%86%85%E5%AD%98%E9%A9%AC/</id>
<published>2024-10-31T08:26:02.055Z</published>
<updated>2024-10-31T08:27:31.695Z</updated>
<summary type="html"><p>本文的前置知识:<a href="https://changeyourway.github.io/2024/10/23/Java%20%E5%AE%89%E5%85%A8/%E5%9F%BA%E7%A1%80%E7%AF%87-JavaAgent%E8%AF%A6%E8%A7%A3/">基础篇 - Java Agent 详解</a> 。</p>
<p>Java Agent 允许开发者在 JVM 运行时通过修改类的字节码,那么它其实就相当于 JVM 层面的一个拦截器或者说增强代理(类似于 AOP),既然如此,我们就可以在一些类中插入我们想要的代码逻辑。</p>
<h2 id="实现思路"><a href="#实现思路" class="headerlink" title="实现思路"></a>实现思路</h2><h3 id="注入-ApplicationFilterChain"><a href="#注入-ApplicationFilterChain" class="headerlink" title="注入 ApplicationFilterChain"></a>注入 ApplicationFilterChain</h3><p>冰蝎作者 rebeyond 师傅的内存马项目(<a href="https://github.com/rebeyond/memShell%EF%BC%89%E9%80%89%E5%8F%96">https://github.com/rebeyond/memShell)选取</a> ApplicationFilterChain 的 internalDoFilter 方法作为 hook 点,在 Tomcat 的运行过程中,ApplicationFilterChain 的 internalDoFilter 方法会被反复调用以执行过滤器的 DoFilter</summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>基础篇 - Java Agent 详解</title>
<link href="https://changeyourway.github.io/2024/10/23/Java%20%E5%AE%89%E5%85%A8/%E5%9F%BA%E7%A1%80%E7%AF%87-JavaAgent%E8%AF%A6%E8%A7%A3/"/>
<id>https://changeyourway.github.io/2024/10/23/Java%20%E5%AE%89%E5%85%A8/%E5%9F%BA%E7%A1%80%E7%AF%87-JavaAgent%E8%AF%A6%E8%A7%A3/</id>
<published>2024-10-23T10:14:22.171Z</published>
<updated>2024-10-30T07:23:04.510Z</updated>
<summary type="html"><h2 id="Java-Agent-介绍"><a href="#Java-Agent-介绍" class="headerlink" title="Java Agent 介绍"></a>Java Agent 介绍</h2><p>Java Agent 是一种允许开发者在 JVM 运行时通过修改类的字节码来动态增强 Java 应用程序的工具。它基于 <code>Instrumentation</code> 接口,可以使用 <code>ClassFileTransformer</code> 来拦截和修改字节码。在 Java Agent 中,<code>Instrumentation.addTransformer()</code> 可以用来添加一个字节码转换器,它将在类加载时对字节码进行操作。</p>
<p>我们平时接触到的很多地方都用到了这个 Java Agent :</p>
<ul>
<li>各个 Java IDE 的调试功能,例如 eclipse、IntelliJ IDEA;</li>
<li>热部署功能,例如 JRebel、XRebel、 spring-loaded;</li>
<li>各种线上诊断工具,例如 Btrace、Greys,还有阿里的 Arthas;</li>
<li>各种性能分析工具,例如 Visual VM、JConsole 等;</li>
</ul>
<p>Java Agent 最终以 jar 包的形式存在,我们也只能以调用 jar 包的方式去调用它。</p>
<h2 id="Java-Agent-快速入门"><a href="#Java-Agent-快速入门" class="headerlink" title="Java Agent 快速入门"></a>Java Agent 快速入门</h2><p>接下来就来实现一个简单的 Java Agent,基于 J</summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>漏洞篇 - Spring 内存马</title>
<link href="https://changeyourway.github.io/2024/10/21/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-Spring%E5%86%85%E5%AD%98%E9%A9%AC/"/>
<id>https://changeyourway.github.io/2024/10/21/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-Spring%E5%86%85%E5%AD%98%E9%A9%AC/</id>
<published>2024-10-21T12:14:00.715Z</published>
<updated>2024-10-21T12:15:05.069Z</updated>
<summary type="html"><h2 id="Spring-概念总结"><a href="#Spring-概念总结" class="headerlink" title="Spring 概念总结"></a>Spring 概念总结</h2><p>本节的前置知识是 Spring、SpringBoot、SpringMVC 。这里总结一下基本问题:</p>
<h3 id="Spring-Framework"><a href="#Spring-Framework" class="headerlink" title="Spring Framework"></a><strong>Spring Framework</strong></h3><p>Spring 是一个全功能的 Java 应用开发框架,提供核心容器功能、AOP、数据访问等模块。</p>
<ul>
<li><strong>IoC(控制反转)容器</strong>:对 Java 对象的控制权由用户转移到 Spring IOC 容器,通过依赖注入(DI)管理对象的创建和依赖关系。</li>
<li><strong>AOP(面向切面编程)</strong>:通过定义通知无侵入式的对切入点方法进行功能增强。</li>
<li><strong>事务管理</strong>:提供声明式和编程式事务管理,支持数据库事务和其他资源的管理。</li>
<li><strong>DAO 支持</strong>:整合 JDBC、Hibernate、JPA 等数据访问框架。</li>
<li><strong>Context</strong>:ApplicationContext 作为核心容器,管理 Bean 的生命周期和依赖注入。</li>
</ul>
<h4 id="Spring-常用注解"><a href="#Spring-常用注解" class="headerlink" title</summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>漏洞篇 - Tomcat 内存马</title>
<link href="https://changeyourway.github.io/2024/09/26/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-Tomcat%E5%86%85%E5%AD%98%E9%A9%AC/"/>
<id>https://changeyourway.github.io/2024/09/26/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-Tomcat%E5%86%85%E5%AD%98%E9%A9%AC/</id>
<published>2024-09-26T07:31:11.138Z</published>
<updated>2024-09-26T10:57:05.832Z</updated>
<summary type="html"><h2 id="Servlet-动态注册机制"><a href="#Servlet-动态注册机制" class="headerlink" title="Servlet 动态注册机制"></a>Servlet 动态注册机制</h2><p>Servlet API 提供了动态注册机制,允许在运行时动态注册 Servlets、Filters 和 Listeners,而不需要通过 <code>web.xml</code> 文件或者注解进行静态配置。这种机制从 Servlet 3.0 开始引入,提供了更灵活的方式来配置 Web 应用组件,特别是对于基于注解和自动配置的现代 Web 应用非常有用。</p>
<p>在 ServletContext 类中提供了一系列 addServlet、addFilter、addListener 方法来提供动态注册功能。</p>
<h2 id="内存马初探"><a href="#内存马初探" class="headerlink" title="内存马初探"></a>内存马初探</h2><p>学习内存马需要先掌握 JavaWeb ,尤其是三大组件(Servlet、Filter、Listener)和 jsp 的知识。这部分因为我已经学过了,我就不再写博客来说明了。</p>
<p>此外建议看完前一篇文章 Tomcat 架构再来哦~</p>
<p>那么先来展示一个简单的内存马:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"></summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>基础篇 - Tomcat 架构</title>
<link href="https://changeyourway.github.io/2024/09/26/Java%20%E5%AE%89%E5%85%A8/%E5%9F%BA%E7%A1%80%E7%AF%87-Tomcat%E6%9E%B6%E6%9E%84/"/>
<id>https://changeyourway.github.io/2024/09/26/Java%20%E5%AE%89%E5%85%A8/%E5%9F%BA%E7%A1%80%E7%AF%87-Tomcat%E6%9E%B6%E6%9E%84/</id>
<published>2024-09-26T07:28:22.567Z</published>
<updated>2024-09-26T10:20:52.315Z</updated>
<summary type="html"><h2 id="Tomcat-介绍"><a href="#Tomcat-介绍" class="headerlink" title="Tomcat 介绍"></a>Tomcat 介绍</h2><p>Tomcat 是 Apache 软件基金会开发的一个开源 Java Servlet 容器,用于运行 Java Web 应用程序。它实现了多个 Java EE 规范,如 Servlet、JSP(Java Server Pages)和 WebSocket 等,主要用于处理动态网页请求。作为一个轻量级的应用服务器,Tomcat 常用于开发和测试环境中,同时也适用于生产环境中的中小型应用。</p>
<h2 id="Tomcat-架构"><a href="#Tomcat-架构" class="headerlink" title="Tomcat 架构"></a>Tomcat 架构</h2><p>在 Tomcat Server 中,核心架构主要由三个组件组成:<strong>Service</strong>、<strong>Connector</strong> 和 <strong>Container</strong>。它们共同构成了 Tomcat 的请求处理和应用管理机制。</p>
<img src="/images/Tomcat-2.png">
<p>以下是对这三个组件的介绍:</p>
<h3 id="Service-服务"><a href="#Service-服务" class="headerlink" title="Service (服务)"></a>Service (服务)</h3><ul>
<li><strong>功能</strong>:<code>Service</code> 是 Tomcat 中用于组织和管理多个 <code>Connector</code> 和一个 <code></summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>漏洞篇 - Fastjson 反序列化</title>
<link href="https://changeyourway.github.io/2024/09/18/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-Fastjson%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96/"/>
<id>https://changeyourway.github.io/2024/09/18/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-Fastjson%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96/</id>
<published>2024-09-18T02:22:44.238Z</published>
<updated>2024-09-26T10:40:12.395Z</updated>
<summary type="html"><h2 id="Fastjson-介绍"><a href="#Fastjson-介绍" class="headerlink" title="Fastjson 介绍"></a>Fastjson 介绍</h2><p>Fastjson 是阿里巴巴开发的一个高性能 JSON 解析库,广泛应用于 Java 项目中。它的主要功能是对 JSON 数据进行序列化和反序列化,即将 Java 对象转换为 JSON 字符串,或者将 JSON 字符串解析为 Java 对象。Fastjson 的优势在于其速度和灵活性,特别是在处理大规模数据时性能表现良好。</p>
<h3 id="快速入门"><a href="#快速入门" class="headerlink" title="快速入门"></a>快速入门</h3><p>导入如下依赖:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&lt;dependencies&gt;</span><br><span class="line"> &lt;dependency&gt;</span><br><span class="</summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>漏洞篇 - 关于 JEP 290</title>
<link href="https://changeyourway.github.io/2024/09/08/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-%E5%85%B3%E4%BA%8EJEP290/"/>
<id>https://changeyourway.github.io/2024/09/08/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-%E5%85%B3%E4%BA%8EJEP290/</id>
<published>2024-09-08T09:22:02.807Z</published>
<updated>2024-09-26T10:23:58.077Z</updated>
<summary type="html"><h2 id="JEP-290"><a href="#JEP-290" class="headerlink" title="JEP 290"></a>JEP 290</h2><p>JEP290 是 Java 底层为了缓解反序列化攻击提出的一种解决方案。这是一个针对 JAVA 9 提出的安全特性,但同时对 JDK 6,7,8 都进行了支持,在 JDK 6u141、JDK 7u131、JDK 8u121 版本进行了更新。</p>
<p>JEP 290 主要提供了以下几个机制:</p>
<ul>
<li>用黑白名单的方式限制可反序列化的类;</li>
<li>限制反序列化的调用深度和复杂度;</li>
<li>为 RMI export 的对象设置了验证机制;</li>
<li>提供一个全局过滤器,可以在 properties 或配置文件中进行配置;</li>
</ul>
<p>现在使用 JDK 8u392 ,再次运行 ysoserial 中的 payloads&#x2F;JRMPListener 和 exploit&#x2F;JRMPClient ,会爆出如下错误:</p>
<img src="/images/image-20240908125709750.png">
<p>这在我之前的分析文章中也提到过,是由于 JEP 290 机制阻止了我反序列化 HashSet 类。</p>
<p>从报错信息中,可以发现一个 ObjectInputFilter 接口,其中定义了三种状态,分别是未定义、接受和拒绝:</p>
<img src="/images/image-20240908125941036.png">
<p>另外从报错信息中发现 ObjectInputStream 有一个 filterCheck 方法,这个方法与反序列化的检查相关:</p>
<figure class="h</summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>漏洞篇 - JNDI 注入详解</title>
<link href="https://changeyourway.github.io/2024/09/06/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-JNDI%E6%B3%A8%E5%85%A5%E8%AF%A6%E8%A7%A3/"/>
<id>https://changeyourway.github.io/2024/09/06/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-JNDI%E6%B3%A8%E5%85%A5%E8%AF%A6%E8%A7%A3/</id>
<published>2024-09-06T07:52:13.151Z</published>
<updated>2024-09-26T10:26:20.526Z</updated>
<summary type="html"><h2 id="JNDI-基础"><a href="#JNDI-基础" class="headerlink" title="JNDI 基础"></a>JNDI 基础</h2><p>JNDI 全称为 <strong>Java Naming and Directory Interface</strong>,即 Java 名称与目录接口。JNDI 提供了一种统一的接口来访问不同的命名和目录服务。它被广泛应用于企业级 Java 应用程序中,用于查找和访问各种资源,如数据库连接、EJB(Enterprise JavaBeans)组件、消息队列、环境变量等。</p>
<p>那么提到命名和目录服务,就有一些名词需要了解一下。</p>
<h3 id="命名服务(Naming-Service)"><a href="#命名服务(Naming-Service)" class="headerlink" title="命名服务(Naming Service)"></a>命名服务(Naming Service)</h3><p>所谓命名服务,就是通过名称查找实际对象的服务。比如:</p>
<ul>
<li>DNS:通过域名查找实际的 IP 地址;</li>
<li>文件系统:通过文件名定位到具体的文件;</li>
</ul>
<p>在命名服务中有一些重要的概念:</p>
<ul>
<li><strong>Bindings</strong>:表示一个名称和对应对象的绑定关系。</li>
<li><strong>Context</strong>:上下文,它是一个容器,代表了一个命名空间或环境,用户可以在其中查找、绑定和管理名字与对象之间的关联。</li>
<li><strong>References</strong>:引用,它用于表示某个名字所对应的对象的“指针”或“引用路径”。通过引用,命名服务能够提供对</summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>漏洞篇 - ysoserial 的 JRMP 模块分析</title>
<link href="https://changeyourway.github.io/2024/08/28/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-ysoserial%E7%9A%84JRMP%E6%A8%A1%E5%9D%97%E5%88%86%E6%9E%90/"/>
<id>https://changeyourway.github.io/2024/08/28/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-ysoserial%E7%9A%84JRMP%E6%A8%A1%E5%9D%97%E5%88%86%E6%9E%90/</id>
<published>2024-08-28T03:30:25.761Z</published>
<updated>2024-08-28T03:31:53.041Z</updated>
<summary type="html"><h2 id="JRMP-协议介绍"><a href="#JRMP-协议介绍" class="headerlink" title="JRMP 协议介绍"></a>JRMP 协议介绍</h2><p>JRMP(Java Remote Method Protocol)是为 Java RMI 设计的专有协议,负责处理 RMI 调用的实际网络传输。它是基于 TCP 的,确保了通信的可靠性和有序性。也就是说:RMI 使用 JRMP 协议来处理网络通信。</p>
<p>当然,RMI 并不止支持 JRMP 这一种协议,还可以使用比如 IIOP 协议来进行网络通信。</p>
<h2 id="ysoserial-中的-JRMP-模块"><a href="#ysoserial-中的-JRMP-模块" class="headerlink" title="ysoserial 中的 JRMP 模块"></a>ysoserial 中的 JRMP 模块</h2><p>通常有两种利用方式。</p>
<p>第一种:payloads&#x2F;JRMPListener + exploit&#x2F;JRMPClient </p>
<p>第二种:exploit&#x2F;JRMPListener + payloads&#x2F;JRMPClient </p>
<p>接下来我们会逐个分析这四个类。</p>
<h3 id="payloads-JRMPListener-exploit-JRMPClient"><a href="#payloads-JRMPListener-exploit-JRMPClient" class="headerlink" title="payloads&#x2F;JRMPListener + exploit&#x2F;JRMPClient"></a>payloads&#x2F;JRMPList</summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>漏洞篇 - RMI 相关的攻击</title>
<link href="https://changeyourway.github.io/2024/08/28/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-RMI%E7%9B%B8%E5%85%B3%E7%9A%84%E6%94%BB%E5%87%BB/"/>
<id>https://changeyourway.github.io/2024/08/28/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-RMI%E7%9B%B8%E5%85%B3%E7%9A%84%E6%94%BB%E5%87%BB/</id>
<published>2024-08-28T03:26:44.848Z</published>
<updated>2024-08-28T03:30:01.568Z</updated>
<summary type="html"><h2 id="攻击-RMI"><a href="#攻击-RMI" class="headerlink" title="攻击 RMI"></a>攻击 RMI</h2><p>前置知识:<a href="https://changeyourway.github.io/2024/07/08/Java%20%E5%AE%89%E5%85%A8/%E5%9F%BA%E7%A1%80%E7%AF%87-RMI%E8%BF%9C%E7%A8%8B%E6%96%B9%E6%B3%95%E8%B0%83%E7%94%A8%E5%8D%8F%E8%AE%AE/#%E6%9C%8D%E5%8A%A1%E7%AB%AF%E8%8E%B7%E5%8F%96-Registry-%E4%BB%A3%E7%90%86%E5%AF%B9%E8%B1%A1">基础篇 - RMI 协议详解</a> </p>
<p>我们可以将参与 RMI 远程调用的角色分为三个:Server 端、Registry 端、Client 端(一般来说 Server 端和 Registry 端在一起),它们三者之间都会进行通信,并且全部的通信流程均通过序列化与反序列化实现。基于此,我们可以实现反序列化攻击。</p>
<h3 id="攻击-Server-端"><a href="#攻击-Server-端" class="headerlink" title="攻击 Server 端"></a>攻击 Server 端</h3><h4 id="参数反序列化"><a href="#参数反序列化" class="headerlink" title="参数反序列化"></a>参数反序列化</h4><p>如果服务端提供的服务对象参数是 Object 类型,那么意味着客户端远程调用时可以传递任意类型的参数,这个参数将会被序列化发送到服务端,然后在服务端反序</summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>基础篇 - RMI 协议详解</title>
<link href="https://changeyourway.github.io/2024/07/08/Java%20%E5%AE%89%E5%85%A8/%E5%9F%BA%E7%A1%80%E7%AF%87-RMI%E8%BF%9C%E7%A8%8B%E6%96%B9%E6%B3%95%E8%B0%83%E7%94%A8%E5%8D%8F%E8%AE%AE/"/>
<id>https://changeyourway.github.io/2024/07/08/Java%20%E5%AE%89%E5%85%A8/%E5%9F%BA%E7%A1%80%E7%AF%87-RMI%E8%BF%9C%E7%A8%8B%E6%96%B9%E6%B3%95%E8%B0%83%E7%94%A8%E5%8D%8F%E8%AE%AE/</id>
<published>2024-07-08T08:09:08.067Z</published>
<updated>2024-09-26T10:28:24.362Z</updated>
<summary type="html"><p>RMI 入门案例及源码分析</p></summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>漏洞篇 - Java 反序列化之 Rome 链</title>
<link href="https://changeyourway.github.io/2024/06/07/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-Rome%E5%88%A9%E7%94%A8%E9%93%BE%E5%88%86%E6%9E%90/"/>
<id>https://changeyourway.github.io/2024/06/07/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-Rome%E5%88%A9%E7%94%A8%E9%93%BE%E5%88%86%E6%9E%90/</id>
<published>2024-06-07T09:44:56.493Z</published>
<updated>2024-10-14T06:25:01.025Z</updated>
<summary type="html"><p>ROME 是一个强大的 Java 库,用于解析和生成各种格式的 RSS 和 Atom feeds 。它兼容多种版本的 RSS(包括 RSS 0.90、0.91、0.92、0.93、0.94、1.0 和 2.0 )和 Atom(包括 0.3 和 1.0 )。ROME 提供了一个统一的 API ,简化了处理不同 feed 格式的复杂性。</p></summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>基础篇 - Javassist 使用指南</title>
<link href="https://changeyourway.github.io/2024/06/07/Java%20%E5%AE%89%E5%85%A8/%E5%9F%BA%E7%A1%80%E7%AF%87-javassist%E7%94%A8%E6%B3%95%E6%8C%87%E5%8D%97/"/>
<id>https://changeyourway.github.io/2024/06/07/Java%20%E5%AE%89%E5%85%A8/%E5%9F%BA%E7%A1%80%E7%AF%87-javassist%E7%94%A8%E6%B3%95%E6%8C%87%E5%8D%97/</id>
<published>2024-06-07T09:44:56.492Z</published>
<updated>2024-09-26T10:32:19.507Z</updated>
<summary type="html"><p>Javassist 是一个用于操作 Java 字节码的类库。Java 字节码存储在类文件的二进制文件中。每个类文件都包含一个 Java 类或接口。<br>类 Javassist.CtClass 是对类文件的抽象表示。(编译时类 CtClass )对象是处理类文件的句柄(句柄 Handle 是一个是用来标识对象或者项目的标识符)。</p></summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>漏洞篇 - Rome 链之 HotSwappableTargetSource 利用链</title>
<link href="https://changeyourway.github.io/2024/06/07/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-Rome%E9%93%BE%E4%B9%8BHotSwappableTargetSource%E9%93%BE/"/>
<id>https://changeyourway.github.io/2024/06/07/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-Rome%E9%93%BE%E4%B9%8BHotSwappableTargetSource%E9%93%BE/</id>
<published>2024-06-07T09:44:56.491Z</published>
<updated>2024-10-14T06:07:34.297Z</updated>
<summary type="html"><p>HotSwappableTargetSource 是在 Spring AOP 中出现的一个类。作用是可以在代理 bean 运行过程中,动态更新实际 bean 对象。HotSwappableTargetSource 类实现了 TargetSource 接口。对外暴露 getTarget 方法,提供真正的 target 对象。再说的明白一点,HotSwappableTargetSource 是对真正 target 对象的封装。在 Spring 的源码中,体现在 JdkDynamicAopProxy 中的 invoke 方法中。</p></summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>漏洞篇 - Java 反序列化之 CC4+CC2+CC5+CC7 链</title>
<link href="https://changeyourway.github.io/2024/06/05/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-CC4+CC2+CC5+CC7%E9%93%BE%E5%88%86%E6%9E%90/"/>
<id>https://changeyourway.github.io/2024/06/05/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-CC4+CC2+CC5+CC7%E9%93%BE%E5%88%86%E6%9E%90/</id>
<published>2024-06-05T06:03:01.842Z</published>
<updated>2024-09-26T10:35:07.863Z</updated>
<summary type="html"><h2 id="CC4-链"><a href="#CC4-链" class="headerlink" title="CC4 链"></a>CC4 链</h2><p>在 Commons Collections 版本为 3.2.1 的背景下,可以使用 TransformedMap 或者 LazyMap 来执行 transform 方法,但当 Commons Collections 的版本提升到 4.0 时,就又多出了一种办法:利用 TransformingComparator 来执行 transform 方法。</p>
<p>先前我们将 AnnotationInvocationHandler 和 HashMap 作为入口类,利用它们的 readObject 方法来反序列化,但是现在我们还可以利用 PriorityQueue 的 readObject 来反序列化。</p>
<p><strong>实验环境</strong> </p>
<ul>
<li>java &#x3D; 8u65</li>
<li>CommonsCollections &#x3D; 4.0</li>
</ul>
<p>pom.xml 中导入如下依赖:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">&lt</summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>漏洞篇 - Java 反序列化之 CC3 链</title>
<link href="https://changeyourway.github.io/2024/05/27/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-CC3%E9%93%BE%E5%88%86%E6%9E%90/"/>
<id>https://changeyourway.github.io/2024/05/27/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-CC3%E9%93%BE%E5%88%86%E6%9E%90/</id>
<published>2024-05-27T02:55:47.408Z</published>
<updated>2024-10-06T08:22:40.691Z</updated>
<summary type="html"><p>CC3 链的核心在于利用 TemplatesImpl 加载恶意类时执行静态代码块。</p></summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>内网渗透 03 - 隧道通信</title>
<link href="https://changeyourway.github.io/2024/05/16/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F03-%E9%9A%A7%E9%81%93%E9%80%9A%E4%BF%A1/"/>
<id>https://changeyourway.github.io/2024/05/16/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F03-%E9%9A%A7%E9%81%93%E9%80%9A%E4%BF%A1/</id>
<published>2024-05-16T07:07:30.219Z</published>
<updated>2024-10-06T08:14:34.737Z</updated>
<summary type="html"><p>网络隧道技术指的是利用一种网络协议来传输另一种网络协议,它主要利用网络隧道协议来实现这种功能。网络隧道技术涉及了三种网络协议,即网络隧道协议、隧道协议下面的承载协议和隧道协议所承载的被承载协议。</p></summary>
<category term="内网渗透" scheme="https://changeyourway.github.io/categories/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F/"/>
</entry>
<entry>
<title>内网渗透 02 - 端口扫描</title>
<link href="https://changeyourway.github.io/2024/05/16/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F02-%E5%86%85%E7%BD%91%E6%89%AB%E6%8F%8F/"/>
<id>https://changeyourway.github.io/2024/05/16/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F02-%E5%86%85%E7%BD%91%E6%89%AB%E6%8F%8F/</id>
<published>2024-05-16T03:27:02.888Z</published>
<updated>2024-10-06T08:06:49.105Z</updated>
<summary type="html"><p>收集内网 IP ,进行端口扫描。</p></summary>
<category term="内网渗透" scheme="https://changeyourway.github.io/categories/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F/"/>
</entry>
<entry>
<title>内网渗透 01 - 端口转发</title>
<link href="https://changeyourway.github.io/2024/05/16/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F01-%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91/"/>
<id>https://changeyourway.github.io/2024/05/16/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F01-%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91/</id>
<published>2024-05-16T02:55:28.868Z</published>
<updated>2024-10-06T07:54:27.066Z</updated>
<summary type="html"><p>在进行渗透测试过程中会遇到内网中的其他机器是不允许外网机器访问的,因此需要通过端口转发(即隧道)或将得到的外网服务器设置为代理,使得攻击机可以直接访问并操作内网中的其他机器,这一过程就叫做内网转发。</p></summary>
<category term="内网渗透" scheme="https://changeyourway.github.io/categories/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F/"/>
</entry>
<entry>
<title>漏洞篇 - Java 反序列化之 CC6 链</title>
<link href="https://changeyourway.github.io/2024/05/13/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-CC6%E9%93%BE%E5%88%86%E6%9E%90/"/>
<id>https://changeyourway.github.io/2024/05/13/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-CC6%E9%93%BE%E5%88%86%E6%9E%90/</id>
<published>2024-05-13T09:15:09.329Z</published>
<updated>2024-10-06T07:28:40.809Z</updated>
<summary type="html"><p>前面在分析 CC1链 的 ysoserial 版时,我们知道 LazyMap 的 get 方法会调用成员属性 factory 的 transform 方法,而我们上一次是通过 AnnotationInvocationHandler 的 invoke 方法来调用这个 get 方法的。那么还有哪里能调用 LazyMap 的 get 方法呢?我们的 CC6 链给出了另一条路径:TiedMapEntry 类的 getValue 方法会调用成员属性的 get 方法。</p></summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>漏洞篇 - CC1 链之 ysoserial 版</title>
<link href="https://changeyourway.github.io/2024/05/12/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-CC1%E9%93%BEysoserial%E7%89%88/"/>
<id>https://changeyourway.github.io/2024/05/12/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-CC1%E9%93%BEysoserial%E7%89%88/</id>
<published>2024-05-12T10:20:51.663Z</published>
<updated>2024-10-06T07:15:20.717Z</updated>
<summary type="html"><p>在前面学习 CC1 链时,我们使用 TransformedMap 作为利用链,但其实除了 TransformedMap 之外,还有 DefaultedMap 和 LazyMap 也可以作为利用链,它们都在 org.apache.commons.collections.map 包下。这一节我们来分析 ysoserial 工具中利用的 CC1 链,它是将 LazyMap 作为利用链的。</p></summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>配置篇 - IDEA 查看带 sun 包的 JDK 源码</title>
<link href="https://changeyourway.github.io/2024/05/12/Java%20%E5%AE%89%E5%85%A8/%E9%85%8D%E7%BD%AE%E7%AF%87-idea%E6%9F%A5%E7%9C%8BJDK%E5%92%8C%E4%BE%9D%E8%B5%96%E7%9A%84%E6%BA%90%E7%A0%81/"/>
<id>https://changeyourway.github.io/2024/05/12/Java%20%E5%AE%89%E5%85%A8/%E9%85%8D%E7%BD%AE%E7%AF%87-idea%E6%9F%A5%E7%9C%8BJDK%E5%92%8C%E4%BE%9D%E8%B5%96%E7%9A%84%E6%BA%90%E7%A0%81/</id>
<published>2024-05-12T10:16:39.906Z</published>
<updated>2024-05-12T10:20:35.477Z</updated>
<summary type="html"><p>前言:前面在分析初始版本 CC1 链的时候,查看 sun 包里的 AnnotationInvocationHandler 类的源码,发现变量名全都是 var 开头,非常不便于阅读,接下来将介绍如何使用 IDEA 查看带 sun 包的 JDK 源码,以及导入的依赖源码,这里的源码指的是 .java 文件。</p></summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>基础篇 - Java 动态代理</title>
<link href="https://changeyourway.github.io/2024/05/11/Java%20%E5%AE%89%E5%85%A8/%E5%9F%BA%E7%A1%80%E7%AF%87-Java%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86/"/>
<id>https://changeyourway.github.io/2024/05/11/Java%20%E5%AE%89%E5%85%A8/%E5%9F%BA%E7%A1%80%E7%AF%87-Java%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86/</id>
<published>2024-05-11T11:41:10.919Z</published>
<updated>2024-10-06T07:04:40.522Z</updated>
<summary type="html"><p>在 Java 动态代理中,代理对象能够通过调用 invoke 方法来增强被代理对象的原始方法。</p></summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>配置篇 - Maven 手动下载与导入依赖</title>
<link href="https://changeyourway.github.io/2024/05/10/Java%20%E5%AE%89%E5%85%A8/%E9%85%8D%E7%BD%AE%E7%AF%87-Maven%E6%89%8B%E5%8A%A8%E4%B8%8B%E8%BD%BD%E4%B8%8E%E5%AF%BC%E5%85%A5%E4%BE%9D%E8%B5%96/"/>
<id>https://changeyourway.github.io/2024/05/10/Java%20%E5%AE%89%E5%85%A8/%E9%85%8D%E7%BD%AE%E7%AF%87-Maven%E6%89%8B%E5%8A%A8%E4%B8%8B%E8%BD%BD%E4%B8%8E%E5%AF%BC%E5%85%A5%E4%BE%9D%E8%B5%96/</id>
<published>2024-05-10T11:53:40.081Z</published>
<updated>2024-10-06T07:03:35.211Z</updated>
<summary type="html"><p>遇到 maven 无法自动导入的依赖怎么办,本文介绍了如何手动下载与导入 maven 依赖</p></summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>漏洞篇 - URLDNS 利用链分析</title>
<link href="https://changeyourway.github.io/2024/05/10/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-URLDNS%E5%88%A9%E7%94%A8%E9%93%BE%E5%88%86%E6%9E%90/"/>
<id>https://changeyourway.github.io/2024/05/10/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-URLDNS%E5%88%A9%E7%94%A8%E9%93%BE%E5%88%86%E6%9E%90/</id>
<published>2024-05-10T11:53:40.080Z</published>
<updated>2024-10-06T06:57:34.845Z</updated>
<summary type="html"><p>本文详尽地讲述了 URLDNS 反序列化利用链的原理</p></summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>漏洞篇 - Java 反序列化之 CC1 链</title>
<link href="https://changeyourway.github.io/2024/05/10/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-CC1%E9%93%BE%E5%88%86%E6%9E%90/"/>
<id>https://changeyourway.github.io/2024/05/10/Java%20%E5%AE%89%E5%85%A8/%E6%BC%8F%E6%B4%9E%E7%AF%87-CC1%E9%93%BE%E5%88%86%E6%9E%90/</id>
<published>2024-05-10T11:53:40.079Z</published>
<updated>2024-10-06T06:31:00.654Z</updated>
<summary type="html"><p>Apache Commons Collections 是对 java.util.Collection 的扩展,对常用的集合操作进行了很好的封装、抽象和补充,在保证性能的同时大大简化代码。CC 链正是在 Commons Collections 包中的反序列化利用链,本次介绍的是 CC1 链。</p></summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>基础篇 - Java 的类加载与反射</title>
<link href="https://changeyourway.github.io/2024/05/10/Java%20%E5%AE%89%E5%85%A8/%E5%9F%BA%E7%A1%80%E7%AF%87-Java%E7%9A%84%E7%B1%BB%E5%8A%A0%E8%BD%BD%E4%B8%8E%E5%8F%8D%E5%B0%84/"/>
<id>https://changeyourway.github.io/2024/05/10/Java%20%E5%AE%89%E5%85%A8/%E5%9F%BA%E7%A1%80%E7%AF%87-Java%E7%9A%84%E7%B1%BB%E5%8A%A0%E8%BD%BD%E4%B8%8E%E5%8F%8D%E5%B0%84/</id>
<published>2024-05-10T11:53:40.078Z</published>
<updated>2024-06-11T02:17:08.093Z</updated>
<summary type="html"><p>本文介绍了 Java 的类加载与反射机制,概括了获得 Class 对象的几种方式,以及总结了反射获取类信息的方法。</p></summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
<entry>
<title>基础篇 - Java 序列化与反序列化</title>
<link href="https://changeyourway.github.io/2024/05/10/Java%20%E5%AE%89%E5%85%A8/%E5%9F%BA%E7%A1%80%E7%AF%87-Java%E5%BA%8F%E5%88%97%E5%8C%96%E4%B8%8E%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96/"/>
<id>https://changeyourway.github.io/2024/05/10/Java%20%E5%AE%89%E5%85%A8/%E5%9F%BA%E7%A1%80%E7%AF%87-Java%E5%BA%8F%E5%88%97%E5%8C%96%E4%B8%8E%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96/</id>
<published>2024-05-10T11:53:40.077Z</published>
<updated>2024-05-02T06:20:56.563Z</updated>
<summary type="html"><p>Java 序列化是指把 Java 对象转换为字节序列的过程,而 Java 反序列化是指把字节序列恢复为 Java 对象的过程。本文详细讲解了 Java 序列化与反序列化的实现。</p></summary>
<category term="Java 安全" scheme="https://changeyourway.github.io/categories/Java-%E5%AE%89%E5%85%A8/"/>
</entry>
</feed>