前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >查找域名背后的真实IP

查找域名背后的真实IP

原创
作者头像
半月弧
修改2021-01-25 17:30:38
9.2K0
修改2021-01-25 17:30:38
举报
文章被收录于专栏:半月弧のhome半月弧のhome

1. 背景介绍

我们在渗透测试中长做的第一步就是找到目标的真实IP,随着网络环境、软件体系架构的越来越复杂,找到真实的主机IP也越来越变得复杂困难。CDN 负载均衡器都可以混淆目标主机的真实IP地址。

这里我们将把重点放在反向代理特性上,也就是你指向域的情况。而不是从实际的IP接收数据,而是从Cloudflare的IP获取响应。这个特性也可以作为反ddos的功能,但是我们不关心它。

虽然这里我们的对象是cloudflare,但是技术是通用的,也可以用在其他服务上。因为我们不会利用Cloudflare系统中的一个bug,而是利用我们的目标的错误配置。

2. CDN简介

CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。

2.1 CDN的用处

1. 跨运营商加速:我们自己的网站常常只属于一个运营商(比如:电信),而加速节点遍布每家运营商,于是和网站不同运营商(比如:联通)的用户访问起来就不会那么慢了。

2. 缓存加速:很多的静态资源以及一部分页面更新都是比较慢的(比如首页),这个时候CDN就会根据浏览器的max-age和last-modified值以及管理员的预设值来进行缓存,于是很多流量CDN节点就不会每次都来向网站请求,CDN节点可以直接自作主张地将命中的缓存内容返回。

3. 恶意流量过滤:这是CDN非常重要的一个作用,也是很多网站会用CDN的原因,因为CDN能为我们抵挡攻击大流量攻击、普通的攻击(比如注入等),只有正常流量才会转发给网站。

2.2 域名解析过程

  • 传统访问:用户访问域名-->解析IP-->访问目标主机
  • 简单模式:用户访问域名-->CDN节点-->真实IP-->目标主机
  • WAF:用户访问域名-->CDN节点(云WAF)-->真实IP-->目标主机

2.3 CDN配置方法

  • 1、将域名的NS记录指向CDN厂商提供的DNS服务器。
  • 2、给域名设置一个cname记录,将它指向CDN厂商提供的另一个域名

2.4 CDN检测方法

利用“全球Ping”快速检测目标网址是否存在CDN,如果得到的IP归属地是某CDN服务商,或者每个地区得到的IP地址都不一样则说明可能存在CDN

可以使用以下几个网站进行检测:

https://wepcc.com/

http://ping.chinaz.com

3. 查找真实IP方法

3.1 使国外DNS

这个方法主要就是针对一些cdn只对国内的ip部署了cdn,对于国外的ip并没有部署,这样就会得到真实IP。

工具: https://asm.ca.com/en/ping.php

3.2 DNS历史解析记录

查询目标域名历史解析记录可能会找到部署CDN前的解析记录,可用以下几个网站查询。

https://domain.8aq.net //基于Rapid7 Open Data

https://x.threatbook.cn

https://webiplookup.com

https://viewdns.info/iphistory

https://securitytrails.com/#search

https://toolbar.netcraft.com/site_report

注: 境外网站的话我强烈建议您使用RiskIQ(需要用GMail注册)。对于一个域,您可以看到谁注册了它,使用哪个注册,您可以看到承载该域的所有服务器的IP和许多其他有趣的信息

3.4 网站邮件

很多网站支持RSS订阅,或者信息提醒还有注册邮箱验证等功能,每一封邮件其实都是带有ip地址的,我们只要查看源码就能看到

3.5 使用shodan

3.5.1 直接查找

3.5.2 favicon图标来查找IP

我意识到你可以通过HTTP Title在Shodan和Censys上搜索。我想强调的是,这两个方法只有在favicon图标和标题是唯一的情况下才有效。例如,如果favicon是由样板文件生成的,而标题是“Home”,那么它可能是一个完整的图标。在这种情况下,您可以通过ISP、国家等过滤掉结果。这可能有助于打击钓鱼攻击。

工具:https://github.com/pielco11/fav-up

这个需要shodan的账号

3.6 Censys查询SSL证书找到真实IP

利用“Censys网络空间搜索引擎”搜索网站的SSL证书及HASH,在https://crt.sh上查找目标网站SSL证书的HASH,然后再用Censys搜索该HASH即可得到真实IP地址。

第一步:查看网站的SSL证书,获取指纹

第二步:使用https://crt.sh/查询

第三步:在网站https://censys.io/上用SHA-256的值查询

3.7 其他工具

使用哪个工具或查找服务取决于您要查找的是什么,但是由于我们还不知道应该查找什么,所以我只命名一些服务。有些是免费的,有些是付费的,有些需要你登录,有些则不需要。下面是第三方的查找工具来搜集情报:

3.8 使用浏览器查找真实IP

打开你喜欢的浏览器,打开开发工具栏,切换到网络。

首先,让我们添加一些列来查看一些有趣的信息。我建议您添加Remote IP,另一个您可能感兴趣的是set - cookie。请不要将Set-Cookies与Cookies混淆。Cookies是关于发送到服务器的内容,而Set-Cookies是关于从服务器获得的内容。

不管怎样,我们还有很多请求要过滤掉。现在该做什么?而不是根据类型(像所有的CSS请求)隐藏请求,这是完全超出范围,我们将过滤出域,哪个域?目标的一个!我们已经知道它的远程ip不是真实的。

例如,如果我们访问GitHub,我们想要过滤掉所有对该域的请求,我们可以简单地添加-domain:github.com。

正如你所看到的,GitHub使用不同的子域名,我们可以用-domain:*.github.com来排除它们。如果许多资源是从相同的IP但不同的域获取的,我们可以排除带有-remote-ip:185.199.109.154的IP。

可以在这里找到完整的过滤-输入/输出选项列表(用于Firefox)。有些过滤器(如果不是全部的话)与基于Chromium的web浏览器的过滤器类似。https://developer.mozilla.org/en-US/docs/Tools/Network_Monitor/request_list?utm_source=mozilla&utm_medium=devtools-netmonitor&utm_campaign=default#Filtering_by_properties

如果筛选阶段需要很多时间,可以将发出的所有请求(包括所有头文件、cookie、响应等)导出到一个HAR (HTTP Archive)文件(读取JSON文件),这样使用简单的Python/GO脚本就可以进行进一步的分析。

要将所有请求保存到一个HAR文件,您可以:

  • 右键点击一个请求,然后点击“保存所有内容为HAR”
  • 点击标签上方的“下载箭头”

在Firefox上,您可以在右侧看到“Export to HAR”按钮,或者再次右键单击某个请求。

处理HAR文件

让我们假设(在实际情况中不需要)我们有很多请求,但是没有那么多时间,因此我们希望自动化统计分析过程。我们还必须考虑必须处理至少5MB的新文件类型。

使用一个python脚本来处理:

代码语言:javascript
复制
# extension is HAR, but we can read it as JSON
import json

# read the data
raw_data = open('github.har', 'r').read() # replace 'github.har' with the correct name
json_data = json.loads(raw_data) # guess what

# now the first kick on the shins
# we don't know the structure of the data
# we know that the type of the data is dict

# since all the requests are similar to the others (every request has its cookies, ...)
# we expect a list of requests as value of a key
# indeed that's what we have

for k1 in json_data: 
    for k2 in json_data[k1]: 
        if json_data[k1][k2].__class__.__name__ == 'list': 
            print(f"{k1} {k2} {len(json_data[k1][k2])} :: {len(json_data[k1][k2][0])}") 
            print('--> '+' '.join(k3 for k3 in json_data[k1][k2][0])) 

# it turns out that the list with the most contents is 'entries'

requests = json_data['log']['entries']

# after exploring a few dicts/lists, you can find out that we need
# request.url, serverIPAddress and connection (port number)

ips = {}
urls = {}
ports = {}

for i in range(len(requests)):
    _url = requests[i]['request']['url']
    _ip = requests[i]['serverIPAddress']
    _port = requests[i]['connection']
    try:
        ips[_ip] += 1
    except KeyError:
        ips.update({_ip:1})
    try:
        urls[_url] += 1
    except KeyError:
        urls.update({_url:1})
    try:
        ports[_port] += 1
    except KeyError:
        ports.update({_port:1})

for ip in ips:
    print(f"{ip} :: {ips[ip]}") 
    
for url in urls:
    print(f"{url} :: {urls[url]}") 

for port in ports:
    print(f"{port} :: {ports[port]}")

# as you may see in the output, everything is about GitHub
# so there's no data leaking here
#
# you could try with another website, add some if/else statements
# and check wether or not all the data comes from the expected source

4. 引用

https://pielco11.ovh/posts/cloud-hunting/

https://cloud.tencent.com/developer/news/83440

https://mp.weixin.qq.com/s/_qHGB3l58KU01tBOki5uag

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 背景介绍
  • 2. CDN简介
    • 2.1 CDN的用处
      • 2.2 域名解析过程
        • 2.3 CDN配置方法
          • 2.4 CDN检测方法
          • 3. 查找真实IP方法
            • 3.2 DNS历史解析记录
              • 3.4 网站邮件
                • 3.5 使用shodan
                  • 3.5.1 直接查找
                  • 3.5.2 favicon图标来查找IP
                • 3.6 Censys查询SSL证书找到真实IP
                  • 3.7 其他工具
                    • 3.8 使用浏览器查找真实IP
                      • 处理HAR文件
                  • 4. 引用
                  相关产品与服务
                  内容分发网络 CDN
                  内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档