Web渗透第一步之信息搜集 [ 透过Cdn找目标真实ip ]
0x01 在了解cdn之前,有必要先来科普下什么是 ‘负载均衡’ 以及’正/反向’ 代理,既然选择了做渗透,这些最基本的基础不熟悉肯定是不行的
正向代理 [ ForwardProxy ]:
大家默认所说的代理其实都是指正向代理,不管是正向还是反向,理解数据的流向很重要,要理解这种比较抽象的东西最好的方式就是画图,比如下图就是一个正向代理的简易工作流程图,要表达的意思,已经很清晰了,就是说当客户端要去请求远程server上的资源时,并非直接通过本地路由网关到达远程server,而是先经过代理服务器,由代理服务器去帮我们请求,之后远程服务器会把请求的结果返回给代理服务器再由代理服务器返回给客户端,这么一个过程就叫正向代理,其实你还可以理解的更简单粗暴一点,它有点儿类似我们常说的 ‘翻墙’,正常情况我自己是不能直接上谷歌的,但我找了一个能上谷歌的代理,然后我们请求谷歌的时候可以让代理服务器去帮我们请求,最后,再通过代理服务器把响应的数据返回到我本地,就这么一个过程,包括我们常用的vpn其实也有点儿类似的功能(当然,这里只是粗略的类似,但vpn本质[隧道]上是什么,在前面已经有说明),不过现在正向代理可能用的比较少了,以前用代理服务器只是为了提高访问速度[因为缓存的原因],可以节省带宽,也可以在代理服务器上做些访问控制……
反向代理 [ reverseproxy ]:
至于反向代理,就更容易理解了,数据流向完全相反,还是看这张图,来自客户端的请求会首先到达代理服务器而非真实的server,至于客户端的请求最终会被送到哪个后端服务器上去处理,客户端是完全看不到的,这也在一定程度上隐藏了后端的真实server
负载均衡 [ Loadbalancing ]:
负载均衡主要用在高并发的场景中,也就是代理服务器可能有很多台,有可能是个代理服务器集群,来自四面八方的请求会被代理服务器分发到后端各个服务器上去处理,至于具体要被分发到后端哪一台服务器上去处理,则由其内部的负载均衡算法决定,比如典型的 nginx七层负载均衡,以及各种硬件负载均衡器,比如像 f5 这种东西,等等……
透明代理:
很显然,透明的意思就是你感受不到代理服务器的存在,但流量却又真正被代理服务器所左右,也就是说,我们并不需要知道代理服务器,比如,我可以用这种方式来限制你访问某些资源等等……它跟正向代理非常的像,其实也属于正向代理的一种,只不过正向代理能看见,但这个看不到
匿名代理:1
2高度匿名代理
这样的服务器会把你的数据包原封不动的来转发,就好像自己的一样,这样对目标站来讲,根本就不会以为是代理服务器在访问它而不是你
1 | 普通匿名代理 |
0x02 既然说到这里,就顺带插一嘴,关于木马的正向,反向连接:1
2正向连接(bind),是我主动去连接别人机器上的某个端口,很显然,这样极易被对方防火墙拦掉
反向连接(reverse),是让别人机器上的某个端口上的流量主动连到我机器上的某个端口上,起码暂时对各类应用层防火墙的穿透效果还是蛮不错的
0x03 接着我们就来简要说明下,在实际渗透过程中,关于绕过cdn找真实ip的问题,不过在此之前,我们首先要稍微了解下cdn是什么:
cdn即内容分发网络,主要是为了解决传输距离和不同运营商节点处所带来的网络速度性能低下的问题,说白点儿就是一组在不同运营商之间的对接节点上的一组高速缓存服务器,把用户经常要访问的一些静态数据资源,例如:静态的html,css,js图片等文件,直接缓存到节点服务器上,当用户再次请求的时候,直接分发到在离用户最近的节点服务器上响应给用户,注意,这里直接是就近响应给用户,而并非现从远程web服务器上取数据然后再响应给用户,远程web服务器也只是当用户有实际数据交互的时才会现从远程服务器上响应,这样可以大大提高网站的响应速度以及用户体验,但这却给渗透带了一些问题,比如:目标购买了cdn服务,我们直接ping目标的域名,最先到达的并非真正的目标web服务器,而只是离我们最近的一台目标节点的cdn服务器,这也就导致我们没法直接得到目标真实的ip段范围,表面看来,这样确实好像能有效的抵御一部分入侵和ddos行为,但……真的就能那啥吗……很显然,安全本身就是一个非常全面一体的概念,只是一个或者几个节点的安全,不算真正的安全,可能现在大多数企业都会大量的心思花在web上,首先,可以确认的是,一般把web安全做好,基本就能防住一大半的主动入侵,这是事实,但另一部分呢,web往往只是作为我们的其中一个边界入口,但绝不是唯一的入口,好吧,又TM跑题了,实在抱歉,还是说我们今天的重点吧,如何透过CDN节点找到目标的真实ip段范围
0x04 在了解了cdn的基本作用之后,我们来具体看看如何bypass掉它,首先,怎么判断目标到底是否使用了CDN,观察下面的实例:1
可以先简单ping下目标主域,观察域名的解析情况,一般情况下,从这里就大概可以看到目标是否用了cdn,比如,下面这些实例很显然就用了cdn
1 | # ping www.zhenai.com |
1 | # ping www.baihe.com |
1 | # ping www.eastmoney.com |
0x05 在确认目标确实用了cdn以后,就可以开始进入今天的重点了,如何透过cdn找目标真实ip,下面都是一些比较常规的方法,不一定每种都可行,但我知道,不尝试一定不可行1
2
3
4
5
6
7
8
9
10搞清楚目标网站业务,看看目标网站上有没有提供用户注册的功能,关键我们的目的主要是要它发过来的那个激活邮件,因为在这个邮件头中有发送此邮件的邮件服务器域名ip,看看是不是目标自己的邮件服务器(务必要注意,必须是目标自己的邮件服务器,因为我们最终要找的是目标的真实ip段,如果是利用第三方或者其它公共邮件服务器发的都不是我们想要的),如果是,ping下它的这个邮件服务器的域名,也许就能看到目标真实ip了
再看看目标网站上有没有订阅功能,把目标订阅到自己的邮箱,和上面验证邮件的用途一样,看下发来的订阅邮件中的邮件头,观察发送此邮件的服务器域名是不是我们想要的
盲打目标网站的各种探针类文件,如:phpinfo里面的_SERVER["SERVER_ADDR"]也包含的有服务器端的真实ip,当然,除了phpinfo之外,还有很多其它类似的探针文件,这个可以尝试直接拿工具跑
在目标规模很大的情况下,通过爆破目标子域分析下各个子域的ip解析情况,也是可以判断出目标的真实ip段的
前面提过一个查域名的ip历史纪录的老站,www.netcraft.com,通过观察域名的ip历史记录也是可以大致分析出目标的真实ip段
用个境外的不知名的dns服务器ip来解析目标域名的各种记录mx,ns,a,因为在境外用cdn的情况还是比较少的
如果目标网站有自己的app,不妨再抓下它app的请求,看看能不能这里面找到目标的真实ip,至于工具,fiddler和burpsuite都可以
跟抓app方式差不多,如果目标还有自己的什么软件产品,不妨去下个装下,尝试跟下它的各流量,兴许也能看到目标的真实ip
通过各种漏洞或者其它方式想办法让目标反向连接我们,比如弹个shell,被动和目标数据库建立连接等等……然后再在本地netstat-ano就有了
关于其它更多的小技巧,待续……
0x06 找到目标真实ip以后,又该怎么验证结果的可靠性呢,如果是web,最简单的方法,可直接尝试用ip访问,看看响应的页面是不是和直接访问域名返回的一样,或者在目标段比较大的情况下[比如一个C段都是他的],还可以借助类似masscan的工具批扫下对应ip段中所有开了80,443,8080端口的ip,然后逐个尝试ip访问,观察响应结果是否为目标站点
0x07 至于,确定目标真实ip以后的用途,前面已经多次说明过,此处不再赘述
0x08 最后,再提供一个传说可以直接bypass CloudflareCDN的接口,暂时还有效,不过,能有效到什么时候就不好说了,至于其内部具体怎么实现,暂未知:1
http://www.crimeflare.com/cfs.html
一点小结:
关于如何透过cdn找目标真实ip范围,大概就先说到这里,大家也看到了,其实这个东西并没有任何技术含量,都是平时的一些想法和经验积累,关键在于,你能不能想到哪里会存的有真实ip,才是最重要的,当然,这里说到的可能只是冰山一角,其实,自己博客的初衷并非想教会大家多少技巧,更多的是希望能通过自己的一点想法扩展出大家无限的思路,然后再相互交流融合,这也是本人一直所期望的