插件分享

2023-11-02

在这里插入图片描述

前言: 要问我Goby怎么样,我会坚定回答你“最强实时网络空间测绘,没有之一” 。初次发现Goby还是来自于同事@hq404的推荐,看完第一反应,真漂亮,我馋了,我要xxxxxx。其Logo和UI做的相当棒,当然不仅拥有华丽的外表,更让我深爱又离不开的即最强实时网络空间测绘,如官方定位一样快速、专业、深入、全面,导致我现在每个项目或是测试工作都是先来Goby跑一波。但是正如上述所说Goby目前着重于资产测绘,而漏洞扫描相关的PoC数量还处于堆砌阶段,又看到Goby的插件市场越来越完善,故打算把Vulmap也以插件形式加入,以互补Goby的PoC,便于发现更多漏洞。

0x001 插件效果

1.1 插件使用

这里为插件0.1.0版本的演示效果,后续不同版本显示效果可能不同。

在这里插入图片描述

0x002 插件开发

2.1 编写前序

2.1.1 Vulmap工具介绍

Vulmap 是一款 Web 漏洞扫描和验证工具, 可对 WebApps 进行漏洞扫描, 并且具备漏洞利用功能, 目前支持的 WebApps 包括 ActiveMQ, Flink, Shiro, Solr, Struts2, Tomcat, Unomi, Drupal, Elasticsearch, Fastjson, Jenkins, Laravel, Nexus, Weblogic, Jboss, Spring, ThinkPHP等。

2.1.2 Goby开发版

写Goby务必安装Goby就是了,Goby分别有不同版本,官方文档中推荐使用Goby开发版。

Goby开发版下载:https://cn.gobies.org/docs.html

且里边有一个HelloWorld的例子可以很直观的展示Goby插件的效果和接口位置等。这里的Goby插件主要都是靠JS,我在尝试编写之前是完全没有过编写JS经验的,纯白,自己只是个Python手,凭借着Python的一点经验花了一天半最终实现了这个插件,期间的官方文档起到了很大的帮助,这里要给编写doc的表哥(也可能是表姐)们打call,也找@go0p师傅问了不少问题特此感谢(所以插件开发问题尽管找他233)。

2.2 插件目录结构

搬自https://cn.gobies.org/docs.html的插件目录结构。

├── .gitignore          // 忽略构建输出和node_modules文件
├── README.md           // 插件介绍文档
├── CHANGELOG.md        // 插件更新日志文档
├── src
│   └── extension.js    // 插件源代码
├── package.json        // 插件配置清单

主要代码分别package.jsonextension.js,前者为插件的配置清单,后者为插件主要代码。

2.3 设定插件配置选项

这里就需要编写package.json,Vulmap的内容如下

"configuration": {
  "vulmap.py 位置": {
    "type": "string",
    "default": "",
    "description": "请输入vulmap.py的位置(示例:/home/zhzy/vulmap.py)",
    "fromDialog": true
  },
  "python3 命令或位置": {
    "type": "string",
    "default": "python3",
    "description": "请输入在当前环境下的Python3的命令或位置,也可以是绝对路径(示例:python3 or /usr/bin/python3)"
  }
},

这里主要设定了两个键值,一个是vulmap.py位置用于设定Vulmap扫描器的位置路径,之后需要调用Vulmap进行扫描时使用,没有默认值,因为大家的目录习惯都不同所以需要手动指定。

再就是python3命令或位置需要用户指定python3命令的全称或绝对路径同样用于之后扫描时调用Vulmap,至于填写python、python3、python3.8等等就要看具体自己系统里的名称了,还是一样因为每个人的配置习惯和环境变量不同。

这里有个坑点,我在使用的电脑为Debian testing(Linux系统),使用的Goby也是Linux版本的,且平时使用zhzy(uid:1001)的用户,但是由于Goby需要root权限启动我每次都是sudo ./Goby来启动,这就导致Goby识别的环境变量和我当前的环境变量不同,例如我在zhzy用户设置alias python = ‘/xxx/python3.9’但是以sudo运行的Goby会识别python为Linux默认的python2,就导致版本不对应,所以还是建议写入python的绝对路径。

对应效果:
在这里插入图片描述

2.4 设定入口点

为显示有Vulmap按钮的地方,此时需要编写extension.js文件,内容如下

let identical = {
    "web": true,
    "http": true,
    "https": true
};

然后自定义一个注册命令用于检测是否显示Vulmap按钮

Goby.registerCommand('vulmapCheck', function (content) {
    if (identical[content.protocol]) return true;
    return false;
});

分别会在Goby界面中能够识别到http、https、Web协议的地方显示按钮,这里的按钮位置参考了Packer Fuzzer插件及Xray插件,因为都是进行Web扫描,故入口点也一样。

对应的效果:

在这里插入图片描述
在这里插入图片描述

2.5 扫描的调用及结果

调用Vulmap进行扫描主要为以下内容:

function runScanner(targetUrl,taskResult){
    var cp = require('child_process');
    var command  = config["python3 命令或位置"]["default"] + " " + config["vulmap.py 位置"]["default"] + " -u " + targetUrl + " > " + taskResult;
    // Goby.showInformationMessage(command);
    cp.exec(command, (error, stdout, stderr) => {
        console.log(`stdout: ${stdout}`);
        console.log(`stderr: ${stderr}`);
        if (error) {
            console.error(`扫描命令错误: ${error}`);
            Goby.showErrorMessage(`扫描命令错误: ${error}`);
            return;
        } else {
            console.log(command)
            Goby.showInformationMessage(`任务创建成功: ${taskID},请稍等片刻再次点击查看结果`);
        }
    })
}

调用扫描主要还是靠var command拼接的系统命令,因为Goby目前无法滚动实时显示执行结果,故目前将扫描结果重定向到文本文件中,在Vulmap扫描中,会在插件目录result中创建对应任务ID的结果文件,再次点击按钮后会判断文件存在并展开文件内容,判断代码如下:

if (fs.existsSync(taskResult)) {
    const lines = fs.readFileSync(taskResult).toString()
    if (lines.includes("Scan completed and ended")) {
        if (lines.includes("[+]")) {
            Goby.showSuccessMessage(`vulmap 扫描完成并发现漏洞 !`);
        } else if (lines.includes("[?]")){
            Goby.showSuccessMessage(`vulmap 扫描完成并发现疑似漏洞 ?`);
        } else if (lines.includes("install -r requirements.txt")){
            Goby.showWarningMessage(`vulmap 的依赖还有问题,要先解决 ~`);
        } else {
            Goby.showSuccessMessage(`vulmap 扫描完成,但是没有发现漏洞 ~`);
        }
        Goby.showIframeDia(taskResult, "vulmap scan result", "900", "520");
    } else if (lines.includes("Survival check failed")){
        if (lines.includes("[+]")) {
            Goby.showSuccessMessage(`vulmap 扫描完成并发现漏洞 !`);
        } else if (lines.includes("[?]")){
            Goby.showSuccessMessage(`vulmap 扫描完成并发现疑似漏洞 ?`);
        } else if (lines.includes("install -r requirements.txt")){
            Goby.showWarningMessage(`vulmap 的依赖还有问题,要先解决 ~`);
        } else {
            Goby.showSuccessMessage(`vulmap 扫描完成,但是没有发现漏洞 ~`);
        }
        Goby.showIframeDia(taskResult, "vulmap scan result", "900", "520");
    } else {
        Goby.showWarningMessage(`正在扫描: ${targetUrl} 还没扫完, 请稍等再打开~`);
        Goby.showIframeDia(taskResult, "vulmap scan result", "900", "520");
    }
} else {
    Goby.showInformationMessage(`运行 vulmap 扫描目标: ${targetUrl}`);
    // 此时开启vulmap扫描
    runScanner(targetUrl,taskResult);
}

按钮不同阶段的判断效果。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

当最终判断扫描完成后即可得到完整的扫描结果。

在这里插入图片描述
至此Goby中调用第三方扫描器的扫描效果便完成了。

0x003 小结

完全是想要编写Goby插件才第一次接触编写JS,因为对JS完全不熟悉很多地方一直在参考现有的其他插件照猫画虎做出来的,主要参考了@go0p师傅的Goby Xray插件和@Poc Sir师傅的Packer Fuzzer插件,虽然目前代码简单粗暴但是能实现想象中的扫描效果了,一天半的产物目前可用还是达到预期的效果了。

Vulmap 后续版本中会引入html格式报告,之后也会将插件扫描结果改为html格式,更直观方便大家查看结果。


插件开发文档及Goby开发版下载:
https://gobies.org/docs.html

关于插件开发在B站都有详细的教学,欢迎大家到弹幕区合影~
https://www.bilibili.com/video/BV1u54y147PF/

如果表哥/表姐也想把自己上交给Goby社区(获取超级内测版),戳这里领取一份插件任务?
https://github.com/gobysec/GobyExtension/projects

文章来自Goby社区成员:zhzyker,转载请注明出处。
下载Goby内测版,请关注微信公众号:GobySec
下载Goby正式版,请关注网址:https://gobies.org

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

插件分享 的相关文章

随机推荐

  • 如何从一个服务器拷文件到另一个服务器

    scp sftp rsync 如果文件很多或者很大建议rsync SecureCRT与SshClient不同的就是 SecureCRT没有图形化的文件传输工具 不过也不影响 用命令来实现的话 其实会方便快捷很多 第一种方式 上传文件只需在s
  • Java中Validator的使用

    原文 Java中Validator的使用 荼白 CSDN博客 java validator 很多时候都需要校验穿的参数是否符合规则 但是这种校验的代码会重复很多 所以引入 validator 来校验参数 这样可以省去很多冗余的代码 目录 p
  • 【Caffe】Windows下调用生成的classification.exe单张图片分类错误问题

    第一次更新 2017 10 25 本人环境 1 Caffe工程已经编译好 2 Matlab接口可用 问题概述 在用Caffe自带的程序对图片进行分类时 Matlab接口下识别率与训练时test的准确率一致 但使用VS接口 即直接调用工程生成
  • java ibatis 操作数据库延迟_javaweb项目,为什么过段时间,跟数据库就失去连接呀?...

    Cause org apache commons dbcp SQLNestedException Cannot get a connection pool exhausted at com ibatis sqlmap engine mapp
  • 【.Net实用方法总结】 整理并总结System.Data中DataColumnCollection类及其方法介绍

    作者简介 博主是一位 Net开发者 同时也是RPA和低代码平台的践行者 个人主页 会敲键盘的肘子 系列专栏 Net实用方法总结 专栏简介 博主针对 Net开发和C站问答过程中遇到的问题进行总结 形成本专栏 希望可以帮助到您解决问题 座右铭
  • 如何创建一个csv格式的文件

    function downloadFile fileName content var aTag document createElement a var blob new Blob ufeff content type text txt c
  • 复旦nlp实验室 nlp-beginner 任务一:基于机器学习的文本分类

    实现基于logistic softmax regression的文本分类 参考 文本分类 神经网络与深度学习 第2 3章 数据集 Classify the sentiment of sentences from the Rotten Tom
  • 【蓝桥杯Python】基础练习17:矩阵乘法

    试题 基础练习 矩阵乘法 目录 题目 资源限制 问题描述 输入格式 输出格式 样例输入 样例输出 解答 Python源代码 题目 资源限制 时间限制 1 0s 内存限制 512 0MB 问题描述 给定一个N阶矩阵A 输出A的M次幂 M是非负
  • 多因素方差分析_多因素方差分析(1)

    之前介绍的方差分析 称之为是单因素方差分析 one way ANOVA 主要研究单个因素对因变量的影响 多因素方差分析 是研究多个 2个或2个以上 自变量对因变量的影响 可以直观表现为以下公式 单因素方差分析 Yi a b Xi e 多因素
  • c语言变参宏和利用变参宏的一些简单的打印实现

    一些函数 如printf 接受数量可变的参数 stdvar h头文件提供了工具 让用户自定义带可变参数的函数 通过把宏参数列表中最后的参数写成省略号 即3个点 来实现这一功能 这样 预定义宏 VA ARGS 可用在替换部分中 表明省略号代表
  • Java的运算符及开发环境的安装

    一 运算符 1 赋值运算符 变量名 表达式 符合赋值运算符 2 算术运算符 整除 求余 在后 先用再加 在前 先加再用 3 关系运算符 如 gt lt gt lt char类型是可以比较 因为char类型存储的是对应的ASCII 判断一个字
  • 哪些循环依赖问题Spring解决不了?

    前言 大家都知道 Spring 解决了循环依赖的问题 网上也可以搜到 Spring 是使用三级缓存来解决循环依赖的 但有些时候循环依赖问题还是会导致启动报错 也就说明 在某些情况下 Spring 是没有办法解决循环依赖问题的 我们就来探究一
  • JIRA工作流节点状态变化前弹出窗口填写日志或者备注

    一 定义弹出框的页面 1 进入问题管理页面 并点添加屏幕 2 自定义弹出页面的名称 3 点击添加后会进入配置页面 配置页面所包含的字段 二 在工作流中配置页面 1 进入工作流编辑页面双击需要添加弹出页面的流程 2 在弹出框中页面栏选择刚刚配
  • Python爬虫必备:浏览器开发者工具的使用,非常详细

    最近很多小伙伴说 不会用浏览器开发者工具 今天我们就一起来深入了解一下开发者工具 以谷歌浏览器为例 谷歌浏览器开发者工具中的Network 是我们学习经常用到的 那么你都知道他们每个功能的意义吗 因本人经常有360极速浏览器 谷歌内核 所以
  • vue pdf.js统计pdf的页数

    参考链接作者原文展示了PDF 我只需要一部分功能
  • Adobe进军AI第一步——Firefly试用体验

    在关于人工智能讨论度高居不下的今天 各个行业的领路企业也纷纷不甘落后 Adobe作为媒体界的行业标杆 就在近期推出了自己的人工智能图像应用 萤火虫firefly 虽然这只萤火虫刚刚 起飞 它已经展现的文字生图和能力算是及格 我分别在网页版和
  • spark-submit 碰到 Spark-submit:System memory 466092032 must be at least 471859200

    在利用spark进行分布式计算时 home hadoop spark spark 2 4 0 bin hadoop2 7 bin spark submit master yarn ALS py 以上代码是在centos7 利用spark集群
  • vim 一段代码整体移动

    方法1 可以用ctrl v 然后上下移动光标 再shift i进入编辑模式 然后按删除或者空格或者tab键来移动第一行 然后按ESC 就能整段代码动起来了 方法2 1 点击 esc 键进入命令模式 使用 set nu 显示行号 2 点击 e
  • 又是第一!GBASE南大通用蝉联中国分析型数据库管理系统市场TOP1

    报告指出 大数据时代 用户对数据分析的需求不断提升 希望从大量数据中获得新的数据价值 数据分析需求不断上升 分析型数据库市场保持稳定增长 GBASE南大通用作为分析型数据库市场的代表企业 位居本土厂商第一名 在分析型数据库市场 GBASE自
  • 插件分享

    前言 要问我Goby怎么样 我会坚定回答你 最强实时网络空间测绘 没有之一 初次发现Goby还是来自于同事 hq404的推荐 看完第一反应 真漂亮 我馋了 我要xxxxxx 其Logo和UI做的相当棒 当然不仅拥有华丽的外表 更让我深爱又离