Goby插件分享 | 可以上传json文件的“Shodan插件”
前言:我大概是接触 Goby 比较早的一波人,偶然间看到 Goby 很是惊艳,也幸运的被表姐拉到当时只有 9 人的 Goby中国区交流1群。白嫖了那么久也想为社区做点贡献,于是在插件功能发布后,打算写一个好玩或者很实用的插件。同时也问了亦凡大兄弟,矿泉水表哥和 Jr.D 表哥。但是构想了很久也没找到,和矿泉水表哥聊天的过程中发现表姐有在催他写插件,我这才发现,他们太过分了——都在私下里偷偷找表姐聊天!忍不住的我一顿私聊,表姐切换了多个角色(产品经理和用户)与我讨论,推荐了表哥们反馈多次的一个重量级功能需求和Shodan。考虑到自己前端小白,就定下了相对简单的 Shodan 。没想到还是遇到不小困难,不愧是Shodan。
0x001 插件效果
1. 在线查询
国内速度很慢经过测试一段时间后 Shodan api 服务器会直接断开连接导致搜索无结果,推荐使用导入功能。一般 11M 大小的数据时间没超过2分钟返回没什么问题,比如搜索海康的摄像头:
Hikvision-Webs country:"IN" city:"Tirunelveli"
2. 导入Shodan Json
shodan download hikvision-in Hikvision-Webs country:"IN"gzip -d hikvision-in.json.gz
0x002 开发流程
1. 开发
我前端开发经验很少,js 更是很少用,由于这个插件功能和 FOFA 插件很像,所以这次开发基本没怎么看官方开发文档,照着 FOFA 插件一顿抄。主要修改的文件有 package.json
、extension.js
、fofa.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 当成一个静态页面去调试:
3. 发布
把改造后的文件压缩成 zip 后通过登录客户端上传:
提示:更新插件不是新建插件,而是通过已经发布的插件右侧小时钟图标上传新版本号。
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
最新评论