如何玩转一个ES未授权利用的插件

如何玩转一个ES未授权利用的插件

这期内容当中小编将会给大家带来有关如何玩转一个ES未授权利用的插件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

前言:Elasticsearch服务普遍存在一个未授权访问的问题,个人最近刚好在帮某企业梳理这方面的资产,但每次都是通过Goby扫描出来后再手动访问,比较麻烦。刚好看到Goby的内测版推出了开放式的插件功能,所以抱着试手的想法开发了此款插件。在Goby团队小姐姐的强烈推荐下,分享我此次的开发经验。

插件效果

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

在搜索框输入关键字可以根据index名称进行模糊搜索:

构建流程

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

开发文档地址: https://github.com/gobysec/GobyExtension

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中做以下配置:

functionactivate(content){goby.registerCommand('elastic',(content)=>{//这里的'elastic'和上文中contributes.views.vulList[0].command的值保持一致letpath=__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的值保持一致returncontent.name==="Elasticsearchunauthorized"//对漏洞名称进行判断});}exports.activate=activate;

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

3. index.html页面开发

官方插件中使用的是layui框架进行开发,我这里使用的是Vue+Element-ui。在使用框架方面Goby比较开放,没有限制,大家可以任意发挥。

这里简单介绍一下我的开发流程。首先需要处理传过来的hostinfo信息,可以直接copy官方文档提供的代码:

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

拿到漏洞的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

编译:

npmrunbuild

输出的目录结构如下:

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.发布

  1. 注册账号: https://gobies.org/user/register

  2. 在Goby客户端进行登陆

  3. 上传插件

  4. 审核通过后会收到邮件/微信通知,然后可以在Goby的扩展程序中看到

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

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

上述就是小编为大家分享的如何玩转一个ES未授权利用的插件了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注恰卡编程网行业资讯频道。

发布于 2021-12-23 21:10:16
收藏
分享
海报
0 条评论
72
上一篇:如何通过IP定位及IP应用场景进行反欺诈风控 下一篇:如何利用逆IP提高在线广告推广效果
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码