子域名收集这个路子真的是被玩烂了,花样百出、工具没有八百也有一千,无非是爆破、爬、调用搜索引擎之类,有资源的大厂有自己的dns库,但是这些在我眼里真的都很low。
为什么说很low,因为在职业刷src或者apt攻击者的角度,单单过一遍爆破的域名是不能满足持续性漏洞挖掘的;从职业刷src的角度,过一遍收集的子域名,已经发现了所有漏洞并已经提交后修复,或者用当前漏洞测试方法并没发现有漏洞,这样业务是安全的,但这个安全是在当下时间的,企业要发展、要解决当前问题,就会出新业务不断的pull代码更新旧问题,这就是业务的变化,通过持续性监控子域名就会发现业务的变化,最快速度的发现变化,对变化进行安全测试、漏洞挖掘。有经验的刷src的同学都知道,新业务发现漏洞概率都很高。
懒惰使人创造工具,而我就拥有这么一个工具,从14年搞的子域名爆破工具(送给过一个小姐姐,刷了好多漏,如今以身为人妻,而我还没有女朋友。),到如今的子域名监控工具。
1、通过域名爆破、搜索引擎之类方法,获得子域名后爬取子域名http响应数据保存入数据库。 2、设定时间、可以是一分钟、一小时、一天一次循环读取库内子域名,进行爬取子域名和库类http响应数据对比,对比出变化推送提醒。
从思路上是个简单的工具,但是我的集成chrome headless、subfinder,自我感觉mongodb的可视化也不错,操作便捷、使用稳定。
结果类似图上,正式版本title不会出现乱码。
功能: 通过爆破、爬取收集子域名,之后循环爬取库内数据对比发现业务的变化和新业务后及时展示、推送。 域名黑名单机制,可设置过滤.ke.qq.com、.qzone.qq.com、*.bz.qq.com之类n级子域泛解析。
ubuntu 64位 python3 go mongodb chrome chromedriver
代码下载链接: https://pan.baidu.com/s/18cR0wmJR7X3ukT6GQyynKQ 提取码: 26k6
browser.py 浏览器功能 获取html、执行js等
config.py 配置文件,一些需要的功能
mongodb_con.py mongo连接文件
start.py 开始爆破和爬取子域名获取http响应入mongo库
while_update.py 域名监测功能、遍历mongo库内数据 对比出变化域名和爬取新域名
\subfinder 用来启动最初爆破子域名
\tmp 存放browser爬取的href network请求的url
\target 存放要监测域名的配置信息
因为获取http响应的是基于chrome浏览器,模拟chrome访问,并且访问后进行多个javascript执行,所以访问每个url会比普通urllib时间要长很多,所以我添加了简易版chrome线程池以便进行多线程同步访问以便加快速度,默认是5个chrome同时模拟访问。
cd 进扫描器目录 sudo sh install.sh
install.sh内代码: sudo apt-get install mongodb golang git python3 python3-pip xvfb unzip libxss1 libappindicator1 libindicator7 -y sudo pip3 install selenium pymongo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo dpkg -i google-chrome*.deb chmod +x chromedriver sudo mv -f chromedriver /usr/local/share/chromedriver sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver sudo ln -s /usr/local/share/chromedriver /usr/bin/chromedriver
基本就可以启动扫描器。。。
其他参考:
关闭mongo命令: sudo service mongodb stop “` 1、首先修改mongodb的配置文件 让其监听所有外网ip,如果不行,连接的时候肯定会有异常 编辑文件:/etc/mongodb.conf 修改后的内容如下: bind_ip = 0.0.0.0 port = 27017 auth=true (添加帐号,密码认证)
设置结束后启动mongo命令: sudo service mongodb start 进入mongo命令行: mongo 添加超级用户 use admin db.createUser({user:’admin’,pwd:’123456aaa1xsda1A’,roles:[{role:’userAdminAnyDatabase’,db:’admin’}]}) db.auth(‘admin’,’123456aaa1xsda1A’) 添加扫描器用户 use target_domain db.createUser({user:’target’,pwd:’123456aaaxsda1A’,roles:[{role:’readWrite’,db:’target_domain’}]}) db.auth(‘target’,’123456aaaxsda1A’) “`
下载 https://www.robomongo.org/ 连接mongodb 常用mongo命令: sudo service mongodb start | stop | restart db.getCollection(‘qq_com’).find({“domain”:{“$regex”:”.3g.qq.com”}}) 搜索 db.getCollection(‘qq_com’).remove({“domain”:{“$regex”:”.3g.qq.com”}}) 删除 db.update({ “state” : 1} ,{$set:{“state”:0}}) 更新
sudo update-alternatives –install /usr/bin/python python /usr/bin/python2 100 sudo update-alternatives –install /usr/bin/python python /usr/bin/python3 150
go get github.com/subfinder/subfinder
配置目标domain.json(请注意格式)
domain 为要收集监测的目标域名,格式必须是.domain.com,如:
.qq.com .163.com .weibo.com
Blacklist_domain 为子域名黑名单,比如46456.qzone.qq.com qq空间业务,进行.qzone.qq.com绕过收集。
进入config.py配置文件,进行配置
然后执行python start.py 开始爆破、爬取子域名…域名数据决定运行时间(建议后台运行)。
结果在robomongo查看:
start.py运行结束后。
while_update.py进行库内子域名重新爬行后http响应对比,和爬取新域名。 参考:http://jinbitou.net/2016/02/24/1534.html 进行定时执行while_update设置,如:24小时执行一次,12小时执行一次,就形成子域名监测。 根据mongo库内time日期请自己设置新域名推送。