编写可以上传json文件的“Shodan”Goby插件

  • A+
所属分类:安全文章

编写可以上传json文件的“Shodan”Goby插件

编写可以上传json文件的“Shodan”Goby插件

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


编写可以上传json文件的“Shodan”Goby插件

 0x001 插件效果
1. 在线查询
国内速度很慢经过测试一段时间后 Shodan api 服务器会直接断开连接导致搜索无结果,推荐使用导入功能。一般 11M 大小的数据时间没超过2分钟返回没什么问题,比如搜索海康的摄像头:
Hikvision-Webs country:"IN" city:"Tirunelveli"
编写可以上传json文件的“Shodan”Goby插件
2. 导入Shodan Json
shodan download hikvision-in Hikvision-Webs country:"IN"gzip -d hikvision-in.json.gz
编写可以上传json文件的“Shodan”Goby插件

编写可以上传json文件的“Shodan”Goby插件

 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);
提示: README.md、 CHANGELOG.md 如果有图片需要使用图床。
2. 调试
如果觉得使用 Goby 开发版本调试麻烦。可以把 fofa.html 当成一个静态页面去调试:
编写可以上传json文件的“Shodan”Goby插件

3. 发布

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

编写可以上传json文件的“Shodan”Goby插件

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

编写可以上传json文件的“Shodan”Goby插件

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

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

编写可以上传json文件的“Shodan”Goby插件

本文来源于互联网

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: