wJa (D&S&I)AST 工具
字数 1913 2025-08-29 08:30:36
wJa 工具使用教学文档
1. wJa 工具概述
wJa 是一款综合性应用程序安全分析工具,结合了 DAST(动态应用安全测试)、SAST(静态应用安全测试)和 IAST(交互式应用安全测试)三种测试方法,专门用于 Java Web 程序的安全性分析。
主要功能
- 反编译 Java 字节码
- 代码审计
- 调试 JAR 包
- 代理追踪
- 安全漏洞检测(SQL 注入、Fastjson 反序列化等)
- 危险库检测
2. 环境准备
系统要求
- JDK 1.8 或更高版本
启动方式
java -jar wJa.jar
启动后需要选择要分析的 JAR 包程序。
3. 用户界面介绍
菜单栏目
- File: 保存当前的 Cheetah 脚本
- Script: 运行/停止当前 Cheetah 脚本
左边栏目
- Decompile: 反编译文件结构
- CheetahLangue: Cheetah 自带的支持库函数信息和当前工作区的 Cheetah 脚本
中间栏目
- Decompile: 显示反编译的 Java 代码
- CheetahLangue: 编辑 Cheetah 脚本代码
- DebugJar: JAR 文件调试
- Web: 简易浏览器
4. Cheetah 脚本语言
Cheetah 是 wJa 引入的基于 Java 开发的专门针对渗透测试的脚本解析语言,用于灵活应对复杂的代码审计场景。
学习资源
- GitHub 仓库: https://github.com/Wker666/Demo
5. 核心功能详解
5.1 反编译功能
wJa 的反编译功能可以将 Java 字节码反编译为可读的 Java 代码,虽然与源代码不完全相同,但在语义上没有区别,足以用于安全分析。
5.2 调试 JAR 包
wJa 会自动启动 JAR 包并注入 agent,附加到 JAR 包进程上,提供追踪真实调用链和调试功能。
调试步骤:
- 在 DebugJar 栏目中
- 输入要调试的类名(如
org/joychou/controller/SQLI) - 输入方法名(如
jdbc_sqli_vul) - 点击 "get method content" 按钮
- 在代码行号前输入字节码偏移量设置断点
- 通过浏览器访问对应接口触发断点
5.3 IAST 跟踪
通过调用以下方法进行 IAST 跟踪:
StartRecordFun(): 开始跟踪StopRecordFun(className.methodName): 结束跟踪并返回执行流数组
注意: 需要在 config/agent_exclude.txt 中指定不注入的类前缀(如 org/springframework)
6. 漏洞检测案例
6.1 SQL 注入检测
检测原理
- 找到入口点(Spring 接口)
- 追踪变量流向
- 检查是否到达危险方法(如
java/sql/Statement.executeQuery) - 检查路径中是否有过滤函数
- 生成测试链接进行黑盒验证
关键函数
function SQLTrack(className) {
// 扫描类中的所有方法
// 对每个方法的每个参数进行SQL注入追踪
}
function trackSQL(className, methodName, url, argIndex) {
// 追踪变量流向
// 检查过滤函数
// 生成测试链接
}
function judgeSQLI(api) {
// 通过or条件判断是否存在SQL注入
res = HttpGet(api, cookie);
res1 = HttpGet(api."%27%20or%201=1--+", cookie);
// 比较响应长度判断是否存在漏洞
}
过滤函数检测
function filter(sentence, trackName) {
// 检查是否存在类型转换过滤
# define filter1 = String.valueOf(.*?
# define filter2 = Integer.valueOf(.*?
# define filter3 = Long.valueOf(.*?
}
6.2 危险库检测
wJa 可以扫描 pom.xml 导入的库,判断是否存在危险的组件(如 Fastjson、Log4j)。
6.3 Fastjson 检测
检测原理
- 查找使用
com/alibaba/fastjson/JSONObject.parseObject的地方 - 生成包含 DNS 查询的 payload
- 通过 DNS 回显判断是否存在漏洞
关键函数
function judgeFastjson(api) {
domain = getDnsLogDomain();
payload = "%7B%22%40type%22%3A%22java.net.Inet4Address%22%2C%22val%22%3A%22".domain."%22%7D";
res1 = HttpGet(api.payload, cookie);
// 检查DNS记录判断是否存在漏洞
}
6.4 MyBatis 类型 SQL 注入
检测原理
- 从
application.properties获取 MyBatis mapper 位置 - 解析 XML 文件获取 SQL 映射
- 动态设置 sink 点进行检测
关键函数
function getAllMapperXmlFileNames() {
// 从application.properties获取mybatis-plus.mapper-locations
// 返回所有mapper XML文件
}
function MybatisSQLTrack(className) {
// 对每个mapper方法进行SQL注入检测
}
7. 高级功能
7.1 流式算法
wJa 实现了流式算法,可以追踪包括 Map 在内的变量跳转,并根据 Java 的实现类和子类进行跳转扫描,确保所有调用链的完整扫描。
7.2 动态分析
结合静态分析和动态执行,能够更准确地判断漏洞是否存在。
8. 项目资源
- GitHub 仓库: https://github.com/Wker666/wJa
- 问题反馈: 在 GitHub issue 中提出
9. 总结
wJa 是一款功能强大的 Java Web 应用安全分析工具,通过结合静态分析、动态测试和交互式分析,能够有效地发现应用中的安全漏洞。掌握 Cheetah 脚本语言可以更灵活地进行代码审计和漏洞检测。
建议用户:
- 熟悉 Cheetah 脚本语言
- 了解 Java 字节码和反编译原理
- 掌握常见漏洞的检测原理
- 根据实际项目调整检测脚本