CloudFlair - 获取藏在 Cloudflare 后的源站IP一文中,我讲到如何用CloudFlair来获取配置有错误的藏在cloudflare后网站的源站ip,他的原理是使用了空间搜索引擎的扫描数据。

具体原理可以查看原作者的文章,以及翻译版本

但是这个扫描数据是怎么来的呢?或者我们怎么样可以来扫描全网中配置错误的网站呢?

昨天群里有个小伙伴想查 ppy.sh,玩osu的小伙伴很熟悉这个域名吧。
因为我将CloudFlair整合到了bot中,所以顺手查了下,返回如下几个ip:

1
2
3
4
5
- 151.80.18.195
- 192.99.38.38
- 162.243.70.14
- 37.139.15.128
- 192.99.201.125

我们可以用浏览器访问 https://151.80.18.195, 就会看到报错信息:

1
2
3
151.80.18.195 使用了无效的安全证书。 
该证书仅对下列域名有效: *.ppy.sh, ppy.sh
错误代码: SSL_ERROR_BAD_CERT_DOMAIN

因为443端口的webserver绑定了证书,这个证书只对”*.ppy.sh, ppy.sh “域名有效
那我们可以使用curl来获取证书的信息

使用curl

curl

1
2
3
4
5
echo quit|curl -v https://151.80.18.195 2>&1| grep 'subject'
* subject: CN=*.ppy.sh
* subjectAltName does not match 151.80.18.195
* SSL: no alternative certificate subject name matches target host name '151.80.18.195'
curl: (51) SSL: no alternative certificate subject name matches target host name '151.80.18.195'

输出内容比较多

使用openssl

还可以使用openssl

参考 https://superuser.com/questions/97201/how-to-save-a-remote-server-ssl-certificate-locally-as-a-file
https://stackoverflow.com/questions/9450120/openssl-hangs-and-does-not-exit

1
2
echo quit | openssl s_client -connect 151.80.18.195:443 2>&1 |  grep subject
subject=/CN=*.ppy.sh

使用cut过滤

1
2
echo quit | openssl s_client -connect 151.80.18.195:443 2>&1 |  grep subject | cut -d\= -f3
*.ppy.sh

我们就可以以此为核心来写个循环,扫描全网了