HaE规则编写完全指南:从基础语法到高级技巧

HaE规则编写完全指南:从基础语法到高级技巧

【免费下载链接】HaE HaE - Highlighter and Extractor, Empower ethical hacker for efficient operations. 【免费下载链接】HaE 项目地址: https://gitcode.com/gh_mirrors/ha/HaE

你是否还在为复杂的渗透测试数据提取而烦恼?是否希望通过自定义规则快速定位关键信息?本文将系统讲解HaE(Highlighter and Extractor)规则的编写方法,从基础语法到高级技巧,帮助你打造高效的信息提取工具。读完本文后,你将能够:掌握规则文件结构、编写基础匹配规则、运用高级正则技巧、实现多场景数据提取,并通过实战案例巩固所学知识。

规则系统核心架构

HaE的规则系统基于组件化设计,主要由规则定义、规则处理器和UI交互三部分构成。核心实现位于src/main/java/hae/component/rule/目录,其中Rule.java负责规则的可视化管理,Rules.java处理规则组的创建与维护,而RuleProcessor.java则实现规则的解析与执行。

规则数据通过YAML格式持久化存储,采用组(Group)和规则(Info)的层级结构。每个规则包含名称、正则表达式、格式化模板等关键属性,这些属性在Info.java中定义为:

  • enabled: 规则启用状态
  • name: 规则名称
  • regex1: 主正则表达式
  • regex2: 辅助正则表达式
  • format: 结果格式化模板
  • color: 高亮颜色
  • scope: 匹配范围
  • engine: 正则引擎类型
  • sensitive: 敏感信息标记

规则文件基础结构

HaE规则文件采用YAML格式,由多个规则组(Group)构成,每个规则组包含一组规则(Info)。典型的规则文件结构如下:

rules:
  - name: "API密钥提取"
    rules:
      - enabled: true
        name: "AWS密钥检测"
        regex1: "AKIA[0-9A-Z]{16}"
        regex2: ""
        format: "AWS Access Key: {0}"
        color: "FF0000"
        scope: "response"
        engine: "nfa"
        sensitive: true
      - enabled: false
        name: "JWT令牌提取"
        regex1: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\.[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+"
        regex2: ""
        format: "JWT Token: {0}"
        color: "00FF00"
        scope: "both"
        engine: "nfa"
        sensitive: true

规则组管理界面如图所示,支持创建、重命名和删除规则组,每个规则组可包含多条规则:

规则组管理界面

基础语法详解

规则字段说明

每个规则由以下字段组成(字段定义见src/main/java/hae/utils/rule/model/Info.java):

字段名类型描述示例
enabledboolean是否启用规则true
namestring规则名称,用于标识"AWS密钥检测"
regex1string主正则表达式,用于匹配目标内容"AKIA[0-9A-Z]{16}"
regex2string辅助正则表达式,用于二次过滤""
formatstring结果格式化模板,使用{0}引用匹配结果"AWS Key: {0}"
colorstring高亮颜色,使用RGB十六进制值"FF0000"
scopestring匹配范围,可选request/response/both"response"
enginestring正则引擎,支持nfa/dfa"nfa"
sensitiveboolean是否标记为敏感信息true

正则表达式基础

HaE支持标准Java正则表达式语法,常用元字符包括:

  • . 匹配任意单个字符
  • * 匹配前一个字符0次或多次
  • + 匹配前一个字符1次或多次
  • ? 匹配前一个字符0次或1次
  • [] 字符集,匹配其中任意一个字符
  • () 分组,用于提取子匹配

基础匹配规则示例:

  • 匹配邮箱:[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
  • 匹配IP地址:\b(?:\d{1,3}\.){3}\d{1,3}\b

规则创建流程

  1. 在规则管理界面点击"Add"按钮打开规则编辑对话框
  2. 填写规则名称和正则表达式
  3. 设置格式化模板和高亮颜色
  4. 选择匹配范围和正则引擎
  5. 勾选是否为敏感信息
  6. 点击"OK"保存规则

规则编辑界面

高级技巧与最佳实践

多正则协同匹配

通过regex1和regex2的组合使用,可以实现复杂数据提取。例如,先通过regex1匹配HTML标签,再用regex2提取标签内容:

- enabled: true
  name: "HTML标题提取"
  regex1: "<title>(.*?)</title>"
  regex2: "$1"  # 提取第一个分组内容
  format: "页面标题: {0}"
  color: "0000FF"
  scope: "response"
  engine: "nfa"
  sensitive: false

格式化模板高级用法

format字段支持多分组引用和静态文本组合,例如:

- enabled: true
  name: "URL参数提取"
  regex1: "(\w+)=(\w+)"
  regex2: ""
  format: "参数名: {0}, 值: {1}"  # 引用两个分组
  color: "FFFF00"
  scope: "request"
  engine: "nfa"
  sensitive: false

性能优化策略

  1. 正则优化:避免贪婪匹配(.*),使用非贪婪模式(.*?)并限制匹配范围
  2. 作用域限制:根据需求选择合适的scope(request/response)
  3. 引擎选择:简单匹配使用dfa引擎,复杂模式使用nfa引擎
  4. 规则分组:按功能模块组织规则组,便于管理和启用/禁用

敏感信息处理

标记为敏感的规则(sensitive: true)会对匹配结果进行特殊处理,相关实现见src/main/java/hae/utils/rule/RuleProcessor.java的rulesFormatAndSave方法。敏感信息在UI显示时会进行脱敏处理,保护数据安全。

实战案例分析

案例一:API密钥自动提取

需求:从响应中提取AWS、Azure和Google的API密钥,并高亮显示。

实现规则:

- name: "云服务密钥提取"
  rules:
    - enabled: true
      name: "AWS密钥"
      regex1: "AKIA[0-9A-Z]{16}"
      regex2: ""
      format: "AWS Access Key: {0}"
      color: "FF0000"
      scope: "response"
      engine: "dfa"
      sensitive: true
    - enabled: true
      name: "Azure密钥"
      regex1: "[a-zA-Z0-9]{40}"
      regex2: ""
      format: "Azure Key: {0}"
      color: "0080FF"
      scope: "response"
      engine: "dfa"
      sensitive: true
    - enabled: true
      name: "Google密钥"
      regex1: "AIzaSy[a-zA-Z0-9_-]{33}"
      regex2: ""
      format: "Google API Key: {0}"
      color: "FFC107"
      scope: "response"
      engine: "dfa"
      sensitive: true

案例二:自定义协议请求解析

需求:解析自定义协议的请求参数,提取命令和参数值。

实现规则:

- name: "自定义协议解析"
  rules:
    - enabled: true
      name: "命令提取"
      regex1: "CMD:([A-Z]+)\\|PARAMS:(.*)"
      regex2: ""
      format: "命令: {0}, 参数: {1}"
      color: "00FF00"
      scope: "request"
      engine: "nfa"
      sensitive: false

案例三:多步骤数据清洗

需求:从HTML响应中提取JSON数据,再从中提取用户ID。

实现规则:

- name: "JSON数据提取"
  rules:
    - enabled: true
      name: "JSON提取"
      regex1: "<script id='data' type='application/json'>(.*?)</script>"
      regex2: ""
      format: "原始JSON: {0}"
      color: "9C27B0"
      scope: "response"
      engine: "nfa"
      sensitive: false
    - enabled: true
      name: "用户ID提取"
      regex1: "\"user_id\":(\d+)"
      regex2: ""
      format: "用户ID: {0}"
      color: "673AB7"
      scope: "response"
      engine: "dfa"
      sensitive: true

规则调试与故障排除

常见错误及解决方法

  1. 正则表达式语法错误:检查是否存在未闭合的括号或非法转义字符。使用regex101.com等工具验证正则表达式。

  2. 匹配结果为空:确认正则表达式与目标内容是否匹配,可通过调整作用域(scope)或增加日志输出排查问题。相关日志功能在src/main/java/hae/utils/rule/RuleProcessor.java中实现。

  3. 性能问题:复杂正则表达式可能导致HaE运行缓慢。优化建议:

    • 使用更具体的正则模式,减少回溯
    • 对长文本优先使用dfa引擎
    • 拆分复杂规则为多个简单规则

调试工具

HaE提供了内置的规则测试功能,可在规则编辑界面点击"Test"按钮验证正则表达式。测试界面如图所示:

规则测试界面

规则分享与社区资源

规则导入导出

HaE规则支持导入导出功能,通过RuleProcessor.java的rulesFormatAndSave方法实现YAML格式的序列化。导出的规则文件可分享给团队成员,或导入到其他HaE实例中使用。

社区规则库

HaE社区维护了常用规则集合,包括:

  • Web安全测试规则集
  • API接口测试规则集
  • 敏感信息提取规则集
  • 自定义协议解析规则集

这些规则可通过项目仓库的规则示例目录获取,定期更新以适应新的测试场景。

总结与展望

HaE规则系统为渗透测试人员提供了灵活高效的信息提取工具。通过本文介绍的基础语法和高级技巧,你可以编写出强大的规则来应对各种测试场景。未来HaE将支持更多正则特性和自定义函数,进一步提升规则系统的能力。

鼓励你参与规则库的贡献,分享自己编写的实用规则,共同构建HaE的生态系统。如有任何问题或建议,可通过项目的issues系统反馈。

附录:规则参考手册

正则表达式速查表

语法描述示例
\d匹配数字\d{3}匹配3位数字
\w匹配字母、数字或下划线\w+匹配单词
\s匹配空白字符\s+匹配一个或多个空白
^行首锚点^HTTP匹配以HTTP开头的行
$行尾锚点\d$匹配以数字结尾的行
|或操作符(jpg|png)匹配jpg或png
{n}恰好匹配n次\d{4}匹配4位数字
{n,}至少匹配n次\d{2,}匹配2位以上数字
{n,m}匹配n到m次\d{2,4}匹配2-4位数字

颜色代码参考

颜色代码用途
红色FF0000敏感信息
绿色00FF00成功匹配
蓝色0000FF一般信息
黄色FFFF00警告信息
紫色9C27B0特殊数据
橙色FF9800可疑内容

规则作用域说明

作用域描述
request仅匹配请求内容
response仅匹配响应内容
both匹配请求和响应内容

正则引擎对比

引擎特点适用场景
dfa速度快,内存占用低简单匹配、长文本
nfa支持更多特性,回溯能力强复杂模式、分组提取

【免费下载链接】HaE HaE - Highlighter and Extractor, Empower ethical hacker for efficient operations. 【免费下载链接】HaE 项目地址: https://gitcode.com/gh_mirrors/ha/HaE

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值