英雄Samy

一个很有趣的AJAX网站漏洞攻击案例:

19 岁的洛杉矶软件开发员“Samy”编写了一段代码放在自己的MySpace简介里,令他获得了逾100万网上“好友”,直至MySpace使该程序失效。这段JavaScript代码自动将每一个查看Samy个人简介的用户加Samy为好友。

而在通常情况下,列为好友需要得到该用户的同意,但他写的蠕虫使用Ajax技术,在得到用户身份后用Ajax自动调用后台批准请求。

接着,该蠕虫会打开该用户自己的简介,把恶意代码复制进去,并把Samy添加到任何人的英雄列表中,还附上一句话:“但Samy是我最敬佩的英雄”。同样,任何查看该用户简介的人也会被感染。5小时内,Samy的名声和“人气”迅速扩大到100万MySpace会员。

此时,该网站的管理员才发觉大量活动,被迫将MySpace关闭数小时,以清除该蠕虫病毒。

Samy的个人网站,看得出他自己颇为得意:”I’ll never get caught. I’m Popular.”

Samy自己贴出的蠕虫源代码,和漏洞分析。

在Samy的代码中使用下面的方法通过MySpace网站对Cross-site Script的关键字检查:

background:url(‘javanscript:eval(document.all.mycode.expr)’)

alert(eval(‘document.body.inne’ + ‘rHTML’));