如何半天玩转一个“ES未授权利用”插件
字数 1422 2025-08-15 21:31:25
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": "./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. 构建与测试
- 运行构建命令:
npm run build - 构建输出目录:
/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 - 测试方法:
- 在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未授权漏洞利用插件的开发。根据实际需求,您可以进一步扩展和完善插件功能。