前言
目前,Bug Bounty(漏洞众测)产业飞速发展,每天都有新项目不断地被推出,同时白帽子之间的竞争也愈发激烈。这是一场角逐金钱的竞争,白帽们争先恐后的想成为提交有效报告的第一人,因为奖励只有一次 。因此,获取优势是必不可少的,这样你才可能占得先机。不断地学习拓宽你的技能是一个好方法,但是改进你的测试技巧也很重要,比如说提高信息收集的效率,这会帮助你挖掘更多漏洞。
关于这一点,我写了一个安全侦察的小工具。这个工具可以帮助我自动化监控某个组织的子域名,在目标发生一些变化时,该工具将给我发送提示(邮件)。
我在NullCon 2019的OWASP Seasides活动期间分享了这个工具。
Sublert简介
Certificate Transparency(证书透明度 ,简称:CT)是一个新的互联网标准,使得TLS/SSL证书颁发过程公开透明。这个标准使域名所有者了解到网站的TLS/SSL证书是由公共certificate authorities(证书颁发机构,简称:CA)签发的。
Sublert是一个安全侦察工具,这个工具利用了证书透明原则,利用目标组织的TLS/SSL证书从而监控部署的新子域。该工具应该在固定间隔时间下(最好为隔天)周期化运行。每次获取的新子域将会被发送至Slack的工作区,并且会推送提醒。此外,该工具还会通过DNS解析来鉴别子域能否工作。
Sublert主要通过加强侦察工作来帮助白帽子获取更广阔的攻击面,并且通过抢先一步发现新子域从而打破竞争平衡。除此之外,Sublert也能用于内部AppSec项目,帮助工程师团队即时监控各个子域的部署状况。
类似的工具
网上已有一些类似的开源工具,如Cert Spotter和Facebook监控工具,但是这些工具主要用于监控那些虚假证书或者错误颁发证书的域名,从而预警钓鱼网站带来风险。因此,如果你的目标资产范围庞大,那么你可能会被成千上万个垃圾邮件包围,这些邮件由网络钓鱼域名和无关域名组成。
Sublert配置
条件:
- 一个Unix系统的VPS
- Python 2.x或3.x
- Slack 工作区(免费)
安装教程
首先,从Github克隆该工具至你的web服务器(VPS):
$ git clone https://github.com/yassineaboukir/sublert.git && cd sublert
安装两个所需模块:
- Python 2:
$ sudo pip install -r requirements.txt
- Python 3:
$ sudo pip3 install -r requirements.txt
下一步使建立Slack工作区,这用于接收新子域。你只需访问https://slack.com/,然后创建一个免费账户。
创建两个频道:一个用于子域名,一个用于记录错误日志
然后,我们需要给这两个频道生成Webhook URLs以便利用Slack API
访问https://api.slack.com/apps,然后创建一个新应用。
点击Incoming Webhooks,建立两个Webhook,分别与前面创建的两个频道相连。
将每个webhook与相应的Slack频道链接。
然后获得两条类似下面格式的链接:
https://hooks.slack.com/services/XXXXXXX/BF0XXXXME/XXXXXXXXXXXXX
将这个两个webhook的链接复制到config.py
OK,安装程序完毕!
使用
添加监控的域名则是最有趣的部分。万事俱备,只欠东风,让我们用PayPal来实验一下吧:
$ python sublert.py -u paypal.com
你也可以使用其他域名作为监控目标。下一步是配置Cron ,它用于设置Sublert运行的时间间隔。
首先赋予Sublert.py执行权限:
$ chmod u+x sublert.py
然后添加一个新的Cron来安排Sublert周期化运行。
$ crontab -e
在最后一行添加
0 */12 * * * cd /root/sublert/ && /usr/bin/python /root/sublert/sublert.py -r -l >> /var/log/sublert.log 2>&1
把/root/sublert/改为你存放Sublert的目录。
如果你使用的是python3,请把/usr/bin/python改为/usr/bin/python3。下面我将稍微解释上述代码。
-
0 */12 * * *
→ 命令cron每12个小时运行一次Sublert。如果你想个性化设置为你想要的时间间隔,请参阅https://crontab.guru/ 。 -
-r
→要求Sublert 执行解析DNS。这是一个可选项(推荐开启)。 -
-l
→要求Sublert记录错误,然后会发送至Slack频道。这也是个可选项(推荐开启)。 -
/var/log/sublert.log 2>&1
→命令cron存储Sublert的输出至/var/log/sub.log,方便解决你对这个工具如何运行的一些疑惑。
你还可以通过以下命令来确定(该工具的)配置正确和运行正常。此时你应该会收到一则Slack的邮件。
$ python sublert.py -l -r
Sublert每12个小时运行一次,如果发现了新子域,你在Slack上将收到以下信息:
如果Sublert被执行了却没有发现新内容,将会有以下推送:
我推荐你在手机上安装一个Slack并且关闭Do Not Disturb模式,然后你就能随时随地获取更新。
常用的参数
添加雅虎到监控列表中:
python sublert.py -u yahoo.com
从列表中删除雅虎:
$ python sublert.py -d yahoo.com
显示当前正在监控的所有域名:
$ python sublert.py -a
设置线程数(默认:20)。如果需要,你还得将这些参数添加到cron中。
$ python sublert.py -t 30
开启Sublert执行DNS解析操作:
$ python sublert.py -r
开启Slack上的错误记录功能:
$ python sublert.py -l
重置Sublert:此操作将清空监控列表并移除所有储存的本地文件!
$ python sublert.py -m
请勿监控未授权的Bug Bounty项目,避免违反项目的安全政策。
缺陷
Sublert利用了证书透明政策,因此它只能监控使用SSL/TLS证书的子域。你无法使用该工具监控使用HTTP/80端口的子域,但你可以使用其他的一些开源工具,如Massdns, Aquatone, Sublist3r等。
项目发展
这个工具目前已经开源,在安全社区受到了广泛的好评。我已经构思出一些新条目来打磨这个工具:
- 使用关系数据库替代文本储存。
- 尽可能提取更多的信息:标题,状态码,截图以及潜在的子域名接管。
- 集成到Telegram中,用于推送通知。
Giuthub项目:https://github.com/yassineaboukir/sublert/
如有任何问题请到这里反馈(https://github.com/yassineaboukir/sublert/issues)。