DNS

万维网重要基础,建立在一个分布式数据库基础上,数据库里保存了ip地址和域名的相互映射关系。用户在浏览器输入域名,浏览器将向DNS服务器发送查询,得到目标主机ip地址,再与对应的主机建立http链接,请求网页。
登录域名控制台可以查看常用DNS解析记录

  • AA 记录是最常用类型,将域名指向一个 IPv4 地址,如 8.8.8.8
  • CNAME将域名指向另一个域名地址,与其保持相同解析,如 https://www.dnspod.cn
  • MX用于邮件服务器,相关参数一般由邮件注册商提供
  • TXT可填写附加文本信息,常用于域名验证
  • NS域名服务器记录,可将指定域名交由其他 DNS 服务商解析管理
  • AAAA将域名指向一个 IPv6 地址,如 ff06:0:0:0:0:0:0:c3
  • SPF用于指定发送邮件的服务器,是一种高效的反垃圾邮件解决方案
  • SRV用于标识某台服务器使用了某个服务,常见于微软系统的目录管理。格式为「服务名字.协议类型」,如 _sip._tcp
  • CAA用于指定域名的证书颁发机构(CA),减少证书颁发风险
  • 显性URL将一个域名重定向至某个具体网页,且显示实际 URL 。仅支持 301 重定向,该记录要求双方域名均已完成备案。
  • 隐性URL将一个域名重定向至某个具体网页,但隐藏实际 URL 。仅支持 301 重定向,该记录要求双方域名均已完成备案。

DNS域传送:
DNS服务器分为:主服务器、备份服务器和缓存服务器。域传送是指后备服务器从主服务器拷贝数据,并用得到的数据更新自身数据库。在主备服务器之间同步数据库,需要使用“DNS域传送”。
DNS域传送漏洞:
若DNS服务器配置不当,可能导致匿名用户获取某个域的所有记录。造成整个网络的拓扑结构泄露给潜在的攻击者,包括一些安全性较低的内部主机,如测试服务器。凭借这份网络蓝图,攻击者可以节省很少的扫描时间。大的互联网厂商通常将内部网络与外部互联网隔离开,一个重要的手段是使用Private DNS。如果内部DNS泄露,将造成极大的安全风险。风险控制不当甚至造成整个内部网络沦陷。
检测方法利用nslookup,dig,nmap等命令
nslookup操作基本的步骤是:

  1. 输入nslookup命令进入交互式shell
  2. Server 命令参数设定查询将要使用的DNS服务器
  3. Ls命令列出某个域中的所有域名

攻击者能获取的敏感主要包括:
1)网络的拓扑结构,服务器集中的IP地址段
2)数据库服务器的IP地址
3)测试服务器的IP地址,
4)VPN服务器地址泄露
5)其他敏感服务器
image.png

域名

域名(英语:Domain Name),又称网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)。由于IP地址具有不方便记忆并且不能显示地址组织的名称和性质等缺点,人们设计出了域名,并通过网域名称系统(DNS,Domain Name System)来将域名和IP地址相互映射,使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址数串。

域名分类

顶级域名:
政府域名:.gov
商业域名:.com
教育域名:.edu
二级域名:baidu.com
三级域名:www.baidu.com

icp备案

通过查询目标企业的备案信息,可直接获取到目标企业注册了哪些域名,从而增加可渗透的目标范围。
推荐使用官方网站ICP/IP地址/域名信息备案管理系统

Whois

whois是用来查询域名的IP以及所有者等信息的传输协议。就是一个用来查询域名是否被注册,以及注册域名的详细信息的数据库(如:域名所有人、域名注册商),一般情况下对于中小型网站域名注册者就是网站管理员。通过域名Whois服务器查询,可以查询域名归属者联系方式,以及注册和到期时间。Whois协议。基本内容是,先向服务器的TCP端口43建立一个连接发送查询关键字并加上回车换行,然后接收服务器的查询结果。

Linux本地WHOIS查询

在线查询网站

子域名收集

1.在线子域名查询(原理好像也是爆破

  • phpinfo
  • dnsdumpster

    2.SSL证书查询

    要向用户提供加密流量,网站必须先向可信的证书授权中心 (CA) 申请证书。然后,当用户尝试访问相应网站时,此证书即会被提供给浏览器以验证该网站。近年来,由于 HTTPS 证书系统存在结构性缺陷,证书以及签发证书的 CA 很容易遭到入侵和操纵。Google 的证书透明度项目旨在通过提供一个用于监测和审核 HTTPS 证书的开放式框架,来保障证书签发流程安全无虞。
    使用一下连接进行查询

  • crt.sh

  • censys
  • myssl
  • facebook
  • google

image.png
这种方法好处不言而喻。

3.搜索引擎查询(借助爬虫搜集)

这里配上谷歌语法来进行搜索,基本底层语法都不会有太大变化。

使用方法:python oneforall.py —target xxx.com run
image.png
爆破后的结果会保存为csv文件
image.png

使用方法:python sublist3r.py -d target.com -b -t 50 -p

使用方法:python3 subDomainsBrute.py xxx.com

  • layer子域名挖掘机

    7.子域名泛解析问题

    子域名爆破,是发现多资产的一个很好的方法,在子域名爆破中,经常会遇到泛解析问题
    什么是泛解析呢(参考百度百科)?
    泛域名解析是:*.域名解析到同一IP。 域名解析是:子域名.域名解析到同一IP。
    这为我们去做子域名爆破,带来了极大的不便,以前子域名爆破常用的是layer子域名挖掘机. 不过layer子域名挖掘机,在跑具有泛解析的站的时候,就不是那么适用
    针对百度,我们可以直接使用layer子域名挖掘机等子域名爆破工具,而针对淘宝的资产,我们不能使用layer子域名挖掘机等常规工具
    那么我们需要做第一步,识别泛解析:
    这边的思路如下:
    DNS和域名,CDN - 图10

DNS和域名,CDN - 图11

这里使用到的python3库:aiodns,他很强大,aiodns支持的查询类型: A, AAAA, ANY, CAA, CNAME, MX, NAPTR, NS, PTR, SOA, SRV, TXT.
五次完全A记录解析成功,认为存在泛解析,如果不存在泛解析问题,就常规子域名收集一把梭,如果检测出泛解析,就使用破泛解析的子域名爆破工具
破泛解析实现思路:
DNS和域名,CDN - 图12
刚刚演示了泛解析判断是否存在,仍然以资产淘宝为例子:
测试Demo:

import asyncio import aiodns import sys loop = asyncio.get_event_loop() resolver = aiodns.DNSResolver(loop=loop) async def query(name, query_type): return await resolver.query(name, query_type) try: coro = query(str(sys.argv[1]), ‘CNAME’) result = loop.run_until_complete(coro) print(result) except Exception as e: print(e)

CNAME查询几个不存在的淘宝域名,也是一样的思路,循环多次不存在的域名,如果访问不存在的域名,CNAME为shop.taobao.com
DNS和域名,CDN - 图13

DNS和域名,CDN - 图14

那么在子域名爆破的时候可以先判断CNAME,这里可以自己维护的特定厂商的CNAME列表
代码实现:
DNS和域名,CDN - 图15

先查询CNAME记录,如果包含shop.taobao.com就跳过
同理方法3:A记录查询命中次数:
如果A记录查询,命中相同ip>10,后续的爆破A记录解析的域名就不展示记录
DNS和域名,CDN - 图16

通过这种思路,域名泛解析的问题已经可以解决了
域名深度问题:replace提取上一次的域名前缀,加入到下一次fuzz+上一次的域名前缀
DNS和域名,CDN - 图17

DNS和域名,CDN - 图18

CDN判断

信息收集cdn绕过技术.png

多地ping

如果没有使用CDN,则只会显示一个IP地址。
可以使用以下站点进行多地ping,

如图则不存在CDN DNS和域名,CDN - 图20

nslookup法

用国外的dns服务器

  • 如果返回域名解析对应多个 IP 地址多半是使用了 CDN
  • nslookup -qt=A h5.hunbei.com 8.8.8.8 用国外的可能会得到真实IP不存在:

DNS和域名,CDN - 图21
存在:
DNS和域名,CDN - 图22

IP反查域名

查看是否存在大量不相关的IP

如下图可以看出来是使用了CDN
DNS和域名,CDN - 图23

观察header

  • 观察请求响应的返回数据的头部,是否有 CDN 服务商标识
  • 若 asp 或者 asp.net 网站返回头的 server 不是 IIS、而是 Nginx,则多半使用了nginx反向代理到 CDN

DNS和域名,CDN - 图24 在线检测工具

DNS和域名,CDN - 图25

寻找真实IP

网络空间测绘引擎

zoomeye、fofa等,搜索站点相关信息,有一定几率能够获取到站点的真实IP

  • fofa
  • shodan
  • quake
  • Censys.io

    二级域名法

    由于部分CDN价格昂贵,所以一些重要的站点会使用CDN加速,而一些子域名则没有使用,且极有可能和主站在同一C段,这时候,就可以通过发现目标的子域名,从而根据IP来定位主域名的IP地址。

  • oneforall

  • ksubdomain
  • Jsinfo-scan

    邮箱

    用目标邮件服务器发送邮件给自己(QQ邮箱)再查看邮件源码一定情况下可以找到真实IP(服务端和我们建立连接)
    这里还有一个奇淫技巧,通过发送邮件给一个不存在的邮箱地址,比如 000xxx@domain.com ,因为该用户不存在,所以发送将失败,并且还会收到一个包含发送该电子邮件给你的服务器的真实 IP 通知。

  • RSS 订阅

  • 邮箱注册、激活处
  • 邮箱找回密码处
  • 产品更新的邮件推送
  • 某业务执行后发送的邮件通知
  • 员工邮箱、邮件管理平台等入口处的忘记密码

    海外ping

    由于国内厂家可能只针对国内使用cdn,对海外没有铺设,导致通过通过海外的IP可以直接获取到真实IP。
    可以使用:

  • http://ping.chinaz.com/

  • https://asm.ca.com/zh_cn/ping.php
  • http://host-tracker.com/
  • http://www.webpagetest.org/
  • https://dnscheck.pingdom.com/

进行查询
DNS和域名,CDN - 图26

DNS历史解析记录

以微步在线为例
找到站点
DNS和域名,CDN - 图27
判断存在CDN
DNS和域名,CDN - 图28
微步查询
DNS和域名,CDN - 图29
确认为真实IP
DNS和域名,CDN - 图30
这些很有可能就是在使用CDN之前留下的解析记录

SSL证书

在线

查询有效的证书 Certificates: parsed.names.raw: “baidu.cn” and tags.raw: trusted # 注意 # 测试过程中,很容易陷入思维误区,认为 有效 的证书才是我们需要的,但其实并不一定,很多服务器配置错误依然保留的是无效的证书
sha1 签名反查IPV4
DNS和域名,CDN - 图31

openssl s_client -connect hao123.com:443 | grep subject

  • curl

curl -v https://hao123.com | grep ‘subject’

敏感文件泄漏

  • 服务器日志文件
  • 探针文件,例如 phpinfo
  • 网站备份压缩文件
  • .DS_Store
  • .hg
  • .git
  • SVN
  • Web.xml

    历史域名

  • 很多网站在发展的过程中,会更换域名,比如京东以前的域名是 360buy.com ,后来斥巨资购买了 jd.com 。

  • 网站在更换新域名时,如果将 CDN 部署到新的域名上,而之前的域名由于没过期,可能未使用 CDN,因此可以直接获得服务器 IP,所以,历史域名也是一个很重要的点。

    通过 XML-RPC PINGBACK 通信

  • XML-RPC 是支持 WordPress 与其他系统之间通信的规范,它通过使用 HTTP 作为传输机制和 XML 作为编码机制来标准化这些通信过程。

  • 在 WordPress 的早期版本中,默认情况下已关闭 XML-RPC,但是从3.5版本开始,默认情况下开启。
  • XML-RPC 支持 trackback 和 pingback。
  • 虽然 WordPress 启用了 REST API 来代替 XML-RPC ,不过 XML-RPX 不会过时的,放心大胆的使用就好,虽然 XML-RPC 这个技术很老了,但依然可以通杀很多网站。

POST /xmlrpc.php HTTP/1.1 Host: domain.com Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8 Accept-Encoding: gzip, deflate Accept-Language: en,zh-CN;q=0.9,zh;q=0.8 Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 323 <?xml version=”1.0” encoding=”UTF-8”?> pingback.ping http://2vbis4.dnslog.cn https://domain.com/

APP

  • 目标若存在APP,则APP可能通过IP直接与服务端进行通信,若最新版采用域名通信,也可尝试寻找历史版本进行分析。

历史版本宝贝一般很多

漏洞

  • 如果目标网站本身存在漏洞的话,比如 SSRF、XXE、XSS、文件上传、命令执行等漏洞,或者我们找到的其他突破口,注入我们自己的带外服务器地址,然后在服务器上检查 HTTP 日志记录。
  • 应用本身的错误会造成当传递一些错误的参数值或者错误的地址时,内部会抛出异常,也就是日常所说的报错,关注报错点,经常会泄露一些真实的 IP 地址或者内网 IP 段。

    通过 virtual-host 碰撞

  • 当我们收集了目标足够多的可能的真实 IP 时,可以通过 IP 和子域的碰撞,来批量获得命中目标以及目标哪些的子域。

  • 在线收集工具 https://pentest-tools.com/information-gathering/find-virtual-hosts#

    通过 favicon.ico 哈希特征

  • favicon.ico 是现代浏览器在网页标题的左侧显示的一个小图标。

  • 该图标数据通常是从 https://anywebsite/favicon.ico 处获取的,浏览器会在浏览任何网站时自动请求它。
  • 因为可以通过计算 favicon.ico 的指纹哈希,然后去 shodan 等搜索引擎搜索与之相同的主机结果,从而进一步探测是否能挖掘出目标网站的真实 IP 地址。
  • 目前网络空间搜索引擎均支持

DNS和域名,CDN - 图32

通过网页源码特征值

  • 在服务器源 IP 地址允许访问并且返回的也是类似的网站内容情况下,可以通过侦察页面源码中 JS 、CSS 、HTML 等一系列静态特征值,然后用 Shodan 、Zoomeye 、Censys 等搜索引擎进行匹配搜索,从而定位 IP 。

    通过域名备案信息广域探测(成功率高)

  • 针对目标域名,目标二级域名,如果都做了 CDN 的情况下,是不是就思路中断了呢?

  • 肯定不是。这里分享一个很少有人去关注的独门秘技。
  • 网站需要服务器,但是再土豪的公司,也不可能一个域名一台服务器,大多数情况下,都是多个域名业务,共用一台服务器。
  • 那么如果目标网站存在备案,可以查询其备案信息,收集该单位或者个人备案的其他网站域名以及其他子域,然后再进行一轮广域的探测,很有可能其中的某个边缘子域,没有做 CDN,就直接暴露了真实服务器的 IP 地址,然后再进一步验证该 IP 是否也是目标网站的真实 IP 。

    找到真实 IP 后如何使用

    在获取到真实IP后,通过直接访问IP可能无法访问,那么此时提供2种思路进行解决

  • 通过修改 hosts 文件,将域名和 IP 绑定。(要是不会,不建议阅读此文。)

  • 如使用 burpsuite 测试,可以在 Project options ——> Connections ——> Hostname Resolution 中增加域名和 IP 记录。

DNS和域名,CDN - 图33