您的位置  > 互联网

最强实时网络空间测绘,没有之一,我馋了

前言:如果你问我Goby怎么样,我会坚定地回答你:“最强大的实时网络空间测绘,没有之一”。 我第一次发现Goby是通过我的同事@hq404的推荐。 读完后我的第一反应是,太美了。 我太饿了。 我要它。 它的标志和UI非常好。 当然,它不仅有华丽的外观,还有我深爱且离不开的最强大的实时网络空间测绘。 正如官方的定位一样,快速、专业、深入、全面,这导致我现在每天都在使用它。 对于任何项目或测试工作,首先去Goby。 不过,正如前文所述,Goby 目前专注于资产映射,与漏洞扫描相关的 PoC 数量还处于堆积阶段。 看到Goby的插​​件市场越来越完善,我们计划以插件的形式加入,以补充Goby的PoC。 ,方便发现更多漏洞。

01

插件效果

1.1 插件使用

这里是插件0.1.0版本的演示效果。 后续不同版本的显示效果可能会有所不同。

02

插件开发

2.1 写前言

2.1.工具介绍

是一款Web漏洞扫描验证工具,可以进行漏洞扫描,并具有漏洞利用功能。 目前支持 Flink、Shiro、Solr、、、Unomi、、、、、、、、Nexus、、Jboss、等。

2.1.2Goby开发版

要编写Goby,您必须安装Goby。 戈比有不同的版本。 官方文档推荐使用Goby开发版本。

Goby开发版下载:

并且里面有一个例子,可以直观的展示Goby插件的效果和界面位置。 这里的Goby插件主要依赖JS。 在尝试写JS之前我没有任何写JS的经验。 我只是一个初学者。 有了一点经验,我花了一天半的时间终于实现了这个插件。 期间官方文档给了我很大的帮助。 我想向写这篇文档的我的表兄弟(也许是表兄弟)大声喊叫。 我还问了@go0p很多问题。 非常感谢(所以如果您有任何插件开发问题,请随时拨打233与他联系)。

2.2 插件目录结构

插件目录结构移自。

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

主要代码是.json和.js。 前者是插件的配置列表,后者是插件的主要代码。

2.3 设置插件配置选项

这里需要写.json,内容如下

"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)"  }},

这里主要设置两个键值。 一种是.py位置,用于设置扫描仪的位置路径。 稍后调用扫描时会用到。 没有默认值,因为每个人的目录习惯不同,所以需要手动指定。

另外,命令或位置需要用户指定命令的全名或绝对路径,在后续扫描时也可以调用。 至于填写,,.8等,就看你自己系统中的具体名称了。 还是一样的,因为每个人的配置习惯和环境变量不同。

这里有一个陷阱。 我使用的电脑是(Linux系统)。 我使用的Goby也是Linux版本,我通常使用用户zhzy(uid:1001)。 不过,因为Goby需要root权限才能启动,所以我每次都是sudo。 ./Goby启动,导致Goby识别的环境变量和我当前的环境变量不一样。 例如,我在 zhzy 用户中设置了 alias = '/xxx/.9',但是使用 sudo 运行的 Goby 会将其识别为 Linux 默认值。 这样会导致版本不对应,所以还是建议写绝对路径。

对应效果:

2.4 设置入口点

为了显示有按钮的地方,你需要编写一个.js文件,其中包含以下内容:

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

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

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

Goby 界面中会显示按钮,可以识别 http、https 和 Web 协议。 这里的按钮位置指的是插件和Xray插件。 因为它们都是进行Web扫描,所以入口点也是相同的。

对应效果:

2.5 扫描调用和结果

scan的主要调用如下:

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},请稍等片刻再次点击查看结果`);        }    })}

调用scan主要依靠var拼接系统命令。 由于Goby目前无法滚动并实时显示执行结果,因此扫描结果目前重定向到文本文件。 扫描过程中,会在插件目录下创建与任务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中调用第三方扫描仪的扫描效果就完成了。

03

概括

我第一次写JS,因为想写一个Goby插件。 由于我对JS完全不熟悉,所以我一直在很多地方参考其他现有的插件。 我主要参考了 @go0p的Goby Xray插件和@Poc Si​​r。 虽然现在大师插件的代码简单粗暴,但是已经可以实现想象中的扫描效果了。 上线一天半的产品还是达到了预期的效果。

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

插件开发文档及Goby开发版本下载:

B站有详细的插件开发教程,欢迎大家在弹幕区拍照哦~