手动解析 SSL 证书
我们发现,很多公司没有意识到他们在互联网上暴露的东西。特别是随着云服务使用量的增加,许多公司没有正确地配置安全的访问控制列表。他们相信他们的服务器是受保护的,但我们可以发现他们是暴露在互联网上的。包括 Redis 数据库、Jenkin 服务器、Tomcat 管理、NoSQL 数据库等等——其中许多可以导致远程代码执行以致利益损失。
找到这些云服务器的轻松而又不为人知的方法是在网络上以自动化的方式手动扫描 SSL 证书。我们可以获取云服务提供商的 IP 范围列表,并定期扫描所有这些列表以提取 SSL 证书。通过查看 SSL 证书,我们可以了解有关目标公司的大量信息。从下面对 cyberspacekittens 范围的扫描中,我们可以看到 .int 证书中的主机名。对于内部服务器,.dev. 用于开发, vpn.用于 VPN 服务器等。很多时候你会在结果中看到一些没有对应公网 IP 的内部主机名或者一些他们内部信任的白名单网段。
为了帮助扫描证书中的主机名,我为本书开发了 sslScrape。这个工具利用 Masscan 快速扫描大型网络。一旦它识别到443端口的服务,它就会在 SSL 证书中提取主机名。
- cd /opt/sslScrape
- python ./sslScrape.py [IP 地址 CIDR 范围]
云 IP 地址的例子:
- Amazon: http://bit.ly/2vUSjED
- Azure: http://bit.ly/2r7rHeR
- Google Cloud: http://bit.ly/2HAsZFm
在本书中,我会尝试提供一些代码示例和一个初步的程序框架。然而,是否在示例和初始框架的基础上进一步学习这取决于你自己。我强烈建议你从这段代码(也就是 sslScrape 的源码)开始,试着将所有获得的主机名保存到一个数据库里,再做一个 Web UI 前端作为展示页面。然后去连接其他可能有证书的端口,比如 8443 端口,这样可以从证书中获取主机的信息。甚至可以加上扫描 .git 或者 .svn 等源码信息泄露的功能。
译者注: .git/.svn 源码信息泄露,可以参考:https://www.secpulse.com/archives/55286.html 进行理解。