前言:如果你问我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 Sir。 虽然现在大师插件的代码简单粗暴,但是已经可以实现想象中的扫描效果了。 上线一天半的产品还是达到了预期的效果。
后续版本将会引入html格式的报告,插件扫描结果后期也将改为html格式,让大家查看结果更加直观、方便。
插件开发文档及Goby开发版本下载:
B站有详细的插件开发教程,欢迎大家在弹幕区拍照哦~