CDN后面藏着什么?我靠SSL证书和DNS历史把源站IP扒了个精光
上次打一个政务SRC,主站套着CloudFront,WAF规则配得密密麻麻,扫了半天连个XSS都没打出来。同事说这站铁桶一块,放弃吧。
我没信邪,花了一个小时,没扫任何端口,没发任何一个攻击请求,纯用公开信息搜索,就把藏在CDN后面的源站IP找了出来。然后绕过WAF直连源站,SQL注入一打就穿。
旁站的同事凑过来看我屏幕:“你怎么做到的?”我打开crt.sh、SecurityTrails和FOFA三个网站,挨个演示给他看。他说这不是渗透测试,这是“开卷考试”。
这就是CDN防护最致命的幻觉:你以为你的服务器藏得天衣无缝,其实只要它上过网,就一定会留下痕迹。我做的就是把这些痕迹拼起来。
一、SSL证书透明度日志:一张证书,就能出卖你的源站
CDN只能代理HTTP流量,不能替你签发SSL证书。你服务器的SSL证书,一定是你自己申请的。而你申请的任何一张公开可信的SSL证书,都会被记录在证书透明度日志里。
这个日志,全球公开可查。crt.sh就是最直接的查询入口。打开crt.sh,输入%target.com,回车,你就能看到这家公司从建立到现在申请过的所有SSL证书——包括已经过期作废的。
这些证书的详情里,有一个致命字段:证书绑定的域名列表。生产环境的证书通常会绑定多个子域名,其中往往包含一些不经过CDN的内部域名——比如origin.target.com、backend.target.com、direct.target.com。运维为了方便管理,会在源站上也申请证书,甚至直接申请一张泛域名证书。
我查到目标公司的泛域名证书里绑了*.target.com,在它的历史DNS记录里发现origin.target.com解析到了203.x.x.15。直接访问https://203.x.x.15,返回的页面就是主站的登录界面。
实操技巧:查询时选include expired,把历史证书全拉出来。拿证书的SHA256指纹去FOFA搜cert="指纹值",直接关联出所有使用这张证书的IP。很多运维在测试环境和生产环境用同一张证书,一个指纹就能串起整个资产库。
二、DNS历史记录:你以为域名换IP了?历史记录全记着呢
CDN的接入方式通常是修改DNS解析,把域名的A记录指向CDN服务商提供的IP。但DNS不是只有当前的A记录——从域名注册至今,它解析过的所有历史IP,全部被第三方平台记录在案。
SecurityTrails、ViewDNS、DNSDB,随便打开一个,输入目标域名,选择DNS历史记录,你就看到一张从注册到现在所有A记录的时间线:2024年3月指向52.x.x.x(那是AWS ELB),2025年11月切到了104.x.x.x(那是CloudFlare)。但2024年3月那条记录,暴露了源站可能还在52.x.x.x上跑着。
我最近的一次实战:某教育平台域名study.target.com当前A记录指向CDN IP,SecurityTrails显示它三个月前解析到了47.x.x.208。用Shodan查47.x.x.208,发现端口22、80、443、3306全开着。访问HTTP 80端口,直接返回了学习系统的备份目录/backup/,里面放着完整的数据库dump文件和源码压缩包。这就是一张DNS历史记录打出来的战果。
进阶技巧:查A记录时,同时检查txt记录。很多运维习惯把源站IP写在TXT记录里(如server-ip=1.2.3.4),方便自己管理。查mx记录,邮件服务器通常不走CDN,它的IP可能和源站在同一网段。查ns记录,权威DNS服务器IP往往与源站同属一个C段。
三、HTTP响应头指纹:同样的报错,两次返回,锁定同一台服务器
每一台Web服务器返回的HTTP响应头,都带有其独特的指纹特征。Nginx的版本号、Apache模块的加载顺序、PHP的版本、自定义的X-Powered-By头、Server头——这些字段单独看没什么,组合在一起就是这台服务器的唯一指纹。
同一个后端应用,经过CDN和不经过CDN,返回的错误页面可能完全一致。访问https://target.com/nonexistent,CDN返回404,页面内容是“抱歉,页面未找到”。直接访问源站IP的/nonexistent,返回的404页面内容一模一样,甚至连页面底部那个拼错的单词都一样。
进一步验证:用FOFA搜索header="Server: nginx/1.18.0" && header="X-Cache: MISS" && title="后台管理",组合多个响应头特征,用Shodan的http.title过滤,响应体关键词比对,就能把藏在几十万台CDN后面的那台源站精准定位出来。
四、两个真实案例,全是钱
案例一:某金融机构源站泄露,一次高危,赏金5000元
目标金融机构主站套着CDN,WAF很严。在crt.sh查到一张绑定*.bank.com的泛域名证书,FOFA搜这张证书的指纹,找到3个IP。其中103.x.x.42访问后返回Tomcat 404页面,和主站的错误页面是同一套模板。直接对这个IP做渗透测试,发现8080端口有个低版本的Tomcat,存在文件上传漏洞。写了个JSP Webshell上去,翻到了数据库连接配置文件,里面有生产库的密码。高危漏洞,赏金5000元。
案例二:某互联网公司DNS历史泄露,一次中危,赏金2000元
目标公司域名api.target.com当前解析到CDN,SecurityTrails显示三个月前解析到47.x.x.88。FOFA查47.x.x.88,发现开放了22、80、443、3306、6379端口。其中3306是MySQL,6379是Redis。Redis没有设密码,直接连进去执行CONFIG GET dir,拿到了Web目录路径。用Redis写了一个定时任务反弹Shell,拿下了内网权限。中危漏洞,赏金2000元。
五、写在最后
CDN是一个很好的流量代理,但它不负责帮你藏源站。SSL证书在说、DNS历史在说、HTTP头在说、甚至一条错误页面也在说——它们全都在指向同一件事:这里还有一台裸奔的服务器。
找源站不是在“攻击CDN”,而是“绕过CDN去找那台没人保护的服务器”。这是一场公开信息的拼图游戏,只要你学会从证书、DNS和响应头三个维度交叉验证,任何源站都藏不住。
下次碰到CDN目标,别急着上扫描器。打开crt.sh、SecurityTrails、FOFA,三个网站,三项查询,一张完整的源站地图就出来了。剩下的就是收割时刻。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)