Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d71965ce10 | ||
|
|
1ffe94e78d | ||
|
|
3859f81b2a | ||
|
|
20ae5bc811 | ||
|
|
b7734ca710 | ||
|
|
d75991043e |
19
README.md
19
README.md
@@ -1,7 +1,7 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="images/logo.png" style="width: 20%" />
|
<img src="images/logo.png" style="width: 20%" />
|
||||||
<h4><a href="https://gh0st.cn/HaE/">Empower ethical hacker for efficient operations.</a></h4>
|
<h4><a href="https://github.com/gh0stkey/HaE">Empower ethical hacker for efficient operations.</a></h4>
|
||||||
<h5>First Author:: <a href="https://github.com/gh0stkey">EvilChen</a>(Zhongfu Information Yuanheng Laboratory)<br>Second Author: <a href="https://github.com/0chencc">0chencc</a>(Mystery Security Team)<br>Third Author: <a href="https://github.com/vaycore">vaycore</a>(Independent Security Researcher)</h5>
|
<h5>First Author: <a href="https://github.com/gh0stkey">EvilChen</a>(Zhongfu Information Yuanheng Laboratory)<br>Second Author: <a href="https://github.com/0chencc">0chencc</a>(Mystery Security Team)<br>Third Author: <a href="https://github.com/vaycore">vaycore</a>(Independent Security Researcher)</h5>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
README Version: \[[English](README.md) | [简体中文](README_CN.md)\]
|
README Version: \[[English](README.md) | [简体中文](README_CN.md)\]
|
||||||
@@ -28,6 +28,20 @@ GitCode project address: https://gitcode.com/gh0stkey/HaE
|
|||||||
1. Starting with HaE version 3.0, development is done using the `Montoya API`. To use the new version of HaE, you need to upgrade your BurpSuite version (>=2023.12.1).
|
1. Starting with HaE version 3.0, development is done using the `Montoya API`. To use the new version of HaE, you need to upgrade your BurpSuite version (>=2023.12.1).
|
||||||
2. Custom HaE rules must enclose the expressions to be extracted within parentheses `()`. For example, if you want to match a response message from a **Shiro application**, the normal matching rule would be `rememberMe=delete`, but in HaE's rule format, it needs to be written as `(rememberMe=delete)`.
|
2. Custom HaE rules must enclose the expressions to be extracted within parentheses `()`. For example, if you want to match a response message from a **Shiro application**, the normal matching rule would be `rememberMe=delete`, but in HaE's rule format, it needs to be written as `(rememberMe=delete)`.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
**Plugin Installation**: `Extender - Extensions - Add - Select File - Next`
|
||||||
|
|
||||||
|
When you load `HaE` for the first time, it will load the offline rule database from the Jar package. If you need to update the rules, click `Reinit` to reinitialize. The address of the built-in rule database can be found on GitHub:
|
||||||
|
`https://github.com/gh0stkey/HaE/blob/master/src/main/resources/rules/Rules.yml`
|
||||||
|
|
||||||
|
The configuration file (`Config.yml`) and rule file (`Rules.yml`) are stored in a fixed directory:
|
||||||
|
|
||||||
|
1. For Linux/Mac users: `~/.config/HaE/`
|
||||||
|
2. For Windows users: `%USERPROFILE%/.config/HaE/`
|
||||||
|
|
||||||
|
Alternatively, you can also place the configuration files in the `/.config/HaE/` directory under the same folder as the `HaE Jar package`, **for easier offline portability**.
|
||||||
|
|
||||||
### Rule Definitions
|
### Rule Definitions
|
||||||
|
|
||||||
Currently, HaE rules consist of 8 fields, with detailed meanings as follows:
|
Currently, HaE rules consist of 8 fields, with detailed meanings as follows:
|
||||||
@@ -86,6 +100,7 @@ We appreciate everyone's support for the project. The following list is sorted b
|
|||||||
| 王傑 | 100.00 CNY |
|
| 王傑 | 100.00 CNY |
|
||||||
| 联系不到我请拨打我手机号码 | 200.00 CNY |
|
| 联系不到我请拨打我手机号码 | 200.00 CNY |
|
||||||
| Shu2e | 50.00 CNY |
|
| Shu2e | 50.00 CNY |
|
||||||
|
| 亦 | 50.00 CNY |
|
||||||
|
|
||||||
## Support the Project
|
## Support the Project
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="images/logo.png" style="width: 20%" />
|
<img src="images/logo.png" style="width: 20%" />
|
||||||
<h4><a href="https://gh0st.cn/HaE/">赋能白帽,高效作战!</a></h4>
|
<h4><a href="https://github.com/gh0stkey/HaE">赋能白帽,高效作战!</a></h4>
|
||||||
<h5>第一作者: <a href="https://github.com/gh0stkey">EvilChen</a>(中孚信息元亨实验室)<br>第二作者: <a href="https://github.com/0chencc">0chencc</a>(米斯特安全团队)<br>第三作者: <a href="https://github.com/vaycore">vaycore</a>(独立安全研究员)</h5>
|
<h5>第一作者: <a href="https://github.com/gh0stkey">EvilChen</a>(中孚信息元亨实验室)<br>第二作者: <a href="https://github.com/0chencc">0chencc</a>(米斯特安全团队)<br>第三作者: <a href="https://github.com/vaycore">vaycore</a>(独立安全研究员)</h5>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -99,6 +99,7 @@ HaE目前的规则一共有8个字段,详细的含义如下所示:
|
|||||||
| 王傑 | 100.00元 |
|
| 王傑 | 100.00元 |
|
||||||
| 联系不到我请拨打我手机号码 | 200.00元 |
|
| 联系不到我请拨打我手机号码 | 200.00元 |
|
||||||
| Shu2e | 50.00元 |
|
| Shu2e | 50.00元 |
|
||||||
|
| 亦 | 50.00元 |
|
||||||
|
|
||||||
## 支持项目
|
## 支持项目
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ public class HaE implements BurpExtension {
|
|||||||
public void initialize(MontoyaApi api) {
|
public void initialize(MontoyaApi api) {
|
||||||
// 设置扩展名称
|
// 设置扩展名称
|
||||||
api.extension().setName("HaE - Highlighter and Extractor");
|
api.extension().setName("HaE - Highlighter and Extractor");
|
||||||
String version = "4.2";
|
String version = "4.2.1";
|
||||||
|
|
||||||
// 加载扩展后输出的项目信息
|
// 加载扩展后输出的项目信息
|
||||||
Logging logging = api.logging();
|
Logging logging = api.logging();
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ public class Config extends JPanel {
|
|||||||
private Registration activeHandler;
|
private Registration activeHandler;
|
||||||
private Registration passiveHandler;
|
private Registration passiveHandler;
|
||||||
|
|
||||||
|
private boolean isLoadingData = false;
|
||||||
|
|
||||||
public Config(MontoyaApi api, ConfigLoader configLoader, MessageTableModel messageTableModel, Rules rules) {
|
public Config(MontoyaApi api, ConfigLoader configLoader, MessageTableModel messageTableModel, Rules rules) {
|
||||||
this.api = api;
|
this.api = api;
|
||||||
this.configLoader = configLoader;
|
this.configLoader = configLoader;
|
||||||
@@ -174,29 +176,35 @@ public class Config extends JPanel {
|
|||||||
|
|
||||||
private TableModelListener craeteSettingTableModelListener(JComboBox<String> setTypeComboBox, DefaultTableModel model) {
|
private TableModelListener craeteSettingTableModelListener(JComboBox<String> setTypeComboBox, DefaultTableModel model) {
|
||||||
return e -> {
|
return e -> {
|
||||||
|
// 如果是程序正在加载数据,不处理事件
|
||||||
|
if (isLoadingData) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
String selected = (String) setTypeComboBox.getSelectedItem();
|
String selected = (String) setTypeComboBox.getSelectedItem();
|
||||||
String values = getFirstColumnDataAsString(model);
|
String values = getFirstColumnDataAsString(model);
|
||||||
|
|
||||||
if (selected != null) {
|
if (selected != null) {
|
||||||
if (selected.equals("Exclude suffix")) {
|
if (selected.equals("Exclude suffix")) {
|
||||||
if (!values.equals(configLoader.getExcludeSuffix()) && !values.isEmpty()) {
|
if (!values.equals(configLoader.getExcludeSuffix())) {
|
||||||
configLoader.setExcludeSuffix(values);
|
configLoader.setExcludeSuffix(values);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selected.equals("Block host")) {
|
if (selected.equals("Block host")) {
|
||||||
if (!values.equals(configLoader.getBlockHost()) && !values.isEmpty()) {
|
if (!values.equals(configLoader.getBlockHost())) {
|
||||||
configLoader.setBlockHost(values);
|
configLoader.setBlockHost(values);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selected.equals("Exclude status")) {
|
if (selected.equals("Exclude status")) {
|
||||||
if (!values.equals(configLoader.getExcludeStatus()) && !values.isEmpty()) {
|
if (!values.equals(configLoader.getExcludeStatus())) {
|
||||||
configLoader.setExcludeStatus(values);
|
configLoader.setExcludeStatus(values);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selected.equals("Dynamic Header")) {
|
if (selected.equals("Dynamic Header")) {
|
||||||
if (!values.equals(configLoader.getExcludeStatus()) && !values.isEmpty()) {
|
if (!values.equals(configLoader.getExcludeStatus())) {
|
||||||
configLoader.setDynamicHeader(values);
|
configLoader.setDynamicHeader(values);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -207,7 +215,11 @@ public class Config extends JPanel {
|
|||||||
private ActionListener createSettingActionListener(JComboBox<String> setTypeComboBox, DefaultTableModel model) {
|
private ActionListener createSettingActionListener(JComboBox<String> setTypeComboBox, DefaultTableModel model) {
|
||||||
return e -> {
|
return e -> {
|
||||||
String selected = (String) setTypeComboBox.getSelectedItem();
|
String selected = (String) setTypeComboBox.getSelectedItem();
|
||||||
|
|
||||||
|
// 设置标志,表示正在加载数据
|
||||||
|
isLoadingData = true;
|
||||||
model.setRowCount(0);
|
model.setRowCount(0);
|
||||||
|
|
||||||
if (selected != null) {
|
if (selected != null) {
|
||||||
if (selected.equals("Exclude suffix")) {
|
if (selected.equals("Exclude suffix")) {
|
||||||
addDataToTable(configLoader.getExcludeSuffix().replaceAll("\\|", "\r\n"), model);
|
addDataToTable(configLoader.getExcludeSuffix().replaceAll("\\|", "\r\n"), model);
|
||||||
@@ -225,6 +237,9 @@ public class Config extends JPanel {
|
|||||||
addDataToTable(configLoader.getDynamicHeader().replaceAll("\\|", "\r\n"), model);
|
addDataToTable(configLoader.getDynamicHeader().replaceAll("\\|", "\r\n"), model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 重置标志
|
||||||
|
isLoadingData = false;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user