修改ysoserial使其支持任意代码执行

修改ysoserial使其支持任意代码执行

💡 原文中文,约2600字,阅读约需7分钟。
📝

内容提要

本文介绍如何修改ysoserial工具,使其支持任意代码执行并减小payload体积。新增五种执行方式:command、code、codebase64、codefile和classfile,支持自定义方法或类。通过去除原版特征字段(如ysoserial、Pwer)并更改包名,显著降低payload大小,提升隐蔽性。文中提供具体命令示例和代码案例,适用于安全测试场景。

🔎

延伸解读

五种执行方式的设计考量

文章新增了五种执行方式,其中command与原版相同,而code、codebase64、codefile和classfile则针对不同场景设计。code适用于代码量少的情况,codebase64可避免特殊字符与命令行冲突,codefile适合代码量多时,classfile则直接利用已编译的class字节码。这种设计旨在提高灵活性和隐蔽性,但需注意不同方式对输入格式和依赖环境的要求。

隐蔽性提升与特征去除

通过将包名从ysoserial改为dogeser,并去除原版大量使用的ysoserial、Pwer等特征字段,生成的payload体积显著减小,且不易被安全设备识别。但需注意,去除特征可能影响工具原有功能的兼容性,且修改后的工具仍可能被其他检测方式发现,因此在实际使用中应结合其他混淆手段。

使用限制与注意事项

classfile方式要求类必须继承JDK内置的AbstractTranslet,而非xalan库中的版本,否则可能无法正常工作。此外,codefile和codebase64方式需要确保目标环境能访问指定路径或正确解码,否则可能导致执行失败。文章未提及这些方式在复杂网络环境下的稳定性,使用时需自行测试。

Q&A

如何修改ysoserial使其支持任意代码执行?

通过改造ysoserial的payload生成方法,添加了五种执行方式:command、code、codebase64、codefile和classfile,支持自定义方法或类,从而支持任意代码执行。

ysoserial新增的codebase64、codefile和classfile三种命令如何使用?

codebase64用于代码内容base64编码,防止特殊字符冲突;codefile用于代码量较多时指定代码文件路径;classfile用于直接使用已生成的class文件获取字节码。示例:java -jar dogeser-0.0.8-SNAPSHOT-all.jar CommonsBeanutils1 code:calc 或 codefile:Calc.java 或 classfile:G:\Calc.class>2.ser。

如何减小ysoserial生成的payload体积?

通过去除原版特征字段(如ysoserial、Pwer)并更改包名(如改为dogeser),可以显著减小payload体积,对比结果直接减小一半多。

ysoserial新增的classfile方式对类有什么要求?

使用classfile方式时,类需要继承AbstractTranslet,且必须是JDK内置的com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet,而不是xalan库中的。

ysoserial新增的code方式如何执行代码?

code方式直接在命令行中指定代码内容,例如:java -jar dogeser-0.0.8-SNAPSHOT-all.jar CommonsBeanutils1 code:calc,其中calc为要执行的命令。

ysoserial修改后如何去除原版特征?

通过去除原版大量使用的ysoserial、Pwer字段,并将包名改为dogeser,生成的payload中就不会出现ysoserial字段,从而去除特征。

🏷️

标签

➡️

继续阅读