前言

很长一段时间不写博客了,一来是不知道写什么,二来是忙于学习各种东西完全没有自己的思考。因为入行时间短且人笨不努力,想了想还是努力一下看能不能学习一下安全工具的编写。于是就有了这个工具。
为什么使用go写呢?一是java学傻了,一时半会儿不想看它了;二是go作为一个原生语言,快是它的特点;三是发现go有很多现成的安全项目可以白嫖。
所以我并不标榜这个工具是自己的原创,我只是站在了巨人的肩膀。
项目地址:信息收集自动化工具-puzzle

功能简述

puzzle意在一次性操作解决红队前期信息收集和薄弱点探测问题。目前集成有子域名收集、C段扫描、web端信息爬取等功能。这些都可以在一次操作内完成。
你给他一个子域名,它会收集子域信息,并判断真实存在的ip从而收集C端资产。资产收集完毕后开始扫描web端信息,包括且不限于中间件、服务、端口、指纹。

开发思路

首先我们需要理清红队信息收集的思路,前期打点是一个很枯燥的过程,但又在很大程度上决定了红队渗透的深度。你是从边缘资产进入还是主资产?是业务区还是生产区?获取的web应用中是否有一定的用户数据?拿到的shell出不出网?是win主机还是linux?这些就决定了后期内网的难易程度。尽可能多的获取权限和数据、尽可能的去逼近资产业务区,这是打点的重中之重。

第零步是收集企业及其子公司的备案信息,确定归属于它的子域名和ip,这一步可以使用ENScan来解决,效果还是蛮好的。我暂时并不准备集成这个功能,他更偏向于爬虫,写起来很是麻烦。

1. 子域名爆破

对应参数 -d/dl

获取了子域名和ip,这时我们开始子域名爆破,这里可以把收集的ip也一并放入,会在后面扫描。
在子域名收集上我选择ksubdomain + 自编写WebApi,感谢大佬在我重构了半个月ksubdomain时新增了一个可以直接调用的api接口,我心情十分复杂。
简单来说,我要拿go实现一个爆破起来更快,但webapi接口相对较少的OneForAll,可能有人会觉得直接调用oneforall就可以了,但我还是决定自己写一次。
爆破和web获取子域名,去重,获取A解析和CNAME,这时对获取的ip进行第一次筛选,同时刚才的备案ip也会在这一步被整理。
首先判断是否为CDN,然后获取ip的归属地和运营商。整理去重,跟据ip段的连续性筛选出可能属于该企业的ip段。

2. IP信息收集

对应参数, -m port -i/ipl

这边的参考工具是kscan,准确的说是调用了作者编写的gonmap。
本来打算自己写一个ip扫描的,但在解决丢包和状态表上一直搞不定,索性摆烂了。
模块会将之前收集的真实ip段、原输入ip一起爆破。
这部分用top1000端口爆破,也可自定义,尽可能全面的收集存在服务的端口,获取它的bnner,将其划为WEB和非WEB两种。

  1. web服务
    存在web服务的加入后续的指纹扫描list中
  2. 非web服务
    进行常用端口弱口令爆破,若3306、3389、1445、22等,爆破模块还在写。

3. 指纹扫描

指纹扫描使用两种,一个是0x727维护的FingerprintHub,一个是projectdiscovery维护的wappalyzergo,两者一个侧重精确指纹,一个侧重网站使用技术。
对上面两个模块收集的web服务进行扫描,输出到报告中。

总结

看起来只有三个模块,但前前后后修修改改,也写了近一年的时间。模块间的整合、各种数据的处理,也体会到了造轮子的快乐。现在这个系统也算是可以正常运行,也达到了我之前预想的效果。之后会再对现有模块进行优化,还要更多整合一些便利的功能进去。
未来功能期望:

  • 加入一个主动爬虫,为之后与被动扫描器联动打基础
  • 联动被动扫描器,或者先进行主动poc测试
  • 对js中存在的一些信息泄露做收集,如ak、密钥等

"孓然一身 , 了无牵挂"