最新Xray爬虫如何联动到Goby_goby联动xray,2024年最新腾讯T2亲自教你

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

2.1 确定需要用到的Goby API

首先,我们需要用户手动输入Xray的路径,因此需要设置contributes.configuration:


"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中找到,而且有更多的视图入口点和更加详细的说明。

2.2 API调用

通过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;
  });
}

2.3 html页面的处理

官方插件中使用的是 layui 框架进行开发,由于html的那些布局啊,样式啊,实在不太会,好在现在有很多框架,并且一些不是很复杂的需求可以百度,咱不求优雅,只求至少能实现需求…接下来就是处理传过来的info数据了。

首先需要处理传过来的info信息,可以直接copy官方文档提供的代码,只需要注意base64解码一下:

<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"));

拿到了results就可以方便的将内容输出到html页面中的表格了,接下来就是一些前端的布局和样式了,由于不太会,也说不清,就不误人子弟了! (捂脸)。
在以上所以内容都完成后,就可以进行打包以及发布了~ ,由于用的官方的代码,也没引入其他模块,所以直接压缩就完事了~

2.4 一些技巧

建议使用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);


![img](https://img-blog.csdnimg.cn/img_convert/d702142a9ae4a8a24caf61fc9828f8a9.png)
![img](https://img-blog.csdnimg.cn/img_convert/fea751ba116c19d7c1d4b27a77e7bfae.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值