内存对象搜索原理剖析
字数 1837 2025-08-26 22:11:51

Java内存对象搜索工具原理与使用详解

一、工具概述

java-object-searcher是一款Java内存对象搜索工具,能够快速定位内存中关键变量的具体位置。该工具不仅可以快速找到特定的中间回显方法,还能定位到用户自定义的任何关键词路径。

二、工具结构

工具分为三个主要包:

  1. entity包:包含核心数据结构类

    • Blacklist - 黑名单类
    • Keyword - 关键词类
    • NodeT - 节点跟踪类
  2. searcher包:包含搜索器实现

    • JavaObjectSearcher - 普通搜索器
    • SearchRequestByBFS - 广度优先搜索器
    • SearchRequestByDFS - 深度优先搜索器
  3. utils包:包含实用工具类

三、核心类详解

1. Blacklist类

作用:定义需要过滤的对象黑名单,减少搜索范围,提高搜索效率。

主要属性

  • field_name:需要过滤的类名
  • field_value:需要过滤的值
  • field_type:需要过滤的类型

典型黑名单对象

  • 基本数据类型包装类:java.lang.Bytejava.lang.Short
  • 其他常见类:java.io.Filejava.lang.String

2. Keyword类

作用:定义需要搜索的对象特征。

主要属性

  • field_name:目标对象名称
  • field_value:目标对象值
  • field_type:目标对象类型

3. NodeT类

作用:记录搜索过程中的节点信息。

主要属性

  • chain:利用链记录
  • field_name:当前节点名称
  • field_object:当前节点类对象
  • current_depth:当前节点相对于入口的深度

四、搜索器实现

1. SearchRequestByBFS(广度优先搜索器)

特点

  • 使用队列实现
  • 按层级逐步扩展搜索范围
  • 适合寻找最短路径

核心流程

  1. 初始化时传入目标对象和关键词列表
  2. 将初始节点加入队列
  3. 循环处理队列中的节点:
    • 检查搜索深度限制
    • 检查对象是否为null
    • 检查是否为系统类型
    • 检查是否在黑名单中
  4. 对象匹配:
    • 使用MatchUtil.matchObject方法
    • 支持模糊匹配(contains方法)
  5. 对象拆解:
    • Map对象:处理所有values
    • 数组对象:处理所有元素
    • Class对象:处理所有属性和父类属性

2. SearchRequestByDFS(深度优先搜索器)

特点

  • 使用递归/即时匹配实现
  • 沿一条路径深入到底
  • 适合探索完整路径

核心流程

  1. 检查搜索深度限制
  2. 筛选目标对象
  3. 根据对象类型处理:
    • Map对象:递归处理所有values
    • 数组对象:递归处理所有元素
    • Class对象:递归处理所有属性和父类属性

五、使用方法

基本使用示例

// 设置搜索类型包含Request关键字的对象
List<Keyword> keys = new ArrayList<>();
keys.add(new Keyword.Builder().setField_type("Request").build());

// 定义黑名单
List<Blacklist> blacklists = new ArrayList<>();
blacklists.add(new Blacklist.Builder().setField_type("java.io.File").build());

// 新建广度优先搜索器
SearchRequstByBFS searcher = new SearchRequstByBFS(Thread.currentThread(), keys);

// 设置黑名单
searcher.setBlacklists(blacklists);

// 打开调试模式,生成log日志
searcher.setIs_debug(true);

// 设置挖掘深度
searcher.setMax_search_depth(20);

// 设置报告保存位置
searcher.setReport_save_path("D:\\apache-tomcat-7.0.94\\bin");

// 开始搜索
searcher.searchObject();

部署方式

  1. 源码打包

    • 从GitHub下载源码
    • 使用Maven打包成jar
  2. 加载方式

    • 添加到目标项目的classpath中
    • 或添加到JDK的ext目录下(随JDK一起加载)

六、匹配原理

  1. 匹配流程

    • 遍历keyword_list中的每个Keyword对象
    • 检查field_name/field_value/field_type是否匹配
    • 使用isIn方法进行模糊匹配(转为小写后contains)
  2. 匹配成功处理

    • 调用CommonUtil.write2log记录调用链
    • 根据is_debug设置决定是否输出日志

七、性能优化

  1. 黑名单机制

    • 排除不可能包含目标对象的类型
    • 显著减少搜索对象数量
  2. 深度控制

    • 通过max_search_depth限制搜索范围
    • 避免无限递归或过深搜索
  3. 去重机制

    • 使用visited属性避免重复匹配

八、实际应用

在Spring Boot 2.5.0环境中,使用该工具可以找到构造回显的调用链。通过分析搜索结果,可以定位到可用于漏洞利用的关键对象和方法。

九、总结

java-object-searcher工具通过:

  1. 灵活的黑名单和关键词设置
  2. 两种搜索算法选择(BFS/DFS)
  3. 完善的节点跟踪和日志记录
    实现了高效的内存对象搜索功能,是Java安全研究和漏洞挖掘中的实用工具。

关键点:

  • 合理设置黑名单可大幅提高搜索效率
  • 根据需求选择BFS(最短路径)或DFS(完整路径)
  • 调试模式和日志记录对分析非常有帮助
  • 深度控制避免资源耗尽
Java内存对象搜索工具原理与使用详解 一、工具概述 java-object-searcher是一款Java内存对象搜索工具,能够快速定位内存中关键变量的具体位置。该工具不仅可以快速找到特定的中间回显方法,还能定位到用户自定义的任何关键词路径。 二、工具结构 工具分为三个主要包: entity包 :包含核心数据结构类 Blacklist - 黑名单类 Keyword - 关键词类 NodeT - 节点跟踪类 searcher包 :包含搜索器实现 JavaObjectSearcher - 普通搜索器 SearchRequestByBFS - 广度优先搜索器 SearchRequestByDFS - 深度优先搜索器 utils包 :包含实用工具类 三、核心类详解 1. Blacklist类 作用 :定义需要过滤的对象黑名单,减少搜索范围,提高搜索效率。 主要属性 : field_name :需要过滤的类名 field_value :需要过滤的值 field_type :需要过滤的类型 典型黑名单对象 : 基本数据类型包装类: java.lang.Byte 、 java.lang.Short 等 其他常见类: java.io.File 、 java.lang.String 等 2. Keyword类 作用 :定义需要搜索的对象特征。 主要属性 : field_name :目标对象名称 field_value :目标对象值 field_type :目标对象类型 3. NodeT类 作用 :记录搜索过程中的节点信息。 主要属性 : chain :利用链记录 field_name :当前节点名称 field_object :当前节点类对象 current_depth :当前节点相对于入口的深度 四、搜索器实现 1. SearchRequestByBFS(广度优先搜索器) 特点 : 使用队列实现 按层级逐步扩展搜索范围 适合寻找最短路径 核心流程 : 初始化时传入目标对象和关键词列表 将初始节点加入队列 循环处理队列中的节点: 检查搜索深度限制 检查对象是否为null 检查是否为系统类型 检查是否在黑名单中 对象匹配: 使用 MatchUtil.matchObject 方法 支持模糊匹配(contains方法) 对象拆解: Map对象:处理所有values 数组对象:处理所有元素 Class对象:处理所有属性和父类属性 2. SearchRequestByDFS(深度优先搜索器) 特点 : 使用递归/即时匹配实现 沿一条路径深入到底 适合探索完整路径 核心流程 : 检查搜索深度限制 筛选目标对象 根据对象类型处理: Map对象:递归处理所有values 数组对象:递归处理所有元素 Class对象:递归处理所有属性和父类属性 五、使用方法 基本使用示例 部署方式 源码打包 : 从GitHub下载源码 使用Maven打包成jar 加载方式 : 添加到目标项目的classpath中 或添加到JDK的ext目录下(随JDK一起加载) 六、匹配原理 匹配流程 : 遍历keyword_ list中的每个Keyword对象 检查field_ name/field_ value/field_ type是否匹配 使用 isIn 方法进行模糊匹配(转为小写后contains) 匹配成功处理 : 调用 CommonUtil.write2log 记录调用链 根据is_ debug设置决定是否输出日志 七、性能优化 黑名单机制 : 排除不可能包含目标对象的类型 显著减少搜索对象数量 深度控制 : 通过max_ search_ depth限制搜索范围 避免无限递归或过深搜索 去重机制 : 使用visited属性避免重复匹配 八、实际应用 在Spring Boot 2.5.0环境中,使用该工具可以找到构造回显的调用链。通过分析搜索结果,可以定位到可用于漏洞利用的关键对象和方法。 九、总结 java-object-searcher工具通过: 灵活的黑名单和关键词设置 两种搜索算法选择(BFS/DFS) 完善的节点跟踪和日志记录 实现了高效的内存对象搜索功能,是Java安全研究和漏洞挖掘中的实用工具。 关键点: 合理设置黑名单可大幅提高搜索效率 根据需求选择BFS(最短路径)或DFS(完整路径) 调试模式和日志记录对分析非常有帮助 深度控制避免资源耗尽