短URL跳转攻击

          原文URL: http://blog.csdn.net/u012859646/article/details/16840297  [2012.3]

0 引子 

 做个测试,点击新浪的短URL http://t.cn/zO5YXKe ,可许你会觉得浏览器一顿,然后跳转到百度首页。其实这个URL会让你的浏览器请求5次t.cn,并做了5次无甚意义的跳转,最终才到达百度。不过,对你的电脑没伤害,这个请不用担心。不过这个思路也可以用来做短URL攻击。


1 构想

主流微博都提供了短URL服务,像新浪的t.cn,QQ的url.cn。这两个短URL服务的访问量都不小,估计能有几千万的日PV。短URL除了URL短化,也提供了访问的跳转功能,这个跳转有点像镜子的反射,如果把两个镜子对着照会发生什么,相信我们都知道。那要是两个短URL网站相互跳转会如何呢?当然,这个场景其实和镜子的“无限”成像还是有区别,但是可以让一个被转化后的URL在访问时发生多次的转跳。

举例,把某个网址A,在两个短URL网址站反复的转化,假设我们做个100次,那么这个最终的短URL(假设为A1)被访问时,将在浏览器发生100次的跳转,给两个网站总共发送100次请求。再考虑,如果这个最终的A1被传播开(如被微博上的大号转下),那对短URL网站也算是一次DDOS攻击了。如果把这个生成的URL(A1)放在HTML标签中(如IMG),那即使不直接点开链接,浏览器也可能发送多个请求,从而产生攻击行为。

这个过程可以简单示意如: A经t.cn生成t1 → t1经url.cn生成u1→u1经t.cn生成t2→ t2经url.cn生成u2 ….→ t50经url.cn生成u50 .

这个URL(u50)就是上面说的可用于攻击的A1,只要访问A1,一个和上面流程相反的跳转过程就会发生,于是便让访问者的浏览器不知不觉中发起了100次请求。

以上纯属构思,以下为尝试过程。


2 尝试

2.1 方法1,两个(多个当然也OK)网站之间跳转。就拿t.cn和url.cn来实验。

尝试的过程没那么顺利,我相信这个问题两家网站可能也考虑到。至少新浪的 t.cn 做了些特殊处理。举个实际例子。网址http://www.baidu.com (记为A)在 url.cn 会生成 http://url.cn/0DlZLg(记为u1) , 而u1到了 t.cn里生成的URL为 http://t.cn/h5mwx (记为t1)。值得注意的是,这个t1不是指向u1,而是直接指向了 http://www.baidu.com,亦即,t.cn 可以理解 url.cn的短URL。这可能是新浪做了特殊处理,对 url.cn的短URL直接读取其转跳后的值(A),而不是跳前的(u1)。如果访问t1,将直接跳转到www.baidu.com,从而断开了这个反复跳转的可能。

但要绕过这个限制也不难,互联网上提供短URL跳转服务的网站多得很。新浪也不可能一个不漏,随便google一下“urlshortener” , 可以找到不少服务。挑一个不太知名网站,t.cn就老实的做转化了。这样按前文所说的方法,就可以实现利用两短URL网站来生成攻击URL了。

跑题说下跳转方式,一般的HTTP重定向使用302(“Moved Temporarily“)状态码 ,浏览器请求一个网址,如果收到一个302,下次遇到这个网址仍然会去请求,因为302只是表示“临时移走”嘛,下次也许就变了。如果请求返回为301(“Moved Permanently”),情况就不同,301表示“永久”跳转,这样对于一个返回301的请求,浏览器可以做优化,下次请求相同网址会直接请求上次跳转后的目标URL。

说到跳转方式,是因为t.cn和url.cn的跳转处理有差异,t.cn用的是302跳转,而url.cn用的是301跳转。对于一个短URL跳转服务,更合理的是用301,这样相同浏览器对于同一个转化后的URL只会请求一次转化。t.cn用的302,会增加不少没必要的请求量,同时也更容易受到短URL攻击(当然,每次都请求的好处是方便统计,也更容易做跳转的控制),。综上,对于通过301来跳转的短URL攻击只能生效一次(同一浏览器),相对没那么有趣。后续内容主要针对t.cn。


2.2 方法2,单个短URL网站跳转

上一个方法需要搭上不知名的第三方短URL网站,不太厚道。于是想,能否只用一个短URL网站实现这种跳转。这里的一个问题需要考虑,对同一个URL像t.cn 只会映射到同一个短URL,同时对于t.cn为前缀的合法URL是不做转化的,这个思路看似不可行。

不过从经验来说,URL字符串处理是个容易出错的过程,我只试了一次,就找出个一个可以利用的BUG来。上面提到的 http://t.cn/h5mwx(记为t1),将其改写成 http://t.cn:80/h5mwx ,这两个URL本应是同一个,对后面这个URL其实没有必要再做转化,但是 t.cn并没有识别出来,还是做了转化。于是,单个网站的跳转便很容易可以实现了,下为例子,只跳五次。

目标URL www.baidu.com

1)一次转化生成 http://t.cn/h5mw   

2)用 http://t.cn:80/h5mwx 生成 http://t.cn/zO5jsUZ

3)用 http://t.cn:80/zO5jsUZ 生成 http://t.cn/zO5YfCr

4)用 http://t.cn:80/zO5YfCr 生成 http://t.cn/zO5YJMg

5)用 http://t.cn:80/zO5YJMg 生成 http://t.cn/zO5YXKe

最终的URL(A1)http://t.cn/zO5YXKe 就生成了。访问这个URL,就可以使你的浏览器在5次跳转后才到达目标URLwww.baidu.com。当然,这个次数是可以随意增加的。


结语 

2.2里说的本站跳转还是可能从实现角度避免的。而构造多个短URL网站参与的攻击行为则很难从根本上避免。因为,我们不能预先区分一次跳转是正常的还是恶意的,而且这类网站也不可能对全部同类网站去做特殊处理。所以,以下说几点方案也只是权宜之策。

 

  • 如果不是出于统计目的,跳转建议用301,一方面可以减少请求,另一方面减少受攻击的可能性。
  • 从源URL到短URL的映射,需要一个细致的URL字符串归一化处理。例如大小写,端口处理还会有不少细节要处理,可参考相关RFC
  • 白名单机制,像新浪对url.cn所做的特殊处理,对于白名单内的短URL直接请求得到源URL。当然这个方法一方面很难做全,另外也有效率上问题。
  • 频度控制,简单而粗暴的方法,对于发生短时大量请求的用户,暂时封禁。这个方法虽然保护了服务器,但是容易误伤,而且有用户体验问题。
   最后。2.2里所举的问题是很容易修复的,说不定你读到本文时,这个方法已经失效了 短URL跳转攻击
  
  2012.3
  --EnD--


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值