绕过CDN寻找真实IP

January 27, 2024 · 2150 words · 5 min · 渗透测试

自己整理的学习笔记,仅用于安全研究和学习,部分来源于网络


一、判断是否有CDN

在实施端口、漏扫等测试之前,需要判断是否为真实IP,是否使用了CDN或者其他代理等,避免无效操作、蜜罐、非目标站点

0x01 dig 或者 nslookup检测域名

如果获取的DNS域名解析结果返回多个IP,一般都存在CDN 如果IP地址是2个或者3个,并且这几个地址是同一地区的不同运营商的话,则很有可能这几个地址是服务器的出口地址

存在CDN

nslookup
C:\Users\Users>nslookup baidu.com
DNS request timed out.
    timeout was 2 seconds.
服务器:  UnKnown
Address:  192.168.124.1

非权威应答:
DNS request timed out.
    timeout was 2 seconds.
名称:    baidu.com
Addresses:  39.156.66.10
          110.242.68.66
dig
└─# dig baidu.com

; <<>> DiG 9.18.12-1-Debian <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49842
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;baidu.com.                     IN      A

;; ANSWER SECTION:
baidu.com.              474     IN      A       39.156.66.10
baidu.com.              474     IN      A       110.242.68.66

;; Query time: 11 msec
;; SERVER: 223.6.6.6#53(223.6.6.6) (UDP)
;; WHEN: Sun Jan 28 20:53:03 EST 2024
;; MSG SIZE  rcvd: 70
结合IP地址

IP地址只显示一个,但为CloudFlare公司的CDN节点IP

└─# dig dailyhighclub.com

; <<>> DiG 9.18.12-1-Debian <<>> dailyhighclub.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22520
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;dailyhighclub.com.             IN      A

;; ANSWER SECTION:
dailyhighclub.com.      283     IN      A       23.227.38.32

;; Query time: 23 msec
;; SERVER: 223.6.6.6#53(223.6.6.6) (UDP)
;; WHEN: Sun Jan 28 21:12:40 EST 2024
;; MSG SIZE  rcvd: 62


└─# nali 23.227.38.32
23.227.38.32 [美国 CloudFlare公司CDN节点(shopify)]

0x02 多地点ping

如果没有使用CDN,只会显示一个IP地址,或者双线接入情况的两个不同运营商ip

在线网站

http://ping.chinaz.com/

其他网站

0x03 返回包信息

响应头

有时候响应头可能会存在CDN服务商信息

HTTP/2 200 OK
Date: Mon, 29 Jan 2024 02:52:09 GMT
Content-Type: text/html; charset=utf-8
Cache-Control: private, max-age=0, must-revalidate, no-cache, no-store
Display: orig_site_sol
Expires: Sun, 28 Jan 2024 02:52:09 GMT
Pagespeed: off
Response: 200
Strict-Transport-Security: max-age=31536000
Vary: Accept-Encoding,User-Agent
X-Ezoic-Cdn: Miss
X-Middleton-Display: orig_site_sol
X-Middleton-Response: 200
X-Origin-Cache-Control: private, no-cache, no-store, max-age=0, must-revalidate
X-Sol: orig
Cf-Cache-Status: DYNAMIC
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=jjb9y3TNwQUh6B6VU8AjhDRwHInES0Nbg51N%2BtMG6ukBBcRsZI5cUWaXuySnlAhsDFNF6%2BRoUmis%2BCS8mxXM4WF9ajHEIhgS7rwxJbsp7Ac2%2B6mW40HxOvBswAZtzTfOZMnO"}],"group":"cf-nel","max_age":604800}
Nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
Server: cloudflare
Cf-Ray: 84ce2d6b7e5028fc-LAX
Alt-Svc: h3=":443"; ma=86400

可能会存在CDN服务商信息的地方

  • 网站报错信息
  • 网站源代码

0x04 在线检测网站

0x05 工具

xcdn (https://github.com/3xp10it/xcdn)

要在可以ping通google的条件下使用

└─# python xcdn.py photo-ranker.com

input http or https:https
domain的http或https是:https
进入获取真实ip函数,认为每个domain都是有cdn的情况来处理
现在检测domain:photo-ranker.com是否有cdn
has_cdn=1 from ns,and cdn is cloudflare
检测到domain:photo-ranker.com的A记录不止一个,认为它有cdn
现在从在线cloudflare类型cdn查询真实ip接口尝试获取真实ip
现在尝试从domain:photo-ranker.com可能存在的phpinfo页面获取真实ip
现在访问https://photo-ranker.com/info.php
现在访问https://photo-ranker.com/phpinfo.php
现在访问https://photo-ranker.com/test.php
现在访问https://photo-ranker.com/l.php
尝试从mx记录的c段中查找是否存在photo-ranker.com的真实ip
尝试从mx记录中找和photo-ranker.com顶级域名相同的mx主机
很遗憾,在下认为photo-ranker.com有cdn,但是目前在下的能力没能获取它的真实ip,当前函数将返回0

二、绕过CDN获取真实IP

0x01 空间搜索引擎

搜索网站图标

在搜索结果中直接点击搜索按钮

获取icon指纹哈希并搜索
import mmh3
import requests
import codecs

res = requests.get('https://domain.com/favicon.ico')
icon  = codecs.encode(res.content,"base64")
hash = mmh3.hash(icon)

搜索网站域名/title/icp备案

0x02 ping

ping 子域名、三级域名

CDN成本的问题,一些重要站点会采用cdn加速,而一些子域名则没有使用,一般情况下,一些子域名与主站的真实ip在同一c段或同一台服务器上,这时就可以通过发现子域名c段ip、端口信息,逐个探测定位主站真实ip地址

寻找子域名方法

直接ping根域名

直接ping domain.com 而不是 ping www.domain.com

0x03 国外冷门DNS解析

部分国内cdn广商只做了国内的线路,没有铺设国外线路,可以通过海外cdn解析直接获取真实IP

在线网站
国外DNS服务器
  • 209.244.0.3
  • 64.6.64.6
  • 156.154.70.1
  • ……

0x04 DNS历史绑定记录

查询 DNS 历史记录,看是否能探测到使用 CDN 之前的 IP

0x05 MX记录

如果网站的web服务和邮件服务部署在同一台服务器和IP上,这时候MX记录中就会有服务器IP地址

0x06 邮件服务

适用于自己架设邮件服务器的大型网站,一般邮件系统都在内部,如果中间未经任何数据处理和防护措施,在向外部用户发送邮件时邮件头部的源码中会包含此邮件服务器的真实IP地址

功能点

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

0x07 网站SSL证书

Censys反查指纹hash

使用Certificates搜索域名的时候,会出现一堆有效证书和无效证书,反查SSL证书指纹hash,可能会找到IP地址 并不是有效的证书才是有价值的,无效的证书中也会有很多服务器配置错误依然保留着的信息

直接搜索证书

cert="*.domain.com

0x08 网站漏洞

  • 敏感信息泄露
  • SSRF、XXE等发送带外数据

0x09 其他方法

DDOS

CDN开通时有流量限制,可以通过 DDOS 来消耗CDN的流量,只需要把流量打光,就会回滚到原始 ip,有可能会影响到目标网站

抓取APP流量分析是否存在网站IP地址

利用历史域名

三、验证IP地址

通过修改hosts文件,将域名和IP绑定,访问网址,如果可以打开目标网站说明是真是IP地址