01
或进入Web检测页:
注:web检测的Xray入口目前只有开发版才有。
1.2 生成报告
02
开发流程
"contributes": {
"configuration": {
"XrayPATH": {
"type": "string",
"default": "",
"description": "请输入Xray的路径",
"fromDialog": true //该配置参数是否可以通过读取文件路径设置
},
...
...
}
}
其次我们要在Goby探测完资产后,在IP详情页面的banner上显示出我们的插件,因此需要设置contributes.view.ipDetail.bannerTop:
"views": {
"ipDetail": {
"bannerTop": [
{
"command": "Xray_crawler",//注册命令的名称
"title": "Xray-crawler",//在按钮中显示的文字
"icon": "src/assets/img/Xray.ico",
"visible": "Xray_crawler_visi" //控制自定义组件是否显示的命令,返回true显示,返回false不显示
}
]
}
}
如果Xray扫到了漏洞,我们还需要查看报告。稍加思索发现放在更多下拉菜单相对比较合适,于是需要设置contributes.view.scanRes.moreOptions:
"scanRes": {
"moreOptions": [
{
"command": "Xray_Report",
"title": "Xray Report",
"icon": "src/assets/img/Xray.ico"
}
]
}
到这里,我们插件的自定义的视图入口点就算基本写好了,以上这些都可以在GobyExtension中找到,而且有更多的视图入口点和更加详细的说明。
通过Goby.getConfiguration获取上面的插件配置项
let config = Goby.getConfiguration();//通过config.XrayPATH.default就可以获取到用户输入的Xray路径
xray_crawler
命令,由于xray_crawler
要触发的命令基本都是照搬的官方MSF Sploit插件代码,这里就不再叙述了,有兴趣的可以看看MSF Sploit代码。xray_Report
,实现原理主要是用node.js的fs模块读取Xray生成的json格式的报告,再传入html页面中进行处理。
//extension.js
let cp = require('child_process');
const os = require('os');
const path = require('path');
const fs = require('fs');
//导入的一些node.js内置模块
function activate(content) {
let identical = {
"web": true,
"http": true,
"https": true, //只有这些协议插件才会显示,同理可以对一些端口啊什么的做过滤
};
let config = Goby.getConfiguration();
Goby.registerCommand('Xray_Report', function () { //注册要执行的命令,也就是contributes.view.scanRes.moreOptions[0].command的值
let json_file = path.dirname(config.XrayPATH.default) + "/Goby" //设置要读取的json报告的路径,在Xray_crawler命令中设置了会在Xray的路径下生成一个名为Goby的文件夹用来存放Xray生成的json格式的报告
var filesList = []; //filesList 列表用来存放生成的json文件名
var info = []; //存放json文件中的内容
readFileList(json_file, filesList);// 百度了个读取指定路径下的文件并返回列表的函数
filesList.forEach(function (v) {
var data = fs.readFileSync(v, 'utf-8')
if (data.charAt(data.length - 1) == ']') { //判断json文件的最后一个字符是不是']'
jsondata = JSON.parse(data);//Xray正常扫完某个url,生成的json报告由[]包裹
} else {
jsondata = JSON.parse(data + ']');//url未扫完但是已经扫到了漏洞,咱们手动给它闭合一下
}
jsondata.forEach((v, k) => {
info.push(v)
});
});
var infoBase64 = new Buffer.from(JSON.stringify(info)).toString('base64');//因为有比较多的特殊字符,咱们base64编码一下
if (info && info.length > 0) {
let path = __dirname + "/xReport.html?info=" + infoBase64;//传入到html页面
Goby.showIframeDia(path, "Xray_Report", "960", "500");
} else {
Goby.showInformationMessage("Xray暂未产生报告!");
}
});
Goby.registerCommand('Xray_crawler_visi', function (content) {
if (identical[content.protocol]) return true;//对协议名称进行判断
return false;
});
}
<script src="assets/js/jquery.base64.js"></script>
function decode(str) {
var debase64 = $.base64.decode(str);
return debase64;
}
function GetIframeQueryString(name, id) {
var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');//正则匹配'info=xxxxx'
var r = window.parent.document.getElementById(id).contentWindow.location.search.substr(1).match(reg);
//r[0]:info=xxx r[1]:"" r[2]:xxx
if (r != null) {
return decode(r[2]);//base64解码一下
}
return null;
}
let results = JSON.parse(GetIframeQueryString("info", "Goby-iframe"));
建议使用1.7.199版本的开发版Goby,此版本的信息打印的十分详细,更加方便调试:
也可以在extension.js同级目录下新建一个test.js用来测试、打印信息,比如上文中的文件读取,然后再用node执行就可以比较方便的进行调试,省去了重启Goby这一操作。
//test.js
const path = require('path');
const fs = require('fs');
function readFileList(dir, filesList = []) {
const files = fs.readdirSync(dir);
files.forEach((item, index) => {
if (item.indexOf('.json') != -1) {
var fullPath = path.join(dir, item);
const stat = fs.statSync(fullPath);
if (stat.isDirectory()) {
readFileList(path.join(dir, item), filesList); //递归读取文件
} else {
filesList.push(fullPath);
}
}
});
return filesList.reverse();
}
let json_file = '/Users/go0p/Tools/Xray/Goby';
var filesList = [];
var info = []
readFileList(json_file, filesList);
console.log(filesList);
filesList.forEach(function (v) {
var data = fs.readFileSync(v, 'utf-8')
if (data.charAt(data.length - 1) == ']') {
jsondata = JSON.parse(data);
} else {
jsondata = JSON.parse(data + ']');
}
jsondata.forEach((v, k) => {
info.push(v)
});
});
console.log(info);
var infoBase64 = new Buffer.from(JSON.stringify(info)).toString('base64');
console.log(infoBase64);
./src
├── assets
├── extension.js
├── xReport.html
└── test.js
1 directory, 3 files
$ node test.js //进行测试,查看打印信息
1.7.199开发版下载 https://gobies.org/docs.html#Getstarted
03
在社区表哥们建议下,后面我有迭代过两次,修复了wins下报告问题并加入rad浏览器爬虫。高级版的Xray对rad进行了深度融合,使用--browser-crawler配合插件只用开一个terminal/cmd 窗口真的太香了。社区版Xray联动rad需要设置Xray路径、rad路径、rad执行参数及Xray被动代理服务器,具体操作可到扩展程序Details查看。
Goby & Xray 联合送福利
Xray纪念版短T x5
Goby纪念版短T x5
① 点击下方活动链接参与抽奖;
② 转发本文到朋友圈;
③ 转发成功后截图发送至Goby公众号后台。
审核满足条件后即可获得抽奖资格。未满足②③条件但被抽中,则获奖资格会被取消哦~
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论