FastJSON 不出网利用方式

1. 本地文件读写

这是最常见的一种不出网利用方式。FastJson 的反序列化漏洞可以被利用来调用一些特定的类,这些类能够处理文件操作。

  • 本地文件读取: 我们可以利用 com.sun.rowset.JdbcRowSetImpl 类,在 dataSourceName 属性中构造一个特殊的 JNDI 字符串,例如 rmi://localhost:1099/Evil。在无法出网的情况下,这个 RMI 请求会失败,但如果我们将利用链和本地文件操作相结合,比如通过加载一些可以处理本地文件路径的类,理论上可以实现本地文件读取。一个更直接且知名的利用方式是利用 javax.imageio.ImageIO 类,通过 read() 方法加载一个恶意的 TIFF 或 GIF 文件,如果这个文件包含了特殊的 Payload,就能触发进一步的利用
  • 本地文件写入: 我们可以利用一些可以写文件的类,例如通过加载一些可以处理文件路径的类,并结合一些 gadget 链来构造一个可以写入文件的 Payload。这需要我们对 FastJson 的 Gadget 链有深入的理解,并找到合适的类来完成文件写入操作

2. 命令执行

如果能找到一个可以触发本地命令执行的 Gadget 链,那么即使不出网也能直接在目标服务器上执行命令

com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl: 这是 FastJson 漏洞利用中最经典的 Gadget 之一。通过控制 _bytecodes 字段,我们可以加载一个恶意的 Java 类。这个类在被加载和实例化时,可以在其静态代码块或者构造函数中执行本地命令,例如 Runtime.getRuntime().exec("command")

org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor 等其他 Gadget: 除了 TemplatesImpl,还有很多其他的 Gadget 链可以被利用来触发命令执行。这些 Gadget 链通常涉及到不同的库和类,但其核心思想都是通过反序列化加载一个恶意类,并在该类中执行命令

3. 内存马注入

这是一种更高级的无文件攻击方式

  • 动态注入: 我们可以利用 FastJson 的反序列化漏洞,通过一些特殊的 Gadget 链,在内存中动态地注入一个 Webshell。这个 Webshell 不会以文件的形式存在于磁盘上,而是直接运行在内存中。攻击者可以通过访问特定的 URL 或者发送特定的请求来与这个内存马进行交互,从而实现命令执行、文件管理等操作。这种方式由于没有落地文件,可以有效规避基于文件哈希或特征的检测
Copyright © 版权信息 all right reserved,powered by Gitbook该文件修订时间: 2025-09-25 03:13:20

results matching ""

    No results matching ""