插件分享 | 可进行 Web 路径爆破的 Dirsearch

admin 2021年5月7日09:49:27评论101 views字数 5904阅读19分40秒阅读模式

插件分享 | 可进行 Web 路径爆破的 Dirsearch

Goby社区第14 篇插件分享文章

全文共:5807    预计阅读时间:15 分钟

前言:Dirsearch 是一成熟的命令行工具,旨在暴力扫描页面结构,包括网页中的目录和文件。当我们在使用 Goby 扫描时,有一些网站打开是空白页面或者直觉告诉我们没有这么简单的页面,这时通过目录扫描或许能发现不一样的惊喜(网站后台、未授权访问页面等等),Dirsearch 插件助你能够更便捷的发现这些惊喜。

插件分享 | 可进行 Web 路径爆破的 Dirsearch 01

 插件效果
1.1 插件使用
下载插件并配置 dirsearch.py、python3 路径或命令。接下来就可以在ip详情页跟 webfinder 页面使用 dirsearch。扫描完成后会生成一个 csv 文件,可在侧边栏查看扫描结果并双击打开 csv 文件。

插件分享 | 可进行 Web 路径爆破的 Dirsearch 02

 插件开发
2.1 插件目录结构

参考 https://github.com/gobysec/GobyExtension 的开发文档,目录结构如下:

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

主要代码在 package.json 和 extension.js,前者为插件的配置清单,后者为插件的主要代码。

2.2 注册插件配置清单

这里需要编写 package.json,参考了@zhzyker 表哥的 vulmap 插件,内容如下:

"contributes": {      "configuration": {        "dirsearch.py 位置": {          "type": "string",          "default": "",          "description": "请输入dirsearch.py的位置(示例:/home/ccc/dirsearch.py)",          "fromDialog": true        },        "python3 命令或位置": {          "type": "string",          "default": "python3",          "description": "请输入在当前环境下的Python3的命令或位置,也可以是绝对路径(示例:python3 or /usr/bin/python3)"        }      },    "views": {      "ipDetail": {        "bannerTop": [          {            "command": "dirsearch_scan",            "title": "dirsearch",            "icon": "./src/assets/logo.png",            "visible": "DirsearchCheck"          }        ]      },            "webfinder": [                {                    "command": "dirsearch_scan",                    "icon": "./src/assets/logo.png",                    "title": "dirsearch"                }            ],            "toolbar": [        {          "command": "dirsearch",          "title": "dirsearch",          "icon": "./src/assets/logo.png",          "tips": "Dirsearch_Result"            }          ]        }    }

这里主要注册了 dirsearch.py 位置、python3 命令或者位置、ipDetail 按钮、webfinder 按钮、toolbar 页5个配置清单。

1. 因为 Dirsearch 是通过 python3 调用 dirsearch.py 来使用的,所以需要设置 dirsearch.py 位置来调用扫描;

2. 至于 python3 命令或者位置是因为由于操作系统的差异,需要用户来指定 python3 的位置或者命令。例如我的操作系统是 mac,可以使用默认值 python3 调用,windows 下则需要确认 cmd 窗口输入 python、python3 能够调用 python3 命令或设置成 python3 绝对路径;

3. ipDetail 按钮、webfinder 按钮不用多说,是用来调用 IP 详情页、webfinder 目录扫描任务的按钮;每次目录扫描都会生成一个 csv 文件用来存储扫描结果;

4. toolbar 页可以直接从侧边栏查看扫描结果并双击打开 csv 文件。

对应的效果如下:

dirsearch.py 位置、python3 命令或者位置效果

插件分享 | 可进行 Web 路径爆破的 Dirsearch

toolbar 页效果

插件分享 | 可进行 Web 路径爆破的 Dirsearch

2.3 设定 http、https为入口

众所周知,目录扫描是是需要 http、https 协议,首先是一个访问的 url 才可以进行扫描,但是 ip 详情页会显示一些其他的服务,例如 smb、rdp、ssh 等服务是没办法进行目录扫描的,所以这里我们要处理一下,让只有是 http、https 协议的端口才显示 Dirsearch 按钮。此时我们要编写 extension.js 文件,代码如下:

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

然后注册命令用于检测是否显示 Dirsearch 按钮。

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

这样 Goby 界面就会在 http、https 协议显示 Dirsearch 按钮。

效果如下:

插件分享 | 可进行 Web 路径爆破的 Dirsearch

2.4 扫描任务调用及显示结果

这里扫描任务主要是通过调用 cmd 窗口进行的,每次扫描任务都会创建一个 csv 文件并且过滤 404 状态码,代码如下:

function runScanner(targetUrl,taskResult){        var cp = require('child_process');        var command  = config["python3 命令或位置"]["default"] + " " + config["dirsearch.py 位置"]["default"] + " -u " + targetUrl +" "+"-x 404 "+"--csv-report="+taskResult;         //console.log(command);         if (os.type() == 'Windows_NT') {                //windows                console.log();                cp.exec(`start cmd /k ${command}`);
            }else if (os.type() == 'Darwin') {                console.log(command);                let dircmd = `                        osascript -e '                            tell application "Terminal"                                 activate                                do script "${command}"                            end tell                        '`                cp.exec(dircmd, (error, stdout, stderr) => {                    if (stdout != "") {                        console.log(stdout);                    }                })
            }else if (os.type() == 'Linux') {               //Linux                // cp.exec(`bash -c "${url}"`)                const { exec } = this.cp;                exec(`bash -c ${command}`, (error, stdout, stderr) => {                        console.log(`stdout: ${stdout}`);                        console.log(`stderr: ${stderr}`);                        if (error) {                            console.error(`执行的错误: ${error}`);                            goby.showErrorMessage(`执行的错误: ${error}`);                            return;                        }                    }                )            }        }

按照 Goby 扫描任务 id 保存 csv 文件。

 var taskResult =__dirname +"/result/"+goby.getTaskId();       if (!fs.existsSync(taskResult)) {            fs.mkdirSync(taskResult);            var taskResult =taskResult+"/"+IP+"_"+Port+".csv";            runScanner(targetUrl,taskResult);        }else{            var taskResult =taskResult+"/"+IP+"_"+Port+".csv";            runScanner(targetUrl,taskResult);         }

接下来只需要把 csv 文件按照 Goby 任务 id 显示在侧边栏中。首先我参考了 FOFA 的查询页面,拿过来稍微改了一下,点击侧边栏显示一个 html 页面,效果如下:

插件分享 | 可进行 Web 路径爆破的 Dirsearch

然后获取获取到所有以 Goby 任务 id 保存的 csv 文件名,并按照时间降序排序。

getFilesList() {            var filePath=__dirname+"/result/"+goby.getTaskId()+"/";            let filesList = [];            if (fs.existsSync(filePath)) {                let files = fs.readdirSync(filePath);                console.log(files);                files.forEach((item, index) => {                    if (item.indexOf('.csv') != -1) {                        var fullPath = path.join(filePath, item);                        var prefix = fs.statSync(fullPath, {                            bigint: false                        })
                        //console.log(fullPath);                        filesList.push(prefix.birthtimeMs+'|'+fullPath);                    }                });                filesList=filesList.sort (function(a,b){return b.localeCompare(a)});                 //filesList = filesList.reverse();                  console.log(filesList);                return filesList;            } else {                return filesList;                        }        }

接下来就是在 html 页面把 csv 文件遍历出来,通过 openExternal 方法实现点击打开 csv 文件,这里请教了@叶落凡尘 表哥和@go0p 表哥,在这也遇到了不少的坑,例如忽视了 mac、windows 分隔符的问题,导致 windows 下无法正常打开文件等问题。

function getLocalFile(page, type) {      var path= parent.require("path");      var os=parent.require('os');      var fs =parent.require('fs');      let files = parent.getFiles.getFilesList('');      console.log(goby.getTaskId);      if (files && files.length > 0) {        let html = "";        let count = files.length;        res = files.slice(10 * (page - 1), page * 10);        //console.log(res);        res.forEach((v,k)=>{          console.log(v.split("|"));        html += `<tr>            <td min-width="50">${(10 * (page - 1) + k + 1)}</td>            <td min-width="50"><a class="open_file" style="color:var(--main-color);" href="#">${path.basename(v.split("|")[1])}</a></td>            <td min-width="50">${birthTime(v.split("|")[1])}</td>          </tr>`      });        $("#file-table tbody").html(html);          if (type) {          var laypage = layui.laypage;          laypage.render({                  elem: 'page',                  limit: 10,                  curr:page,                  count: count,                  jump: function (obj, first) {                  getLocalFile(obj.curr);              }          });        }        $('.open_file').click(function () {          if (os.type() == 'Windows_NT') {              goby.openExternal('file://' +goby.__dirname+"\result\"+goby.getTaskId()+"\"+$(this).text());          }else{             //console.log(goby.__dirname+"/result/"+goby.getTaskId+"/"+$(this).text())              goby.openExternal('file://' +goby.__dirname+"/result/"+goby.getTaskId()+"/"+$(this).text());            }          });      }else{          if (goby.getTaskId()=='') {                  $("#no-data").html("请先选择一个扫描任务吧~~");              }else{                  $("#no-data").html("没有扫描结果~~");              }                       }            }

到这里就接近尾声啦,最终效果是这样的~

插件分享 | 可进行 Web 路径爆破的 Dirsearch

 

插件分享 | 可进行 Web 路径爆破的 Dirsearch 03

 小结

第一次开发 Goby 插件让从来没接触过 node.js 的我学到了不少的东西,官方文档写的也非常详细,开发门槛并不高,欢迎有想法的表哥,踊跃尝试开发自己的插件,同时感谢@叶落凡尘 表哥和@go0p 表哥的耐心指导,后续也将把插件继续完善,如遇到问题也欢迎在群里反馈,我会尽力去解决。

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

https://gobies.org/docs.html

关于插件开发在B站都有详细的教学,欢迎大家到弹幕区合影~

  • https://www.bilibili.com/video/BV1u54y147PF/

     

插件分享 | 可进行 Web 路径爆破的 Dirsearch

更多插件分享

• Bacde | 可以查询子域名及同IP域名的RapidDNS

• Poc Sir | 可对网站进行一键扫描的Packer Fuzzer
• go0p | 可调用Goby API进行漏洞检测的Goby_exp

• zhzyker | 可进行Web漏洞扫描和验证的vulmap

• h1ei1 | 如何快速上手 Zookeeper 未授权漏洞

更多 >>  插件分享

如果表哥/表姐也想把自己上交给社区(获取超级内测版)插件分享 | 可进行 Web 路径爆破的 Dirsearch,戳这里领取一份插件任务?

https://github.com/gobysec/GobyExtension/projects

插件分享 | 可进行 Web 路径爆破的 Dirsearch

 

本文始发于微信公众号(GobySec):插件分享 | 可进行 Web 路径爆破的 Dirsearch

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年5月7日09:49:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   插件分享 | 可进行 Web 路径爆破的 Dirsearchhttps://cn-sec.com/archives/368129.html

发表评论

匿名网友 填写信息