1 简介
当网站架设一个带有云盾防护的cdn,无疑是对我们的web渗透造成了极大的困扰,当你的web一把梭失效之后,更多时候会让你对你的渗透目标进入苦思冥想的状态。
2 cdn概念
内容分发网络(英语:Content Delivery Network或Content Distribution Network,缩写:CDN)。
内容分发网络节点会在多个地点,多个不同的网络上摆放。这些节点之间会动态的互相传输内容,对用户的下载行为最优化,并借此减少内容供应者所需要的带宽成本,改善用户的下载速度,提高系统的稳定性。
通俗一点,当某个应用服务配置了cdn时,他会在多地为该应用配置加速节点,当你请求该应用服务时,你会请求到速度最优的加速节点以达成请求。高性能的cdn可以充分减少服务器本身的带宽压力,甚至可以一定程度的提升其应用安全性。
3 真实ip与cdn渗透困扰
那么当我们对这一个假设cdn的网站进行渗透与直接对网站真实ip进行渗透时,有什么区别?看似应用内容基本一致的网站在渗透过程中对你造成的影响有时却不言而喻;
就像是你有一个简单的注入,直接针对具有真实ip的网站进行渗透甚至可以sqlmap进行一把梭,但是当你未掌握目标的真实ip时对带有cdn云盾的域名进行注入,有时甚至只能进行引号的测试或者艰难的bypass绕过。
4 常见的绕过cdn寻找真实IP的方法
绕过cdn找真实IP的文章各论坛网站也有不少,在这里简单介绍几种常见方法,当然不是本文的重点所在,因为在大型防护目标的渗透过程中,这个过程往往漫长曲折,并不是说一个查询一个搜索就可以解决的,当然也不是你跑全网ip就一定能发现的。
4.1 事例的一个背景
理论和具体方法可能听起来简单,这里我带入情景让大家可以深入理解一下。现在有这样一个情境(纯属虚构、辅助理解):
某日猫哥突发奇想通过某云服开设了一个一键化cdn反查真实ip的网站,并绑定了xxxx.cc这样一个域名,运行一个月后发现自己面对大量请求时,服务器表示吃不消,网站用户也表示体验感欠佳,于是猫哥花重金配置了高性能cdn还带云防护服务。笔者看着猫哥的网站越发红火,心生嫉妒,于是打算对猫哥的网站进行渗透,无奈拙劣的渗透手法都被云防护挡下,于是笔者不得不去找他的真实ip。
4.2 dns解析记录
dns解析记录查询则是利用一个域名多次解析的ip去寻找真实ip,如上场景,猫哥的xxxx.cc在最初并未接入cdn而是正常解析其网站服务器的ip故,笔者可以通过微步等dns历史解析记录平台的查询获取其真实ip。
代码语言:javascript复制iphistory:https://viewdns.info/iphistory/
DNS查询:(https://dnsdb.io/zh-cn/)
微步在线:(https://x.threatbook.cn/)
域名查询:(https://site.ip138.com/)
DNS历史查询:(https://securitytrails.com/)
Netcraft:https://sitereport.netcraft.com/?url=github.com
4.3 利用ssl证书
利用ssl证书查询真实ip,猫哥服务器接入的cdn运营商在给猫哥服务器提供保护服务的同时,也会与其服务器进行加密通信(ssl),这时当猫哥服务器的443端口接入域名时也会在443端口暴露其证书,我们通过证书比对便可发现网站的真实ip;
SSL证书搜索引擎:
代码语言:javascript复制https://censys.io/ipv4?q=github.com
4.4 查找子域名
很多时候,一些重要的站点会做CDN,而一些子域名站点并没有加入CDN,而且跟主站在同一个C段内,这时候,就可以通过查找子域名来查找网站的真实IP。
常用的子域名查找方法和工具:
1 . 搜索引擎查询:如Google、baidu、Bing等传统搜索引擎,site:baidu.com inurl:baidu.com,搜target.com|公司名字;
2 . 一些在线查询工具,如:
代码语言:javascript复制http://tool.chinaz.com/subdomain/
http://i.links.cn/subdomain/
http://subdomain.chaxun.la/
http://searchdns.netcraft.com/
https://www.virustotal.com/
3 . 子域名爆破工具
代码语言:javascript复制Layer子域名挖掘机
wydomain: https://github.com/ring04h/wydomain
subDomainsBrute: https://github.com/lijiejie/
Sublist3r: https://github.com/aboul3la/Sublist3r
4.5 网站邮件头信息
比如说,邮箱注册,邮箱找回密码、RSS邮件订阅等功能场景,通过网站给自己发送邮件,从而让目标主动暴露他们的真实的IP,查看邮件头信息,获取到网站的真实IP;
4.6 网络空间安全引擎搜索
通过关键字或网站域名,就可以找出被收录的IP,很多时候获取到的就是网站的真实IP;
代码语言:javascript复制钟馗之眼:https://www.zoomeye.org
Shodan:https://www.shodan.io
Fofa:https://fofa.so
4.7 国外主机解析域名
大部分 CDN 厂商因为各种原因只做了国内的线路,而针对国外的线路可能几乎没有,此时我们使用国外的DNS查询,很可能获取到真实IP;
国外多PING测试工具:
代码语言:javascript复制https://asm.ca.com/zh_cn/ping.php
http://host-tracker.com/
http://www.webpagetest.org/
https://dnscheck.pingdom.com/
4.8 扫描全网
通过Zmap、masscan等工具对整个互联网发起扫描,针对扫描结果进行关键字查找,获取网站真实IP;
1 . ZMap号称是最快的互联网扫描工具,能够在45分钟扫遍全网。
代码语言:javascript复制https://github.com/zmap/zmap
2 . Masscan号称是最快的互联网端口扫描器,最快可以在六分钟内扫遍互联网。
代码语言:javascript复制https://github.com/robertdavidgraham/masscan
4.9 配置不当绕过
在配置CDN的时候,需要指定域名、端口等信息,有时候小小的配置细节就容易导致CDN防护被绕过;
案例1: 为了方便用户访问,我们常常将www.test.com 和 test.com 解析到同一个站点,而CDN只配置了www.test.com,通过访问test.com,就可以绕过 CDN 了。
案例2: 站点同时支持http和https访问,CDN只配置 https协议,那么这时访问http就可以轻易绕过。
4.4 其他常见方法
常见的方法千篇一律,但是在真实的专门做了防御的情况下会遇到各种复杂情况。当然如果专门进行cdn绕过文章研究的话,还有很多方法,例如使用邮件,利用漏洞,zmap,不过我认为这些方法不够通用或者说耗力比较多,如果从细节去总结很难对cdn绕过有一个通用性方法的把握;
5 比较综合的cdn绕过
5.1 前期信息收集
在一次渗透过程中,在进行了常规的信息搜集之后,因为目标的功能特性,所以其网站专门做了cdn加速并且大多数的网站齐刷刷的挂上了云防护、并存在专门的运维巡检。因为运营的时间比较长久,笔者使用微步进行查询历史解析记录时,几个主要目标累计具有数百条解析记录,分散在各国的各数据中心内。在前期测试中,尝试将解析ip做成列表批量进行80/443的发起请求测试后,未发现针对性的信息。
5.2 起手
第一个目标突破口在其app的某功能模块中嵌入的新闻热点这样一个功能,并成功在其新闻站发现注入漏洞,不过因为该网站也存在云防护和cdn,最初注入点的判断仅靠单引号的闭合判断,所幸该云防护提供商比较小众,使用bypass手段绕过,成功进行注入。
一般以注入起手的渗透,一把梭的思路是注入账号,提升权限,进而想办法getshell。
因为是旁站入侵,注入之后并不能获取目标主要数据。在数据获取上停留在新闻数据。但是笔者的注入打的新闻功能,并接触不到其用户数据,全库也并无用户相关信息。因为新闻管理后台使用401验证的方法,即使你获取了后数据库也依然无法进入后台,并且数据库权限限制比较死,无法通过注入直接getshell。
所幸通过邮箱查询可以确定该新闻站点属于其目标的研发团队开发,于是获取了新闻数据库的命名前缀与连接ip,获取了目标第一个资产(嵌入的新闻小站)的真实ip。
对ip进行分析ip位属于境外某云数据中心内,除了ssh和web服务外无端口服务再开放。起手式到此,看似聊胜于无。
5.3 攻坚
对比起手式进行前后获取的信息差异,比先前多了一个研发小站的真实ip以及其数据库结构和命名规则。于是针对这两个信息进行进一步的工作开展。
在ip分析方面,针对ip的分析尽管无可利用漏洞,但是我们可以大胆拟定该云数据中心内可能存在目标其他业务网站,但因是目标网站的真实ip的解析,并未直接将域名控制到80端口根目录,即使你使用真实ip进行访问也依然需要添加相应应用目录。所以使用title进行扫描获取ip的方法就失效了。
在数据库结构和命名规则利用方面,将数据库前缀进行源码泄漏查询,成功获取了目标另外一个业务站点的部分源码,并记录泄漏源码的上传时间。因为是cdn的绕过分析,在这不多分析源码内容,不过在此时,源码的攻击点依然被云防护封锁,所以找出真实ip至关重要。
从源码中拉去与该站相关联的服务器ip信息,可以进一步发现,与我们鸡肋注入出的新闻小站所属运营商相同。于是笔者坚信之前的判断,该运营商的机房内还存在其他目标重要业务。
通过泄漏的源码把握web应用的目录。拉出该机房在目标运维习惯的区域内的ip地址范围,结合web应用目录,利
用扫描脚本批量进行探测,成功获取泄漏源码目标的真实ip信息。
5.4 收尾
到此掌握了目标一个主要业务的真实ip以及一个鸡肋旁站的真实ip,不过再次信息整理时,发现我们通过扫描获取的业务站真实ip,其实早已存在我们先期的资产信息内了,先期来源便是之前的业务目标数十次历史解析ip之中的一次(因为目录关系在最初扫描测试时并没有发现)。
通过已经获取的信息中重新整理有用的信息进行时间线的拉取,以对目标运维习惯和历史进行画像。
通过画像发现,很巧的是目标几个重要业务在几年前都有过一次cdn解析的掉线,在其期限内的解析记录可以疑似判断为真实ip。之后结合目标资产的多次整理和目录、部分源码分析,进行漏洞利用后,成功获取多个目标的不同权限,达成本次渗透目的。
在大型或者高防护的目标渗透的过程中,有时重点不仅仅是漏洞的利用,对目标运维的画像也往往起着至关重要的作用。
6 如何防止CDN防护被绕过
当攻击者发现目标站点存在CDN防护的时候,会尝试通过查找站点的真实IP,从而绕过CDN防护。 我们来看一个比较常见的基于公有云的高可用架构,如下:
CDN(入口层)->WAF(应用层防护)-> SLB(负载层)-> ECS(源站) -> RDS(数据库) 即对应关系为:域名 cname CDN,CDN-→WAF,WAF-→ SLB,SLB-→ ECS;
f
我们重点来关注一下CDN-→WAF-→SLB-→ECS这几层服务的关系。 假设,攻击者知道SLB的真实IP地址,就可以直接访问SLB的ip地址,从而轻易绕过CDN WAF的安全防护。
这里分享一个CDN防护技巧,通过中间件配置只允许域名访问,禁止ip访问。 这样处理的话,所有直接访问站点真实IP的请求都会被拒绝,任何用户只能通过域名访问站点,通过预先设定的网络链路,从DNS→CDN→waf防护→源站,所有的访问请求都必须经过WAF检测。
即使攻击者找到了真实IP地址,修改本地hosts文件,强行将域名与IP解析,也无法访问到目标站点。
6.1 Nginx参考配置
代码语言:javascript复制# 添加一个server,在原server里绑定域名
server {
listen 80 default;
server_name _;
return 403;
}
server {
listen 80;
server_name www.demo.com;
.........
本文从安全脉搏专栏 Bypass007 作者专栏转载
https://www.secpulse.com/newpage/author?author_id=6275