freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

Xray爬虫如何联动到Goby
GobySec 2020-11-04 18:45:26 325262

Xray有多香想必大家应该是知道的(上星期在做某演练的时候就用Xray扫到了不少洞)。所以,当时看见Github上有联动Xray的需求,就尝试着写了此插件。本次讲的会稍微仔(啰)细(嗦)一点,希望通过此次分享,大家也能动起手来尝试写出更多的、有趣的插件。

0x001 插件效果

1.1  web爬虫

对目标进行资产测绘后,进入IP详情页:或进入Web检测页:

注:web检测的Xray入口目前只有开发版才有。

这里借用一下Corp0ra1大佬之前在社区技术分享 | Goby食用指南之红蓝对抗技术分享中用的图:

1.2  生成报告

如果扫到了漏洞,会生成一个类似Xray的报告(代码写的很烂...),按照时间先后,最新扫到的洞会在最上面。

0x002 开发流程

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获取上面的插件配置项

.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);
            }
        }
    });
    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


0x003 完结,撒花

在社区表哥们建议下,后面我有迭代过两次,修复了wins下报告问题并加入rad浏览器爬虫。高级版的Xray对rad进行了深度融合,使用--browser-crawler配合插件只用开一个terminal/cmd 窗口真的太香了。社区版Xray联动rad需要设置Xray路径、rad路径、rad执行参数及Xray被动代理服务器,具体操作可到扩展程序Details查看。

写文章要比开发插件难多了,开发过程中可以多看看Goby官方的开发文档,发现可复用的代码可以Copy借鉴一下,调试过程中可以多使用开发者工具下断点调试,或者直接把信息打印出来。

下载Goby内测版,请关注公众号:Gobysec

下载Goby正式版,请访问官网:http://gobies.org

# XRay # Goby
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 GobySec 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
GobySec
网信风险提示
GobySec LV.6
Goby作为一款新型网络安全测试工具,能够为目标企业梳理最为全面的攻击面信息。它不仅可以开展高效且实战性强的漏洞扫描工作,还能迅速从一个验证入口点实现横向切换。此外,Goby拥有超强的AI功能,能够高效率地转化PoC(概念验证)/EXP(利用验证)。 goby官网:https://gobysec.net/
  • 67 文章数
  • 117 关注者
Goby自定义编写EXP进阶篇:以SQL注入为例的高阶变量用法讲解
2024-12-27
Goby 漏洞发布|CVE-2024-9047 WordPress File Upload 插件 wfu_file_downloader.php 任意文件读取漏洞
2024-12-25
Goby自定义编写EXP入门篇:编写模板基础使用讲解
2024-12-20
文章目录