前言:Elasticsearch服务普遍存在一个未授权访问的问题,个人最近刚好在帮某企业梳理这方面的资产,但每次都是通过Goby扫描出来后再手动访问,比较麻烦。刚好看到Goby的内测版推出了开放式的插件功能,所以抱着试手的想法开发了此款插件。希望通过此次分享,能帮助大家在插件市场愉快的玩耍。

0x001 插件效果

当扫描出Elasticsearch未授权漏洞后,会在漏洞相关⻚以及资产详情处显示“Indices按钮”,点击即可展开该es服务器的Indices信息:

在搜索框输⼊关键字可以根据index名称进⾏模糊搜索。

0x002 构建流程

官方的开发文档还是很好理解的,有提供开发脚手架。下载→解压到goby/extensions目录,再运行Goby扫描,一个demo就出来了。接下来就是改。核心集中在确认入口点和API调用。

开发文档地址: http:// github.com/gobysec/Goby Extension

1. 确定入口点

在选定ES做插件后,我把入口点选择在了漏洞相关页面,首先在./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: 这里也要填入注册命令的名称,主要作用是判断按钮是否在该漏洞显示,回调函数应该返回一个布尔型的值。

2. API调用./extension.js中做以下配置:

function activate(content) {goby.registerCommand('elastic', (content) => {    //这里的'elastic'和上文中contributes.views. vulList[0].command的值保持一致let path = __dirname + "/index.html?hostinfo=" + content.hostinfo;    //设置打开新窗口的html文件路径,并传入当前hostinfo信息goby.showIframeDia(path, "Elasticsearch未授权漏洞利用", "600", "600");    //打开一个600*600的iframe窗口,窗口标题为'Elasticsearch未授权漏洞利用'});goby.registerCommand('elastic_visi',  (content) => {    //这里的'elastic_visi'和上文中contributes.views. vulList[0].visible的值保持一致return content.name === "Elasticsearch unauthorized"    //对漏洞名称进行判断});
}exports.activate = activate;

小提示:漏洞名称可以直接在漏洞窗口进行查找,点击进去之后复制名称即可。

3. index.html页面开发

官方插件中使用的是 layui 框架进行开发,我这里使用的是 Vue + ELement-ui。在使用框架方面Goby比较开放,没有限制,大家可以任意发挥。这里简单介绍一下我的开发流程。首先需要处理传过来的hostinfo信息,可以直接copy官方文档提供的代码:

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

拿到漏洞的IP后,就可以对目标IP进行自定义请求了:

request({    //在utils中有对axios进行简单封装method: 'get',url: 'http://' + this.getIframeQueryString("hostinfo") + "/_cat/indices",params: {format: "json"}
})

最后对拿到的数据进行处理,显示为表格样式,整个插件就开发完成了~

重构后的目录如下所示:

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

编译:

npm run build

输出的目录结构如下:

goby-extension-elasticsearch/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

4. 测试

在Goby的extensions目录下新建任意名称的文件夹,把goby-extension-elasticsearch/dist目录下的文件移动进去即可。使用开发版本Goby可以打开DevTools进行调试。

5. 打包

打包前把自己及插件的相关信息分别填到package.jsonReadme.mdChanglog.md文件中。Readme.md信息会显示在详情中:

Changlog.md信息会显示在更新日志中:

小提示:压缩包和文件夹名称须保持一致,文件放置如下图所示。

6. 发布

  • 注册账号: https://gobies.org/user/register
  • 在Goby客户端进行登陆
  • 上传插件
  • 审核通过后会收到邮件/微信通知,然后可以在Goby的扩展程序中看到。

0x003 小结

Goby插件的开发文档写的非常清晰,我从阅读文档到插件开发完成,刚好用了一上午的时间。不过也因为插件功能刚刚开放,所以有一些不足。个人认为插件所产生的流量不应该直接从Client端直接发送到目标服务器,应该在server端(goby-cmd)进行中转。如果后续提供类似的API的话就更完美了。

由于当时没看到开发版本,开发过程中也没有进行调试,所以本篇文章也就没有详细介绍Debug过程。唯一出问题的地方就是在打压缩包得时候没有新建目录,直接散装在压缩包里了导致上传失败,不过goby团队小姐姐很快就帮我解决了这个问题。

对于本插件的迭代计划,下一版打算在列出Indices信息后,点击表格添加预览详细docs功能。如果表哥们对本插件有其他想法&需求,可以直接在我的项目中提issues。https://github.com/fazzzzzzz/goby-extension-elasticsearch

注:由于是Client端插件,所以即使设置外部Server或者代理,流量仍会从Client端发 出,可能存在流量不可达导致列不出indices的情况。

qq分享提示设备未授权_插件分享 | 如何半天玩转一个“ES未授权利用”插件相关推荐

  1. iframe如何发送请求_插件分享 | 如何半天玩转一个“ES未授权利用”插件

    前言:Elasticsearch服务普遍存在一个未授权访问的问题,个人最近刚好在帮某企业梳理这方面的资产,但每次都是通过Goby扫描出来后再手动访问,比较麻烦.刚好看到Goby的内测版推出了开放式的插 ...

  2. qq分享提示设备未授权_友盟微信、QQ等分享提示未验证应用配置

    产品和客服反馈微信分享提示未验证,让我们排查原因,看了微信文档才知道,由于苹果iOS 13系统版本安全升级,为此WechatOpenSDK在1.8.6版本进行了适配.1.8.6版本支持Universa ...

  3. mysql导出权限授权_本文实例讲述了mysql数据库创建账号、授权、数据导出、导入操作。分享给大家供大家参考,具体如下:1、账号创建及授权grant all privileg...

    本文实例讲述了mysql数据库创建账号.授权.数据导出.导入操作.分享给大家供大家参考,具体如下: 1.账号创建及授权 grant all privileges on *.* to 'yangxin' ...

  4. qq分享提示设备未授权_无论大池小池,认真做过滤的就是好池!(华侨城鱼池过滤案例分享)...

    提示:点击上方"爱鳞说"↑免费订阅本刊 每天一分钟,听听[爱鳞说] 收听 点击上方绿标 即可播放 历经3天,深圳华侨城庭院50平米鱼池(欢乐谷对面的天鹅堡小区),底部生物净化+上浮 ...

  5. qq分享提示设备未授权_微信上还能聊QQ?腾讯这操作看傻网友

    近日,微信偷偷上线了一个新功能,用户可以直接在微信上登录QQ并接收查看消息. 这个功能一推出,瞬间冲上了微博热搜榜,引起了数亿网友的讨论. 原来,微信推出了一个名为"腾讯QQ"的小 ...

  6. qq分享提示设备未授权_QQ帐号已经可以注销了,过去几天,第一批尝试的人已经放弃了!...

    3月13日,Android版手机QQ更新至7.9.9版本,此前处于内测的注销功能正式上线,你会注销QQ吗?第一批尝试的人却-- 昨日起,QQ注销功能正式上线,用户可通过"设置"→& ...

  7. 杂项设备驱动框架_干货分享丨轻松玩转 Huawei LiteOS 传感框架

    摘要:LiteOS传感框架将物联网终端设备上不同类型的传感器统一管理,通过抽象不同类型传感器接口,屏蔽其硬件细节,做到"硬件"无关性,非常方便于物联网设备的开发.维护和功能扩展. ...

  8. uniapp 分享缩略图过大怎么办_经验分享| 反击破转子断裂的应急处理方法

    点击上方"蓝字"关注我们 作为反击破的核心破碎部件,转子一旦断裂便意味着生产的暂停,停工带来的损失是大家都不愿看到的.那这种情况下有没有什么应急措施,以解"燃眉之急&qu ...

  9. Spring Security OAuth2.0_实现分布式认证授权_网关资源服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记152

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们再继续看,因为我们说,我们的网关要进行认证对吧,对来的请求进行认证. 然后我们这里把网关微 ...

最新文章

  1. 使用OpenCV对运动员的姿势进行检测
  2. LED的电流与光强之间的关系
  3. 登录锁定状态下Win7关机技巧总结
  4. YbtOJ#482-爬上山顶【凸壳,链表】
  5. python @修饰符_python函数修饰符@的使用方法解析
  6. 【面向对象】面向对象程序设计测试题11-类的高级特性测试题
  7. windows API 第22篇 WTSGetActiveConsoleSessionId
  8. Node.js:Node核心模块
  9. TensorFlow实现对花朵数据集的图片分类(保证运行成功)
  10. SIT测试和UAT测试区别
  11. 线性MMSE检波和ZF检波
  12. MIT 6.828 Lab1(从引导扇区开始)
  13. 2021年教你增加拿到BAT等大厂offer几率,分享PDF高清版
  14. 如何处理编码GBK的不可映射字符
  15. 更换网站服务器对网站优化有影响吗?
  16. 小程序与h5的相互跳转
  17. 古诺双寡头模型MATLAB求解(博弈论)
  18. Manjaro + Windows 双系统安装指南
  19. 计算机系统进程模型概念
  20. ubuntu/centos7.5安装python3.6

热门文章

  1. 对于虚拟货币的国际监管问题,韩国持有积极态度
  2. USB讯通架构及数据模型
  3. 国家发改委:利用区块链等新技术开展绿色电力交易试点
  4. 【opencv-python】Sobel算子说明
  5. Web标准和常用浏览器及其内核
  6. 用python制作全国身份证号验证及查询系统
  7. 上海大学计算机学院卞韬,上海大学通信与信息工程学院导师介绍:朱秋煜
  8. 一个70后伪中产的焦虑:下半辈子贫穷来袭?
  9. 利用 Javascript 通过几个循环操作打印一个棱形
  10. Cognex读码器和DataMan软件常规操作步骤记录