利用大厂 BUG 的短网址系统
TL;DR
本文将简单介绍一下什么是短网址系统,以及其是如何利用大厂的 BUG 来实现转跳的。
简介
短网址系统是一种将长网址转换为短网址的系统,例如有名的 dwz.cn,t.cn 等等。这种系统的好处是可以将长网址转换为短网址,简单来说有下面的特点:
- 在短信等场景下,可以节省字符数
- 有的支持自定义,便于记忆
- 隐藏 url 的地址,普通用户不会直接看到 url 的地址
- 统计用户的点击量
- 统计用户的地理位置和访问设备
当然,除此之外还有以赚钱为目的的短网址服务。如果你曾在数年前下载并使用过 Minecraft Forge,你可能会知道 Adf.ly,这是一个短网址系统,它会将用户重定向到广告页面,等待几秒后再重定向到用户想要访问的页面。这种系统可以为网站提供收入,有点类似于网赚网盘的模式。
在国内搭建一个短网址系统一般有备案方式,以及绕过方式。
备案方式
如某度旗下提供的 dwz.cn 工具,在多年前是可以直接生成短网址的,但是在 2022 年之后,它变成只向备案的企业开放了。原先匿名生成的短网址也不能再访问了。
再如 t.cn,它是某博的短网址系统,在多年前在聊天框发送的网址会自动转换为 t.cn 的短网址,但是在 2018 年之后,它也变成只向绑定指定域名的开发者开放了。
绕过方式
但除了上面提到的备案方式,如果你在搜索引擎中搜索“短网址”,你会发现有很多短网址系统,它们并没有备案,但是仍然可以正常使用。这是因为它们采用了其他的技术绕过了限制。
服务器不备案
有一部分的短网址系统并没有在中国大陆的服务器上部署,而是在国外的服务器上部署,这样就可以绕过备案的限制。例如 bit.ly,它的服务器在海外,所以可以正常使用。
使用漏洞
如 t.cn 等服务已经采用了白名单的制度,所以如果还想要使用它,就需要找到“漏洞”来绕过域名限制。
例如某个 Google 搜索排名第一的 “t.cn生成” 网站,它巧妙的运用了某度的一个漏洞,将用户输入的网址通过某度的域名进行转跳,这样就可以绕过 t.cn 的域名限制了。
具体的方式如下:
- 用户输入网址
- 网站将网址存储到自己的服务器中,并得到一个 id
- 编写一个 xml 文件保存到某度的 oss 服务中,这时候会得到一个 bcebos.com 的域名
- 将这个 id 拼接到 bcebos.com 的域名后面,得到一个新的网址
- 将这个新的网址拼接到某度手机端的域名后面,得到一个 baidu.com 域名结尾的网址
- 将这个新的网址通过 t.cn 进行转跳,得到一个 t.cn 域名结尾的网址
- 显示给用户
这样就可以绕过 t.cn 的域名限制了。
漏洞分析
当用户访问短网址时,会经过下面的流程:
- 用户访问 t.cn 的网址,转跳到某度的网址
http://m13.baidu.com/sf?word=121&mod=0&tn=nohead&pd=mms_mip&actname=act_sf_mip&title=%E9%A6%96%E9%A1%B5&top=%7B%22sfhs%22%3A%224%22%7D&ext=%7B%22url%22%3A%22%252F%252F****.bj.bcebos.com%2F1b%2F****.xml%3Fu%3D****%26txxx%3D***%253Fxhdl%253Dbaidu_aladdin%22%2C%22lid%22%3A%22****%22%7D&lid=****&referlid=****&ms=1#75178
- 某度网页会根据 url 中的 xml 文件地址,加载
http://****.bj.bcebos.com/1b/****.xml?u=****&txxx=***?xhdl=baidu_aladdin
这个 xml 文件 - 而这个 xml 文件中引用了一个 js 文件
https://****.bj.bcebos.com/***js/***.min.js?t=8
,这个 js 文件经过了简单的混淆,简单的分析代码逻辑,发现它会获取 url 中 u 参数和运行环境,再向服务器发送请求获取真实的网址,之后会尝试跳转到这个真实的网址
这个漏洞实际上是利用了某度的前端网页会根据 url 加载外部的 xml 文件,他们可能是为了方便自己的开发者,但是这个功能被利用了,导致了这个漏洞。
其实这个漏洞和 XSS 漏洞有点类似,会将恶意构造的 url 传递给网页前端并且加载。
如上图所示,参数中的 xml 被加载到了 baidu.com 域名下的网页中。另外,根据这个 div 的 id 命名 “super-frame”,看上去有点像 uniapp,可能是某度开发的一个框架,可以灵活的加载外部的文件。