分类: 网络与安全
2009-11-24 15:34:45
WAP Web Application Security
Author: lake2 [80sec]
EMail: lake2#80sec.com
Site:
Date: 2008-6-10
---------------------------------
[ 目录 ]
0x00 纯属扯淡
0x01 WML与WMLScript
0x02 WML注入攻击
0x03 WML注入可以做什么
0x04 WAP站点会话安全
0x05 后记
--------------------------------
0x00 纯属扯淡
因为本本借给小s美女了,只好用手机上网,发现WAP网站也有一定的市场,顺便也就学习了下WAP上的Web安全。貌似还没有全面一点的关于WAP Web应用安全的文章,那我就不揣浅陋分享一下自己的一点经验,抛砖引玉,还望各位大牛指教。
0x01 WML与WMLScript
现在大多数WAP网站的页面都是使用的WML,也有使用XHTML的,不过用的比较少,所以本文主要还是讨论WML。
WML是Wireless Markup Language(无线标记语言)的缩写,它同HTML类似,都是网页标记语言。不过HTML是让我们在电脑上用IE或firefox等浏览器进行阅读的,而WML语言则是专为手机等一些无线终端使用的。
当然,Opera浏览器目前是支持WML的,比如你可以使用Opera打开百度的WAP主页:,但你用IE、firefox就看不到正常页面。
如果你的手机支持WAP上网的话,它的浏览器就是支持WML的。呃,或许您早就用手机浏览过WAP网站了吧。
嗯,一个简单的WML网页代码如下:
Hello world!
用支持WML的浏览器访问以上页面就可以看到Hello world字样。
不管是HTML还是WML,这些都是前端展示页面,其实它们的后台都是一样的,都可能是ASP、PHP、JSP或者ASP.Net,所以后台程序面临的安全问题还是SQL注入那些,本文不讨论。
呃,更多的关于WML语法请参考这里:
如果我们把WML比作HTML,那么有没有可以比作Javascript的WAP脚本语言呢?有,它就是WMLScript。不过同JS比起来,WMLScript功能上要弱很多,有兴趣可以看看这里:
0x02 WML注入攻击
HTML页面面临的一个大的安全风险就是XSS,那是因为输出到页面的参数没有被妥善的处理导致攻击者可以向页面注入HTML或者Javascript代码。
类似的,对于后台程序处理到的参数如果没有做好处理,WML页面也可以被注入任何数据,这种方式可以叫做WML注入(WML Injection)。
好,看一个简单的例子,有这样一个PHP代码(为了更好的演示,假设magic_quotes_gpc=off):
header("Content-Type: text/vnd.wap.wml"); Hello !
echo "";
?>
呵呵,很明显,参数a没有被转义就直接输出到页面了,一个WML注入漏洞就产生了。
0x03 WML注入可以做什么
先想一下,XSS可以做什么?
目前来看最大的问题是WML注入可以插入WML代码更改页面。好,还是前面那个代码,我提交这样的参数: href=""> 点击登录
hi,然后WAP浏览器里面就会显示出一个“点击登录”的链接,实际上是指向百度首页的。呵呵,有些 WAP浏览器是没有地址栏和状态栏的。其实也不用让用户去点,WML有一个timer标签可以定时让页面自动转过去。
当然可以插入WMLScript,但不是每个浏览器都支持WMLScript,而且WMLScript功能很弱。如果浏览器是Opera的话倒可以利用WML注入来执行JS代码。
经典的弹cookie的框框哪里去了?是的,没有了,一是因为WML/WMLScript根本不能读写Cookie,二是很多WAP浏览器根本不支持Cookie-_-
0x04 WAP会话安全
是的,由于多数WAP浏览器不支持Cookie,WAP网站的解决办法就是把标识会话的字符串在URL或者表单中传送。这个字符串就相当于是Cookie了,只要拿到它就能以用户身份访问WAP网站了。
会话标识放在URL中从来都是危险的,呵呵,您应该知道HTTP协议里面的referer是干什么的吧。哈哈,这里是一片蓝海,因为好多WAP网站都是这样的。当然,有些WAP浏览器会发送referer字段,有些又不发送——没有统一的标准很是麻烦。
如果会话标识放在表单中,那就比较安全了,WMLScript也拿不到页面内容,除非我们能够控制表单提交的URL——貌似一般情况下WML注入不容易修改到这个。不过这样的设置也比较少见。
0x05 后记