一.验证是否存在CDN
1.很简单,使用各种多地 ping 的服务,查看对应 IP 地址是否唯一,如果不唯一多半是使用了CDN, 多地 Ping 网站有:
http://ping.chinaz.com/
(http://ce.cloud.360.cn/
http://ping.aizhan.com/
2.使用 nslookup 进行检测,原理同上,如果返回域名解析对应多个 IP 地址多半是使用了 CDN。
1)有 CDN 的示例:
www.163.com
服务器: public1.114dns.com
Address: 114.114.114.114
非权威应答:
名称: 163.xdwscache.ourglb0.com
Addresses: 58.223.164.86
125.75.32.252
Aliases: www.163.com
www.163.com.lxdns.com
2)无 CDN 的示例:
xiaix.me
服务器: public1.114dns.com
Address: 114.114.114.114
非权威应答:
名称: xiaix.me
Address: 192.3.168.172
二.绕过 CDN 查找网站真实 IP
1.查询历史DNS记录
查看 IP 与 域名绑定的历史记录,可能会存在真实IP信息,相关查询网站有:
ip138查询:https://site.ip138.com/ (推荐)
iphistory:https://viewdns.info/iphistory/ (国外)
DNS查询:https://dnsdb.io/zh-cn/ (注册账号机制)
微步在线:https://x.threatbook.cn/ (注册账号机制)
SecurityTrails:https://securitytrails.com/ (注册账号机制,历史信息一般,比较适合用来快速搜集子域名)
2.查询子域名
站点管理员可能只对部分网站部署了CDN等措施,因此可以通过搜集子域名尝试发现泄露的真实IP,同时搜集子域名也有助于下一环节的信息发现
可以使用一些的在线网站或者子域名收集工具:
站长之家:http://tool.chinaz.com/subdomain/
SecurityTrails:https://securitytrails.com/
subDomainBrute:https://github.com/lijiejie/subDomainsBrute
OneForAll:https://github.com/shmilylty/OneForAll
3.使用国外主机解析域名
一些CDN可能只做了国内的线路,所以使用国外主机可以获取到真实IP,直接使用多地Ping即可:
站长之家:http://ping.chinaz.com/
check-host:https://www.site24x7.com/ping-test.html
4.网络空间搜索引擎
网络空间搜索引擎会对整个互联网进行扫描,因此有可能会收录有服务器真实IP的相关信息,我们可以通过比对网站特征值以此确定真实IP,相关搜索引擎:
zoomeye:https://www.zoomeye.org/
fofa:https://fofa.so/
shadon:https://www.shodan.io/
censys:https://censys.io/
以fofa为例,只需输入:title:“网站的title关键字”或者body:“网站的body特征”就可以找出fofa收录的有这些关键字的ip域名,很多时候能获取网站的真实ip.
我们在实际的探查中可以利用的特征值基本有如下几种
①.使用SSL证书信息;证书颁发机构(CA)必须将他们发布的每个SSL/TLS证书发布到公共日志中,SSL/TLS证书通常包含域名、子域名和电子邮件地址。因此SSL/TLS证书成为了攻击者的切入点。假如你在xyz123boot.com上托管了一个服务,原始服务器IP是136.23.63.44。 而CloudFlare则会为你提供DDoS保护,Web应用程序防火墙和其他一些安全服务,以保护你的服务免受攻击。为此,你的Web服务器就必须支持SSL并具有证书,此时CloudFlare与你的服务器之间的通信,就像你和CloudFlare之间的通信一样,会被加密(即没有灵活的SSL存在)。这看起来很安全,但问题是,当你在端口443(https://136.23.63.44:443)上直接连接到IP时,SSL证书就会被暴露。
此时,如果攻击者扫描0.0.0.0/0,即整个互联网,他们就可以在端口443上获取在xyz123boot.com上的有效证书,进而获取提供给你的Web服务器IP。
如果服务器开放了443端口,我们就可以获取其暴露的SSL证书(通过它可以激活SSL协议,实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露,保证了双方传递信息的安全性)信息来进行网站比对
cert="example.com" FOFA
ssl:example.com ZoomEye
https://censys.io/certificates?q=example.com Censys(这里的参数值也可以是SSL证书指纹)
在Censys中查询到了SSL证书后可以点击右侧Explore,往下找到What's using this certificate可以找到使用该证书的网站和IP使用响应头中的特征值
②.分析网站的HTTP响应头数据,对其中比较特殊的字段进行搜索
header="abc" FOFA
abc ZoomEye 直接输入
使用响应内容的特征值
标题网络上常见的请求头
X-Forwarded-For 是一个 HTTP 扩展头部。
HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入。如今它已经成为事实上的标准,被各大 HTTP 代理、负载均衡等转发服务广泛使用。只有在通过了 HTTP 代理或者负载均衡服务器时才会添加该项。X-Forwarded-For 请求头格式非常简单:
X-Forwarded-For: client, proxy1, proxy2
一般情况下,第一个ip为客户端真实ip,后面的为经过的代理服务器ip。
2、Proxy-Client-IP:这个一般是经过apache http服务器的请求才会有,用apache http做代理时一般会加上Proxy-Client-IP请求头,而WL- Proxy-Client-IP是他的
3、WL- Proxy-Client-IP:weblogic插件加上的请求头头
4、HTTP_CLIENT_IP:有些代理服务器会加上此请求头
5.利用网站本身缺陷
目标敏感文件泄露,例如:phpinfo之类的探针、GitHub信息泄露等。
一些公用SMTP服务在发信时邮件头会带上发件者IP,因此我们可以诱使网站向我们发送邮件,以此探查真实IP。
利用一些图片上传点,上传链接图片,促使网站访问泄露IP。
通过社会工程学手动获取目标网站相关信息,如管理员的CDN账号等。
利用XSS,SSRF,命令执行反弹shell等。
6.扫描全网
很多教程里有提到这种方法,扫描工具可以使用这两种:
masscan:https://github.com/robertdavidgraham/masscan
Zmap:https://github.com/zmap/zmap
但是只要限制对真实IP端口的连接,此种方式就是白费功夫了,还是使用搜索引擎更好
7.利用负载均衡自身的信息泄露缺陷
当服务器使用F5 LTM做负载均衡时,通过对set-cookie关键字的解码真实ip也可被获取,例如:Set-Cookie: BIGipServerpool_8.29_8030=487098378.24095.0000,先把第一小节的十进制数即487098378取出来,然后将其转为十六进制数1d08880a,接着从后至前,以此取四位数出来,也就是0a.88.08.1d,最后依次把他们转为十进制数10.136.8.29,也就是最后的真实ip。
8.网站的邮件头信息:
比如说,邮箱注册,邮箱找回密码、RSS邮件订阅等功能场景,通过网站给自己发送邮件,从而让目标主动暴露他们的真实的IP,查看邮件头信息,获取到网站的真实IP。
防范措施
对于渗透测试的防范措施其实很简单,对真实IP服务器访问流量进行限制即可,
比如使用白名单策略仅允许特定IP访问,
这样即使获取到了真实IP也无法进行下一步渗透利用
验证是否真实IP地址?
把收集到的IP地址访问,如果可以访问就是真实的。