浅谈WAP网站安全

By kxlzx

[摘要]

    本文以国内一些知名WAP服务网站安全漏洞为例,浅浅的谈一下关于WAP安全的一些想法。

    推荐以下人群阅读:
    
    1. WAP开发人员
    2. WAP产品设计人员
    3. “网络安全爱好者”
      

[正文]

    这要从WEB网站的用户认证说起,那时候我们还在用电脑。在WEB网站中,用户的认证信
息,都存放在COOKIE中,一旦用户登录了,之后对于WEB网站的访问,浏览器每次自动跟随
请求发送出来。当手机刚开始上网,手机浏览器还没有成熟,手机操作系统更加稚嫩,很多
手机浏览器都不认识COOKIE,当然也不支持JavaScript。WAP网站为了留住用户,只好使用
在WEB网站中非常老土的认证,在页面所有的URL连接后,加入一串SID作为下一个页面的默
认参数,当用户浏览一次后,就跟在用户页面上所有的连接后,URL就会变得像这样:

    http://wap.inbreak.net/default.php?sid=xxooxxooxxooxxoo
    
    你可以尝试用手机登录163的WAP网站(wap.163.com),之后会看到所有的连接,都跟
了长长一串,这串中的SID参数,就是为了做认证的。黑客如果能猜到用户登录后那长长的
一串的内容,直接使用自己的浏览器访问,就会变成网站的认证用户了,当然靠猜是不现实
的。

    WEB网站认证信息放在COOKIE时,黑客要用XSS取到COOKIE,其实是很麻烦的,后来有了
httponly,就更讨厌了。现在WAP网站更变态,居然不支持JAVASCRIPT,那怎么才能攻击其
他用户呢?

0x01 友情链接安全问题

    在http head中,有个字段叫referer(文末尾有参考链接),可以取到当前请求是从哪
一个URL过来的。

    使用手机浏览器在访问页面:
    
    http://wap.163.com/

    时看到,页面中有个友情链接指向:

    http://wap.handbb.com/agent.jsp?f=00002910
    
    于是我们点了这个链接。
    
    这时浏览器会发送:   

  1. GET http://wap.handbb.com/agent.jsp?f=00002910 http1.1 
  2. Host:wap.handbb.com 
  3. Referer: http://wap.163.com/ 

    这个数据包给wap.handbb.com网站,在数据包中,有Referer字段。如果黑客能够控制
wap.handbb.com,就可以轻易取到所有从wap.163.com网站用户link过来的URL。取163的URL
做什么?

    如果用户登录了,当前用户浏览器上的URL就变成了:
    
    http://wap.163.com/index.do?sid=wAsbVhmXXXXXXXATCu

    有多少用户会从163点友情链接过来,就有多少SID,被黑客拿到后,可以直接访问,就
变成合法用户了。有空我也去门户网站做广告。或者。。。据观察,目前某些WAP网站风头
很火,到处挂链接,如果把它。。。

0x02 用户互动导致SID泄露

    不要动不动黑来黑去,我是爱好世界和平的,有没有不黑网站,就能取到SID的方法呢?

    答案是肯定的!
        
      有不少WAP网站已经慢慢发展了起来,形成了大型网站,也开出很多服务,比如论坛,
站内消息,邮箱。在WEB安全防御中,虽然做了很多防御,但是通常也是允许大家发广告链
接的,所以站外链接这块很少有防御,那如果我们能在论坛帖子内容中,插入:

  1. <a href=“http://www.inbreak.net”>http://www.inbreak.net</a> 

    出来,然后诱惑用户点过去,就可以从我们自己的网站获取用户的SID了。最危险的莫
过于邮箱,比如QQ邮箱就很给力(目前已经修补)。首先给用户发个邮件,内容中加入一
个link,具体“互动”内容就不用我说了,你懂得。

    当用户使用手机浏览器访问QQ邮箱,打开邮件,会看到一个链接。
0x10_1.jpg
    
    就是上图中的“打开活动页面”,只要用户打开了,在我的服务器上,马上获得了这串URL:

  1. 2011-1-3 22:11:10-------------http://w34.mail.qq.com/cgi-bin/readmail?sid
  2. qMXXXXXXXXXXXXXXXXXXXXXM.&disptype=html&mailid=ZC2XXXXXXXXXXXXXXXXXXX11 
  3. &t=&conv=&p=&cmid

    然后直接使用PC上的浏览器可以打开URL,会看到:
0x10_2.jpg
    
    显然已经登陆过了,这就通过了QQ登录验证。好,下面我们开始群发QQ邮件。。。(后
面被和谐了)

    像这样用在WEB网站的邮箱里,其实是个安全的应用,但是来到了WAP的领域,它居然变
成了漏洞。

0x03 UCWEB浏览器自动生成链接功能引起的SID泄露

    上一个例子中,其实是在讲QQ邮箱存在一个SID泻露安全漏洞,QQ邮箱可以做防御,不
允许<a>标签,只允许文本内容是个链接地址即可。当浏览器自己出现了一些安全问题,其
实也会导致SID被盗。

    大家用智能手机么?有很多比较潮流的手机,阅读短信时,如果短信中出现了URL:
    
    http://www.inbreak.net
    
    那就可以直接点连接打开浏览器访问。这是很普遍的功能,很多短信息阅读软件,都自
带这个功能。
 
    但是这个特性,如果用在手机浏览器上,就悲剧了!
    
      下载最新的手机浏览器“UCWEB7.4”,我使用的是android版。这个浏览器有个特性,当
页面代码为:

  1. <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" 
  2.  "http://www.wapforum.org/DTD/xhtml-mobile10.dtd"> 
  3. hacked by kxlzx 
  4. http://www.inbreak.net 

    这是页面源码,本来显示在浏览器上,是一段字符文本,因为链接中没有<a>标签。WML
和HTML标准都没有让它成为一个可以点击的link,但是UCWEB却会自动把它识别为一个链接。
这导致N多无辜受害者。

    我们看看其中一个无辜受害者163邮箱。

    163邮箱以及google邮箱相对QQ邮箱,在这里还是很安全的,如果在发送邮件时,出现
了链接代码为:

  1. <a href=http://www.inbreak.net>inbreak.net</a> 

    它会自动使用自己的过滤模块替换href部分,替换后结果为:

  1. <div><a href="http://mproxy.youdao.com/proxy/jump?u=http%3A%2F%2Fwww.inbreak.net 
  2. &amp;keyfrom=jumper.in&amp;c=TRUE&amp;j=1&amp;mx">http://www.inbreak.net<br /> 
  3. </a></div> 

    这样,打开URL后会由这个服务获取inbreak.net这个网站内容,然后展示给用户,于是
inbreak.net网站获取到的referer就不再是当前的URL,而是中转站服务发送的URL。这个
referer其实是没有任何SID的。

    这个163的功能其实本身不是为了安全,而是为了“给用户省流量费”,因为直接访问
HTML网站,会有大量的垃圾数据产生,所以先中转过滤了一下,再还给用户。

    但是在163邮件中,如果发的不是一个<a>标签的链接,而是单纯的文本文字:
    
    http://www.inbreak.net
    
    再使用UCWEB访问看看:
0x10_3.jpg
    UCWEB仍然认为它是一个链接,可以直接click过去。点击后,会看到我又抓到了SID!
无辜的163邮箱,就这样悲剧了。
0x10_4.jpg
    
    但是使用MiniOpera浏览器或android自带浏览器访问,都不会出现这个结果。它们认为
这只是一段文字,下图是MiniOpera访问的结果:
0x10_5.jpg
    
    可以看到,这里显示的那个链接是一个文本,不能直接点击过去。我看到国内WAP网站
唯一对文本URL防御好的,就是qidian网站。这个网站防御方式猥琐,为了和谐,不顾一切
的替换掉了”http://”后面的文本内容,当然,这不是一个好的解决方案。

0x04 QQ浏览器自动预读功能引起的SID泄露

    可能有读者跑去给163发邮件推广UCWEB了,别急啊,这儿有个更好玩的浏览器。在QQ手
机浏览器中有个功能,叫做“智能预读”(手机QQ浏览器1.3(Android)),默认是开启功能
的。下图:
0x10_6.jpg
 
    这个功能也是一个新型的业务,专门用于看新闻,看小说的,我们翻翻介绍:“智能预
读:当您在浏览当前页面时,浏览器后台自动读取下一个 页面,让您进入下一个页面完全
没有网络延时”。我很喜欢这个功能,它可以在看新闻时,网速奇快。

    在前文我们讲到,如果我们能在页面上定义一个链接,一旦用户点击,就可以窃取到
SID号。正是这种攻击,在这里被发挥的淋漓尽致。

    http://www.inbreak.net/?SID=XXXXXXX

    这个URL打开后,可以看到如下页面源码:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" 
  3.  "http://www.wapforum.org/DTD/xhtml-mobile10.dtd"> 
  4. <html> 
  5. <body> 
  6. <a href="http://www.baidu.com">下页</a> 
  7. </body> 
  8. </html> 

    注意加粗斜体的部分,只要代码中的链接显示名叫做“下页”,抓包看看做了什么:
0x10_7.jpg
    果然自动扔到baidu那边去了,referer中带着SID!真的智能啊!
    
    前面打算发邮件的同学,快去改链接显示名吧,居然还在想邮件“互动”内容么?你
out了,只要可以在用户打开的页面中,出现这个,就不需要用户去点了,他只要看了邮件,
我们就有SID。

    这个功能真的是漏洞么?
    
    个人认为,在这么优秀的功能面前,神马都是浮云。如果真的要用安全来限制,就在
referer中,去掉链接参数,或者直接干掉referer字段就可以了。

0x05 WML注入攻击诱骗用户发短信

    在WAP服务中,并不是所有浏览器都支持Java Script,所以XSS漏洞就显得非常低调
(当然遇到支持JS的浏览器,也并不是没有用处,这里不谈XSS),但是却给了WML注入的机
会。这还是要从漏洞的利用价值谈起,我们既然拿着手机在上网,利用漏洞的手段也应该回
归真实环境。打电话、发短信是我们最常用的联系功能,如果能让用户发短信过来,或许很
多黑心商家就可以收费了,很多短信服务,都是不小心发了个“A”到某号码才扣费的。那
些国产的山寨机很多自带这个服务,喜欢的朋友可以买来体验下:)

    搜狐的WAP服务存在这样一个漏洞,看这个链接:

  1. http://news.wap.sohu.com/user/index.php?op=getpwd1&backurl="/></go></anchor> 
  2. <a href="sms:10086?body=我是猪"><big>恭喜您随机获得1等奖! 
  3. 点这里发送免费短信“我是猪”到10086,填写中奖信息!</big></a><anchor> 
  4. <go href="aa"><postfield name="account" 
  5. value="&uID=-ByGdGpCsaolAAAA&uuid=1wgsb0c139aklAADA 

    使用手机访问:
0x10_8.jpg
    
    比原来的页面多了这样一行链接,点“恭喜您随机获得1等奖!点这里发送免费短信
“我是猪”到10086,填写中奖信息!”这段文字,手机浏览器会自动调用短信软件,打开
短信发送页面,诱惑用户发送“免费”短信。

    在短信链接中,设置为“sms:10086?body=我是猪”,默认短信内容就有了,用户只要
方便的点击“发送”即可。
0x10_9.jpg
    

0x06 短信接口漏洞利用

    让门户网站官方发送的短信诈骗,可以参考我的另一篇文章,如果是某大型门户网站给
用户发条中奖和登录的短信,一定会起到有趣的效果。

    详见附录[2]。
    
    
0x07 新的业务,新的方向

    我们最后不谈安全,说下浏览器功能。在PC上,浏览器的功能,几乎都已经固定了,市
场也早就被几位大牛霸占。而wap浏览器却刚刚开始发展,值得去研究下,它们会搞出来很
多奇奇怪怪的功能。并且在国内就这点最傻,喜欢山寨,看别人做了什么,自己赶快搞出来,
学个四不像不说,还很有可能把安全功能掐调,以后关注下说不定就有好玩的出来。

    至于各个问题的解决方案,其实本文都已经提及了,就不做最后总结了。WAP安全才刚
刚起步,这里仅仅提及了个开头,还有很有意思的等待大家发掘。我也在学习中,欢迎大家
互相交流。

0x08 附录

[1] HTTP Referer http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.36
[2] 浅谈短信接口安全 http://www.inbreak.net/?action=show&id=158
[3] 作者BLOG http://www.inbreak.net

感谢幻影WebZine
http://webzine.ph4nt0m.org/

空虚浪子心 QQ:4700012
邮箱 4700012#qq.com
-EOF-

发表评论?

20 条评论。

  1. 刚看到了,来祝贺一下

  2. wap安全将变为一种趋势啊

  3. wap出于发展阶段,但愿十年后有一批WAP程序员看到这个文章,那时候才会注重安全

  4. 很给力。目前WAP安全和WEB安全比起来差距还是很大……

  5. 利用图片钓WAP网站SID | 空虚浪子心的灵魂 - pingback on 2011 年 05 月 24 日 在 下午 1:43
  6. http://220.181.49.135/jump.wml? 我手机用WAP上网每个页面都有相同的广告连接、地址开头是上面的、、百度了下是悟空无线的IP、、这广告是怎么产生的、怎样清除、、求助!QQ:3795453

  7. 这个太NB了…希望博客多能写写这方面的入门文章….

  8. 浅谈WAP网站安全 - 玉米串|无限尝试,无限可能! - pingback on 2011 年 07 月 02 日 在 下午 9:01
  9. 移动手机支付认证码漏洞背后的料 | 空虚浪子心的灵魂 - pingback on 2011 年 07 月 13 日 在 下午 10:21
  10. 跟 非安全的一篇文章很像

  11. 楼主写的不错,学习了!

  12. 太牛比了,最近发现好多博客,以前怎么没有看到

  13. 这么好的文章我居然木有早点看到
    学了不少哈哈
    感谢下
    虽然一年过去了
    不过外链下载的实验了下居然不小心抓到某站长的sid
    十足的汗颜呐

  14. 这个问题存在已久,一直不知道如何解决。请问有没有什么办法做防护

  15. 回楼上。
    互联网公司的做法,一般是默认给COOKIE,老的手机浏览器不能接受cookie的情况下,就自认倒霉了。
    银行还有一种做法,就是把sid放在form里,页面所有的连接,都是一个form.submit(),这样就可以一直传递。
    除此之外,只能在业务中控制,比如,不准发连接、不准富文本等等。
    一般不喜欢在blog谈具体安全方案的,这里只能大概说下思路了。

  16. 看完本文我立刻去查了下是从哪里连到这个页面的

  17. A second home loan works by using the actual very similar home as bein

  18. 我勒个去.这个当真要给跪了..
    WAP风景独好啊..
    真该早点看到
    作者文笔当真好,难怪能出书,不错!!!

  19. 文章我没看完,现在腾讯wap空间页面已经用预读的方式了,加图片也会缓存到他们服务器,现在还有什么办法拿到SID?
    我总是慢人一步,我知道的时候腾讯已经给补了这个漏洞

发表评论

Trackbacks and Pingbacks: