Goby插件分享 | 可以上传json文件的“Shodan插件”

耳东  1616天前

插件海报-大壮.jpg

前言:我大概是接触 Goby 比较早的一波人,偶然间看到 Goby 很是惊艳,也幸运的被表姐拉到当时只有 9 人的 Goby中国区交流1群。白嫖了那么久也想为社区做点贡献,于是在插件功能发布后,打算写一个好玩或者很实用的插件同时也问了亦凡大兄弟,矿泉水表哥和 Jr.D 表哥。但是构想了很久也没找到,和矿泉水表哥聊天的过程中发现表姐有在催他写插件,我这才发现,他们太过分了——都在私下里偷偷找表姐聊天!忍不住的我一顿私聊,表姐切换了多个角色(产品经理和用户)与我讨论,推荐了表哥们反馈多次的一个重量级功能需求和Shodan。考虑到自己前端小白,就定下了相对简单的 Shodan 。没想到还是遇到不小困难,不愧是Shodan。

0x001 插件效果

1. 在线查询

国内速度很慢经过测试一段时间后 Shodan api 服务器会直接断开连接导致搜索无结果,推荐使用导入功能。一般 11M 大小的数据时间没超过2分钟返回没什么问题,比如搜索海康的摄像头:

Hikvision-Webs country:"IN" city:"Tirunelveli"

Image

2. 导入Shodan Json

shodan download hikvision-in Hikvision-Webs country:"IN"gzip -d hikvision-in.json.gz

Image


0x002 开发流程

1. 开发

我前端开发经验很少,js 更是很少用,由于这个插件功能和 FOFA 插件很像,所以这次开发基本没怎么看官方开发文档,照着 FOFA 插件一顿抄。主要修改的文件有 package.jsonextension.jsfofa.html。其中 fofa.html增删了js,其他地方基本都是替换工作。唯一原创的工作大概是上传功能。设计思路是加载本地文件,然后按行读取(shodan下载的 json 文件是每行一条 json 数据)。本着不造轮子的思想,我在网上找了一段按行读取的代码直接拿来使用,真正写的代码大概就是调用这段 js :

var lr = new LineReader();var file = $('#shodan-files').get(0).files[0];var totalCount = 0;lr.on('line', function (line, next) {    singleAssert = JSON.parse(line)    results.push({    "ip_str": singleAssert.ip_str,    "port": singleAssert.port    })    htmlTable += `<tr><td>${singleAssert.ip_str}</td>      <td>${singleAssert.port}</td>      <td>${singleAssert.org}</td>      <td>${singleAssert.location.country_name}</td></tr>`    // console.log(htmlTable)    totalCount++;    if (totalCount % 10 == 0) {    $("#ip-table tbody").html(htmlTable);    }    $("#shodan-export-btn").text("导入/" + totalCount + "条")    next();});lr.on('error', function (err) {    console.log(err);});lr.on('end', function () {$(".loading").hide();$("#ip-table tbody").html(htmlTable);console.log('Read complete!');});lr.read(file);


2. 调试

如果觉得使用 Goby 开发版本调试麻烦。可以把 fofa.html 当成一个静态页面去调试:


ext-shdoan-debug.png
3. 发布

把改造后的文件压缩成 zip 后通过登录客户端上传:

ext-shodan-upload.png

提示:更新插件不是新建插件,而是通过已经发布的插件右侧小时钟图标上传新版本号。


0x003 小结

有FOFA插件在前,所以我大概1个多小时就完成了开发。测试发现数据量大时坑就来了,一是查询速度就会很慢因为shodan 不支持指定返回字段,这样数据就会特别大这个问题还可以接受。二是经常数据返回不完全,这就很难受了...问题出在哪?py 脚本测试一下发现也会出现这个问题,上了代理以后问题全无。抓包分析一下,数据量大了以后 shodan 服务器一段时间后会主动发起断开连接,最后还会强制发 rst 包。断定是网络问题,找了很多方法也没解决,既然那么鸡肋想着再换一个写吧,最后在表姐的鼓励下,哦吼,加个上传功能,搞定。后面计划用VUE重构,然后扫描增加一个白名单功能。


Goby 插件开发起来还是挺简单和好玩的。也有不少人在微信群里发出需求。比如 nmap 结果导入,masscan 结果导入,结合 xray 、pocsuite、awvs 或者结合其他漏洞验证工具。有兴趣的小伙伴可以趁机联系表姐,全程都有表姐的鼓励和监督,还有亦凡的鼓励和支持。


插件开发文档:https://github.com/gobysec/GobyExtension


文章来源于Goby社区成员: 李大壮' ,转载请注明出处。

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

下载Goby正式版:http://gobies.org

最新评论

昵称
邮箱
提交评论