如何半天玩转一个“ES未授权利用”插件
字数 1422 2025-08-15 21:31:25

Goby插件开发:Elasticsearch未授权漏洞利用插件开发指南

前言

本教程详细讲解如何开发一个Goby插件,用于快速利用Elasticsearch未授权访问漏洞。该插件能够在Goby扫描出Elasticsearch未授权漏洞后,直接在漏洞页面显示"Indices"按钮,点击即可查看目标ES服务器的索引信息,并支持索引名称的模糊搜索功能。

开发环境准备

  1. 下载Goby开发版/内测版(关注Goby公众号:gobysec获取)
  2. 安装Node.js环境
  3. 获取Goby插件开发脚手架:https://github.com/gobysec/GobyExtension

插件功能概述

  • 在漏洞相关页面及资产详情处显示"Indices"按钮
  • 点击按钮展示ES服务器的Indices信息
  • 支持通过搜索框对index名称进行模糊搜索

开发流程详解

1. 项目初始化

  1. 下载并解压Goby插件开发脚手架到goby/extensions目录
  2. 运行Goby扫描,验证demo是否正常工作

2. 配置入口点

package.json中配置插件入口:

{
  "main": "./extension.js",
  "contributes": {
    "views": {
      "vulList": [
        {
          "command": "elastic",
          "title": "Indices",
          "visible": "elastic_visi"
        }
      ]
    }
  }
}

关键配置项说明:

  • main: 插件主入口文件路径
  • contributes.views.vulList[0].command: 注册的命令名称
  • contributes.views.vulList[0].title: 按钮显示文字
  • contributes.views.vulList[0].visible: 控制按钮是否显示的判断条件

3. 主逻辑开发(extension.js)

function activate(content) {
  // 注册按钮点击命令
  goby.registerCommand('elastic', (content) => {
    let path = __dirname + "/index.html?hostinfo=" + content.hostinfo;
    goby.showIframeDia(path, "Elasticsearch未授权漏洞利用", "600", "600");
  });
  
  // 注册按钮可见性判断命令
  goby.registerCommand('elastic_visi', (content) => {
    return content.name === "Elasticsearch unauthorized";
  });
}

exports.activate = activate;

4. 前端页面开发(index.html)

获取参数

getIframeQueryString(name) {
  let reg = new RegExp(name + '=([^&]*)');
  let r = window.parent.document.getElementById("goby-iframe").contentWindow.location.search.substr(1).match(reg);
  if (r != null) {
    return decodeURI(r[1]);
  }
  return null;
}

请求ES接口

request({
  method: 'get',
  url: 'http://' + this.getIframeQueryString("hostinfo") + "/_cat/indices",
  params: {
    format: "json"
  }
})

5. 项目结构

重构后的项目目录结构:

goby-extension-elasticsearch
├── babel.config.js
├── package-lock.json
├── package.json
├── public
│   ├── CHANGELOG.md
│   ├── README.md
│   ├── extension.js
│   ├── favicon.ico
│   ├── index.html
│   └── package.json
├── src
│   ├── App.vue
│   ├── element-variables.scss
│   ├── main.js
│   ├── plugins
│   │   └── element.js
│   └── utils
│       └── request.js
└── vue.config.js

6. 构建与测试

  1. 运行构建命令:npm run build
  2. 构建输出目录:
    /dist
    ├── CHANGELOG.md
    ├── README.md
    ├── css
    │   ├── app.b2893489.css
    │   └── chunk-vendors.2ac5db4b.css
    ├── extension.js
    ├── favicon.ico
    ├── fonts
    │   ├── element-icons.535877f5.woff
    │   └── element-icons.732389de.ttf
    ├── index.html
    ├── js
    │   ├── app.2279fc27.js
    │   └── chunk-vendors.8cb53444.js
    └── package.json
    
  3. 测试方法:
    • 在Goby的extensions目录下新建文件夹
    • 将dist目录下的文件复制到新建的文件夹中
    • 使用Goby开发版可打开DevTools进行调试

7. 打包与发布

  1. 填写必要信息:

    • package.json: 插件基本信息
    • Readme.md: 插件详情显示信息
    • Changlog.md: 更新日志信息
  2. 打包注意事项:

    • 必须将插件文件夹整个打包
    • 压缩包名称与文件夹名称保持一致
    • 不要多打一层或少打一层目录
  3. 发布流程:

    1. 注册账号:https://gobies.org/user/register
    2. 在Goby客户端登录
    3. 上传插件
    4. 等待审核(通过后会收到邮件/微信通知)

注意事项

  1. 当前插件直接从Client端发送请求到目标服务器,可能存在流量不可达的情况
  2. 建议后续版本考虑通过server端(goby-cmd)进行请求中转
  3. 开发过程中注意压缩包的正确打包方式

迭代计划

  • 添加点击索引预览详细docs功能
  • 考虑增加更多ES未授权漏洞的利用功能
  • 优化请求方式,可能通过server端中转

参考资源

  1. Goby插件开发文档:https://github.com/gobysec/GobyExtension
  2. 示例插件源码:https://github.com/fazzzzzzz/goby-extension-elasticsearch
  3. Goby官方公众号:gobysec(获取内测版/开发版)

通过本教程,您应该能够完成一个基础的Elasticsearch未授权漏洞利用插件的开发。根据实际需求,您可以进一步扩展和完善插件功能。

Goby插件开发:Elasticsearch未授权漏洞利用插件开发指南 前言 本教程详细讲解如何开发一个Goby插件,用于快速利用Elasticsearch未授权访问漏洞。该插件能够在Goby扫描出Elasticsearch未授权漏洞后,直接在漏洞页面显示"Indices"按钮,点击即可查看目标ES服务器的索引信息,并支持索引名称的模糊搜索功能。 开发环境准备 下载Goby开发版/内测版(关注Goby公众号:gobysec获取) 安装Node.js环境 获取Goby插件开发脚手架:https://github.com/gobysec/GobyExtension 插件功能概述 在漏洞相关页面及资产详情处显示"Indices"按钮 点击按钮展示ES服务器的Indices信息 支持通过搜索框对index名称进行模糊搜索 开发流程详解 1. 项目初始化 下载并解压Goby插件开发脚手架到 goby/extensions 目录 运行Goby扫描,验证demo是否正常工作 2. 配置入口点 在 package.json 中配置插件入口: 关键配置项说明: main : 插件主入口文件路径 contributes.views.vulList[0].command : 注册的命令名称 contributes.views.vulList[0].title : 按钮显示文字 contributes.views.vulList[0].visible : 控制按钮是否显示的判断条件 3. 主逻辑开发(extension.js) 4. 前端页面开发(index.html) 获取参数 请求ES接口 5. 项目结构 重构后的项目目录结构: 6. 构建与测试 运行构建命令: npm run build 构建输出目录: 测试方法: 在Goby的extensions目录下新建文件夹 将dist目录下的文件复制到新建的文件夹中 使用Goby开发版可打开DevTools进行调试 7. 打包与发布 填写必要信息: package.json : 插件基本信息 Readme.md : 插件详情显示信息 Changlog.md : 更新日志信息 打包注意事项: 必须将插件文件夹整个打包 压缩包名称与文件夹名称保持一致 不要多打一层或少打一层目录 发布流程: 注册账号:https://gobies.org/user/register 在Goby客户端登录 上传插件 等待审核(通过后会收到邮件/微信通知) 注意事项 当前插件直接从Client端发送请求到目标服务器,可能存在流量不可达的情况 建议后续版本考虑通过server端(goby-cmd)进行请求中转 开发过程中注意压缩包的正确打包方式 迭代计划 添加点击索引预览详细docs功能 考虑增加更多ES未授权漏洞的利用功能 优化请求方式,可能通过server端中转 参考资源 Goby插件开发文档:https://github.com/gobysec/GobyExtension 示例插件源码:https://github.com/fazzzzzzz/goby-extension-elasticsearch Goby官方公众号:gobysec(获取内测版/开发版) 通过本教程,您应该能够完成一个基础的Elasticsearch未授权漏洞利用插件的开发。根据实际需求,您可以进一步扩展和完善插件功能。