本文分享一个tips,如何在CDN泛解析情况下获取有效解析记录

0x00 前言

通常渗透之前,我们都需要进行信息搜集,少不了资产发现——DNS枚举

但是在有CDN的情况下,枚举出来的结果并不理想

0x01 发现

既然站点在接入CDN的时候是使用的是CNAME类型解析记录

我们可以通过Wireshark抓包DNS解析记录来分析。

Domain

这个域名是挂了CDN的,我们在枚举的时候,每个域名都能解析出结果,并且能返回IP,这都是CDN服务商有一个默认CNAME解析记录

CNAME记录,即:别名记录。这种记录允许您将多个名字映射到同一台计算机。 通常用于同时提供WWW和MAIL服务的计算机。例如,有一台计算机名为“host.mydomain.com”(A记录)。 它同时提供WWW和MAIL服务,为了便于用户访问服务。可以为该计算机设置两个别名(CNAME):WWW和MAIL。 – 百度百科

想得到真实能够访问的A记录和CNAME记录,就要分析CDN返回解析数据的特征

其中序号12-17是第一个域名查询请求,222.***.com 不存在结果的时候响应是 alldomain.****.com.a.bdydns.com

而序号58-62是第二个域名查询请求,sso.***.com 存在的时候响应结果是 sso.***.com.a.bdydns.com

0x02 尝试

Domain

当寻找不到一个真实CNAME的时候,DNS服务会返回同一个CNAME名称,例如百度云返回的是alldomain开头的

既然有效记录和默认记录返回的CDN域名效果不同,我们可以根据DNS的CNAME进行匹配,把CDN默认域名给排除,这样即使返回的IP是N个,多么的复杂,只需要把暴力枚举结果取回,进行排除即可获得有效的解析记录

使用dnsenum枚举后,我通过awk对结果进行处理

awk '{if($1 != "opencdncloud.jomodns.com." && $1!="alldomain.XXX.com.a.bdydns.com." && $5 != "alldomain.XXX.com.a.bdydns.com."){print $1 "-->" $5}}' /tmp/domain.txt

取回结果如下:

erp.***.com.-->erp.***.com.a.bdydns.com.
erp.***.com.a.bdydns.com.-->opencdncloud.jomodns.com.
img1.***.com.-->img1.***.ccgslb.com.cn.
img1.***.ccgslb.com.cn.-->cc00126.h.tel.ccgslb.com.cn.
cc00126.h.tel.ccgslb.com.cn.-->hpcc-page.tel.ccgslb.com.n.***.com.a.bdydns.com.
img3.***.com.-->img3.***.com.a.bdydns.com.
img3.***.com.a.bdydns.com.-->opencdncloud.jomodns.com.
opencdncloud.jomodns.co-->
alldomain.***.com.a.bd-->
imap.***.com.-->mail1.icoremail.net.
mail1.icoremail.net.-->***.252.214.74
mail1.icoremail.net.-->***.252.214.69
mail1.icoremail.net.-->***.252.214.64
mail1.icoremail.net.-->***.252.214.65
cn.-->
hpcc-page.tel.ccgslb.com.cn.-->180.153.126.30
llydns.com.-->opencdncloud.jomodns.com.
member.***.com.-->IN
mail.***.com.-->mail1.icoremail.net.
mail1.icoremail.net.-->***.252.214.69
mail1.icoremail.net.-->***.252.214.74
mail1.icoremail.net.-->***.252.214.65
mail1.icoremail.net.-->***.252.214.64
img2.***.com.-->img2.***.com.a.bdydns.com.
img2.***.com.a.bdydns.com.-->opencdncloud.jomodns.com.
jira.***.com.-->10.10.21.215
alldomain.***.comm.-->180.97.154.35
office.***.coN-->
q1.***.com.-->ME
qqq.***.com.-->alldomm.
pop.***.com.-->mail1.icoremail.net.
mail1.icoremail.net.-->***.252.214.65
mail1.icoremail.net.-->***.252.214.69
mail1.icoremail.net.-->***.252.214.74
mail1.icoremail.net.-->***.252.214.64

0x03 最后

这块如果要做出更好一点的子域名枚举,还是需要从底层实现,匹配CNAME,传统的gethostbyname是远远不够了。

可以参考之前的文章:

  • http://payloads.online/archivers/2018-02-28/1 [C++/C实现DNS查询]
  • http://payloads.online/archivers/2018-02-10/1 [DNS协议编程]