From e68619d1c2068f964464d59f1b093058ea7bcb7c Mon Sep 17 00:00:00 2001
From: gh0stkey <24655118+gh0stkey@users.noreply.github.com>
Date: Thu, 12 Oct 2023 21:38:27 +0800
Subject: [PATCH] Version: 2.5 Update
---
README.md | 34 +-
images/config.png | Bin 57023 -> 50652 bytes
images/databoard.png | Bin 55887 -> 103024 bytes
images/{16000720732854.png => markinfo.png} | Bin
images/{16000719723284.jpg => rgperson.jpg} | Bin
src/main/java/burp/BurpExtender.java | 73 +++-
src/main/java/burp/action/DoAction.java | 38 --
src/main/java/burp/action/ExtractContent.java | 146 -------
src/main/java/burp/action/GetColorKey.java | 29 --
src/main/java/burp/action/MatchHTTP.java | 20 -
.../{Config.java => config/ConfigEntry.java} | 10 +-
src/main/java/burp/config/ConfigLoader.java | 131 +++++++
src/main/java/burp/core/GlobalCachePool.java | 26 ++
.../processor/ColorProcessor.java} | 40 +-
.../core/processor/DataProcessingUnit.java | 201 ++++++++++
.../processor/MessageProcessor.java} | 56 +--
.../java/burp/core/utils/HashCalculator.java | 28 ++
src/main/java/burp/core/utils/MatchTool.java | 24 ++
.../java/burp/core/utils/StringHelper.java | 30 ++
src/main/java/burp/rule/RuleProcessor.java | 98 +++++
src/main/java/burp/rule/model/Rule.java | 35 ++
src/main/java/burp/rule/model/RuleGroup.java | 37 ++
src/main/java/burp/rule/utils/RuleTool.java | 35 ++
src/main/java/burp/rule/utils/YamlTool.java | 35 ++
src/main/java/burp/ui/Databoard.java | 248 ------------
.../java/burp/ui/JTabbedPaneCloseButton.java | 114 ------
src/main/java/burp/ui/MainUI.java | 125 +++---
src/main/java/burp/ui/RuleSetting.java | 118 ------
.../ui/board/CustomTableCellRenderer.java | 64 ++++
src/main/java/burp/ui/board/Databoard.java | 358 ++++++++++++++++++
src/main/java/burp/ui/board/LogEntry.java | 47 +++
src/main/java/burp/ui/board/MessagePanel.java | 345 +++++++++++++++++
.../java/burp/ui/{ => rule}/RulePane.java | 84 ++--
src/main/java/burp/ui/rule/RuleSetting.java | 71 ++++
src/main/java/burp/yaml/LoadConfig.java | 162 --------
src/main/java/burp/yaml/RulesConfig.java | 12 -
src/main/java/burp/yaml/SetConfig.java | 101 -----
src/main/java/burp/yaml/template/Rule.java | 93 -----
src/main/java/burp/yaml/template/Rules.java | 37 --
39 files changed, 1776 insertions(+), 1329 deletions(-)
rename images/{16000720732854.png => markinfo.png} (100%)
rename images/{16000719723284.jpg => rgperson.jpg} (100%)
delete mode 100644 src/main/java/burp/action/DoAction.java
delete mode 100644 src/main/java/burp/action/ExtractContent.java
delete mode 100644 src/main/java/burp/action/GetColorKey.java
delete mode 100644 src/main/java/burp/action/MatchHTTP.java
rename src/main/java/burp/{Config.java => config/ConfigEntry.java} (91%)
create mode 100644 src/main/java/burp/config/ConfigLoader.java
create mode 100644 src/main/java/burp/core/GlobalCachePool.java
rename src/main/java/burp/{action/UpgradeColor.java => core/processor/ColorProcessor.java} (52%)
create mode 100644 src/main/java/burp/core/processor/DataProcessingUnit.java
rename src/main/java/burp/{action/ProcessMessage.java => core/processor/MessageProcessor.java} (62%)
create mode 100644 src/main/java/burp/core/utils/HashCalculator.java
create mode 100644 src/main/java/burp/core/utils/MatchTool.java
create mode 100644 src/main/java/burp/core/utils/StringHelper.java
create mode 100644 src/main/java/burp/rule/RuleProcessor.java
create mode 100644 src/main/java/burp/rule/model/Rule.java
create mode 100644 src/main/java/burp/rule/model/RuleGroup.java
create mode 100644 src/main/java/burp/rule/utils/RuleTool.java
create mode 100644 src/main/java/burp/rule/utils/YamlTool.java
delete mode 100644 src/main/java/burp/ui/Databoard.java
delete mode 100644 src/main/java/burp/ui/JTabbedPaneCloseButton.java
delete mode 100644 src/main/java/burp/ui/RuleSetting.java
create mode 100644 src/main/java/burp/ui/board/CustomTableCellRenderer.java
create mode 100644 src/main/java/burp/ui/board/Databoard.java
create mode 100644 src/main/java/burp/ui/board/LogEntry.java
create mode 100644 src/main/java/burp/ui/board/MessagePanel.java
rename src/main/java/burp/ui/{ => rule}/RulePane.java (79%)
create mode 100644 src/main/java/burp/ui/rule/RuleSetting.java
delete mode 100644 src/main/java/burp/yaml/LoadConfig.java
delete mode 100644 src/main/java/burp/yaml/RulesConfig.java
delete mode 100644 src/main/java/burp/yaml/SetConfig.java
delete mode 100644 src/main/java/burp/yaml/template/Rule.java
delete mode 100644 src/main/java/burp/yaml/template/Rules.java
diff --git a/README.md b/README.md
index 511674b..6190bab 100644
--- a/README.md
+++ b/README.md
@@ -4,12 +4,11 @@
第一作者: EvilChen(中孚信息元亨实验室), 第二作者: 0chencc(米斯特安全团队)
-
## 项目介绍
-**HaE**是基于 `BurpSuite Java插件API` 开发的请求高亮标记与信息提取的辅助型框架式插件,该插件可以通过自定义正则的方式匹配响应报文或请求报文,并对满足正则匹配的报文进行信息高亮与提取。
+**HaE**是一个基于`BurpSuite Java插件API`开发的辅助型框架式插件,旨在实现对HTTP消息的高亮标记和信息提取。该插件通过自定义正则表达式匹配响应报文或请求报文,并对匹配成功的报文进行标记和提取。
-现代化Web应用走上前后端分离开发模式,这就导致在日常测试时候会有许多的流量,如果你想要尽可能全面的对一个Web应用进行测试评估,将花费大量精力浪费在无用的报文上;**HaE的出现正是为了解决这一类似场景**,借助HaE你可以**有效的减少**测试的时间,将更多的精力放在**有价值、有意义**的报文上,**提高漏洞挖掘效率**。
+随着现代化Web应用采用前后端分离的开发模式,日常漏洞挖掘的过程中,捕获的HTTP请求流量也相应增加。若想全面评估一个Web应用,会花费大量时间在无用的报文上。**HaE的出现旨在解决这类情况**,借助HaE,您能够**有效减少**测试时间,将更多精力集中在**有价值且有意义**的报文上,从而**提高漏洞挖掘效率**。
**注**: 要想灵活的使用`HaE`,你需要掌握正则表达式阅读、编写、修改能力;由于`Java`正则表达式的库并没有`Python`的优雅或方便,所以HaE要求使用者必须用`()`将所需提取的表达式内容包含;例如你要匹配一个**Shiro应用**的响应报文,正常匹配规则为`rememberMe=delete`,如果你要提取这段内容的话就需要变成`(rememberMe=delete)`。
@@ -22,35 +21,32 @@
1. Linux/Mac用户的配置文件目录:`~/.config/HaE/`
2. Windows用户的配置文件目录:`%USERPROFILE%/.config/HaE/`
-
## 优势特点
-1. **精细化配置项**:高自由度配置更适配精细化场景需求;
-2. **简洁可视界面**:简洁的可视化界面让你更加清晰了解HaE的各项配置,操作更轻松,使用更简单;
-3. **颜色升级算法**:内置颜色升级算法,避免“屠龙者终成恶龙”场景,突出最具价值的请求;
-4. **标签化规则项**:标签化你的正则规则,让规则可分类,让管理更轻松;
-5. **数据集合面板**:将所有匹配数据集合到Databoard中,使得测试、梳理更高效;
-6. **高亮标记一体**:在Proxy - History页面你可以通过颜色高亮与Comment判断请求价值;
-7. **实战化官方库**:基于实战化场景、案例进行输出的官方规则库,提升测试实战性;
-8. **配置文件易读**:配置文件使用YAML格式存储,更加便于阅读与修改。
+1. 精细配置:高度自由的配置选项,以满足各类精细化场景需求。
+2. 分类标签:使用标签对规则进行分类,便于管理和组织规则。
+3. 高亮标记:在HTTP History页面,通过颜色高亮和注释判断请求的价值。
+4. 易读配置:使用易读的YAML格式存储配置文件,方便阅读和修改。
+5. 数据集合:将匹配到的数据、请求和响应集中在数据面板中,提高测试和梳理效率。
+6. 简洁可视:清晰可视的界面设计,更轻松地了解和配置HaE,操作简单、使用便捷。
+7. 颜色升级:内置颜色升级算法,避免“屠龙者终成恶龙”场景,突出最具价值的请求。
+8. 实战规则:官方规则库是基于实战化场景总结输出,提升数据发现的有效性、精准性。
| 界面名称 | 界面展示 |
-| ------------------------- | ----------------------------------------------------- |
+| ------------------------ | ---------------------------------------------------- |
| Rules(规则信息管理) |
|
| Config(配置信息管理) |
|
| Databoard(数据集合面板) |
|
-
-
## 实际使用
使用 RGPerson 生成测试数据,放入网站根目录文件中:
-
+
-访问该地址,在`Proxy - HTTP History`中可以看见高亮请求,响应标签页中含有`MarkINFO`标签,其中将匹配到的信息提取了出来。
+访问该地址,在`Proxy - HTTP History`中可以看见高亮请求,响应标签页中含有`MarkInfo`标签,其中将匹配到的信息提取了出来。
-
+
## 文末随笔
@@ -68,4 +64,4 @@
`HaE` 是 404Team [星链计划2.0](https://github.com/knownsec/404StarLink2.0-Galaxy) 中的一环,如果对 `HaE` 有任何疑问又或是想要找小伙伴交流,可以参考星链计划的加群方式。
-- [https://github.com/knownsec/404StarLink2.0-Galaxy#community](https://github.com/knownsec/404StarLink2.0-Galaxy#community)
+- [https://github.com/knownsec/404StarLink2.0-Galaxy#community](https://github.com/knownsec/404StarLink2.0-Galaxy#community)
\ No newline at end of file
diff --git a/images/config.png b/images/config.png
index f0106bd9ef4c9060e00df68dc32fbcb0e3b95f4c..451b0cf8fb9cdf286d81ffd735a1f9a335c241f9 100644
GIT binary patch
literal 50652
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