绕过cdn找到真实IP的一些方法

目前大部分网站都使用了cdn,而且是全站cdn,所有的流量都通过cdn,根本无法直接拿到real ip。

以下所有的测试都以斗鱼的主站http://www.douyu.com为例子,只是为了实验。

为什么要找出real ip

使用了cdn隐藏真实ip的网站,找出真实特定站点的真实ip有一定难度,尤其是大型站点。那我们为什么要费那么多功夫去找真实ip呢,似乎对于我们安全测试也没什么影响。首先想到的是黑产,找出real ip可以进行ddos攻击,那白帽子找出real ip可以对相关C段进行扫描,发现开放的高危端口甚至可能发现不公开对外的站点。

如何判断使用了cdn

常见的方法有两个,

多点ping:判断返回的ip是否一样,如果各地ip都是不一样的,就很有可能使用了cdn;

例如,使用http://ping.chinaz.com网站ping http://www.douyu.com 会很明显的发现响应IP归属地和监测点地理位置是十分相近的,部分IP直接被标注为CDN节点,确定可以断定使用了cdn。

直接ping域名:有些时候从ping结果就能看出是否使用了cdn例如:ping www.douyu.com,从命名来看是缓存服务器cname,基本上也可以确定是使用了cdn

如何找出真实ip

关于如何找出真实ip的方法有很多种,但没有那种方法是万金油,需要多种方法搭配使用,最终能否找到还需要一点运气。那么,我们尝试使用以下方法找出http://www.douyu.com的真实ip.

通过邮件服务器

邮件服务器是主动向外发送信息的,因此不可能通过cdn,所以如果邮件服务器和我们要找的网站在同一个网段的话,那我们就能测试出来了。我们在注册或者找回密码的时候会收到邮件,查看邮件原文发现邮件服务器的IP。据说针对中小型公司来说,这招还是挺管用的。

如下是斗鱼邮件服务器发出来的邮件头信息

从这个信息头可以看出,邮件从119.90.48.74发出,转发到119.97.145.140,再转发到腾讯的邮件服务器

所以我们可以先记录119.90.48.74和119.97.145.140这两个IP。或者直接对其C端进行绑定host的链接尝试。用什么方法检测呢,使用如下curl命令:

curl -H "Host: http://www.domain.com" -k

或者使用如下进行批量的检测,其中host是你要测试的ip列表数据

cat host |while read -r line; do (curl -H "Host: http://www.douyu.com" --connect-timeout 5 --write-out "$line code: %{http_code}, length: %{size_download}, redirect: %{redirect_url}\n" --silent --output /dev/null -kdone

通过子域名找到real ip

很多时候一个企业不一定会把所有站点都加挂到cdn上,个人认为经费是主要原因,对于一些内部对外的站点或者访问量不大的站点也没必要。因此可以通过类似Sublist3r这样的工具来发现子域名,将发现的子域名进行解析,获得一些列ip,使用这些ip拼接上你想要的host发出请求,看看是否能否有有效返回。

如图,根据扫描出来的子域名,我们可以选择一些看起来就可能没使用cdn的,如http://office.douyu.com和http://zhaopin.douyu.com,可以通过多点ping进一步确认一下

通过解析可以得到

http://zhaopin.douyu.com 119.97.145.130

http://office.douyu.com 119.97.145.132

很容易发现,这两个ip和其中一个邮箱服务器的地址是同处于一个C端,所以119.97.145/24这个段基本上可以确定是斗鱼自己的网段,可以使用上面提到的curl命令对这个段进行扫描。

使用censys、shodan等网络空间引擎

censys和shodan会频繁的对IPV4空间进行全量扫描,同时会尝试与服务器建立SSL加密连接,获取证书,证书中必然包含企业或者网站的域名信息,title中也可能包含。所以按照我的理解,如果搜索出来的数据是全的,其中某些IP肯定就包含了real ip。

下面分别使用这两款搜索引擎对http://douyu.com进行搜索

shodan搜索时,若使用http://douyu.com无法搜到任何结果,只有使用http://www.douyu.com才能搜到数据,这点很奇怪,没找到原因。

为了更好使用搜索结果,最好以API的方式进行获取结果,然后需要对结果进行过滤,过滤包括

1. 过滤掉cdn的ip,这个有点困难,几乎是没用的废话,但如果手上有相应cdn厂商ip list的人还是有一定作用的;

2. 使用特定host对ip进行访问尝试,挑选出有效返回的ip,同样是使用curl命令。

最后对挑选出来ip进行人工访问查看,据说还有可能发现开发机器。

这是我们整理censys结果的部分数据,发现有119.97.145和119.90.48这两个段的ip,和之前邮件服务器的数据有交集,我个人基本上锁定了这两个段了。

203.130.55.171

101.69.114.127

220.243.237.75

203.130.56.113

119.97.145.132

119.90.50.60

220.243.228.168

122.72.88.19

203.130.59.50

119.97.145.151

122.72.88.18

220.243.196.181

119.97.145.152

119.90.48.154

寻找域名历史解析过的IP

通过特定的网站寻找域名曾经解析过哪些IP,其中就有可能是真实IP。这是因为有些网站一开始并未使用cdn,到后面才用上了。可通过 来查询,如查找cmbchina.com的历史记录

找到可疑的ip后,可使用如下方法验证一下,是否能够访问成功

curl -H "Host: http://www.domain.com" https://xx.xx.xx.xx -k

通过历史的NS服务器来解析域名

这个方法和上一个方法很类似,结果很可能是类似的。上一个方法是一个网站收集了某个域名的历史解析记录,这个方法是记录历史NS服务器的变化以及解析记录。该方法主要是想通过老的NS来解析域名,看看是否能解析到不一样的IP。主要推荐三个网站:、、 。

例如搜索http://douyu.com历史上权威服务器的变更,可以很直观的发现在特定年份权威解析服务器的增删情况。这时可以尝试对被删除的ns服务器对域名进行解析,可使用如下命令指定ns服务器

dig @http://dns2.hichina.com www.douyu.com

通过这种方式得到的ip结果很可能和上一种方式得到的结果是一样的。

总结

每种方法都有它一定的局限性,如通过邮件服务器的ip,前提是它和我们要找的real ip要在一个网段或者临近网段;通过censys或者shadon等搜索引擎的方式,那么它的数据必须要全,或者服务器没有针对这些引擎进行链接阻止,才能保证real ip在它的结果集中。因此,要懂得每种方法生效的前提,结合使用,再加上一点运气,可能就被你找到了。

翻译链接

Server Real IP address disclosure