文章来源:https://medium.com/yassineaboukir/automated-monitoring-of-subdomains-for-fun-and-profit-release-of-sublert-634cfc5d7708


前言

目前,Bug Bounty(漏洞众测)产业飞速发展,每天都有新项目不断地被推出,同时白帽子之间的竞争也愈发激烈。这是一场角逐金钱的竞争,白帽们争先恐后的想成为提交有效报告的第一人,因为奖励只有一次 。因此,获取优势是必不可少的,这样你才可能占得先机。不断地学习拓宽你的技能是一个好方法,但是改进你的测试技巧也很重要,比如说提高信息收集的效率,这会帮助你挖掘更多漏洞。

关于这一点,我写了一个安全侦察的小工具。这个工具可以帮助我自动化监控某个组织的子域名,在目标发生一些变化时,该工具将给我发送提示(邮件)。

我在NullCon 2019OWASP Seasides活动期间分享了这个工具。

Sublert简介

Certificate Transparency(证书透明度 ,简称:CT)是一个新的互联网标准,使得TLS/SSL证书颁发过程公开透明。这个标准使域名所有者了解到网站的TLS/SSL证书是由公共certificate authorities(证书颁发机构,简称:CA)签发的。

Sublert是一个安全侦察工具,这个工具利用了证书透明原则,利用目标组织的TLS/SSL证书从而监控部署的新子域。该工具应该在固定间隔时间下(最好为隔天)周期化运行。每次获取的新子域将会被发送至Slack的工作区,并且会推送提醒。此外,该工具还会通过DNS解析来鉴别子域能否工作。

Sublert主要通过加强侦察工作来帮助白帽子获取更广阔的攻击面,并且通过抢先一步发现新子域从而打破竞争平衡。除此之外,Sublert也能用于内部AppSec项目,帮助工程师团队即时监控各个子域的部署状况。

类似的工具

网上已有一些类似的开源工具,如Cert SpotterFacebook监控工具,但是这些工具主要用于监控那些虚假证书或者错误颁发证书的域名,从而预警钓鱼网站带来风险。因此,如果你的目标资产范围庞大,那么你可能会被成千上万个垃圾邮件包围,这些邮件由网络钓鱼域名和无关域名组成。

Sublert配置

条件:

  • 一个Unix系统的VPS
  • Python 2.x或3.x
  • Slack 工作区(免费)

安装教程

首先,从Github克隆该工具至你的web服务器(VPS):

$ git clone https://github.com/yassineaboukir/sublert.git && cd sublert

安装两个所需模块:

  1. Python 2:
    $ sudo pip install -r requirements.txt
  2. 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)。

点击收藏 | 1 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖