2013年6月1日星期六

两种类型的XSS漏洞原理

两种类型的XSS漏洞原理(转)

发表于414 天前 | 作者: admin | 分类: XSS | 孵化于:2012年04月13日 |
存储型XSS
如果把浏览器看作WEB2.0后时代的操作系统,那么客户端脚本就相当于传统的应用程序,而XSS的攻击方式其实就相当于在被攻击者的系统上执行了一个木马程序。但这种“木马”有个很大的缺点,就是无法像传统木马那样在操作系统中安家,以后还能自动执行。
前几个月发现了一种有趣的XSS漏洞,这种漏洞攻击一次后XSS代码就会被存储下来,以后每次访问被XSS的网站这个“木马”都会再自动执行。我在网上没有找到相关的资料,这里姑且称之为“存储型XSS”(如果有朋友之前看到过类似的文档,欢迎指教)。
原理其实也很简单,流程如下:
XSS代码被提交给网站–>网站把XSS代码SetCookie给浏览器–>浏览器再次请求网站时提交包含XSS代码的 Cookie–>网站从Cookie中取出包含XSS代码的某变量并将该变量作为页面内容的一部分返回给客户端–>客户端执行XSS代码
XSS代码除了存储在客户端的Cookie中,也可能存储在服务器端,不过这种情形应该比较少。
比较常见的例子是提供多种语言支持的网站。用户在网站上设定要使用的语言,然后这个语言变量会被存储在Cookie或服务器端数据库。如在一些网页中可以看到类似这样的函数:
function getLocal() {
    var local;
    local = ’zh_CN’;
    return local;
}
其中的local变量可能就是从客户端提交的Cookie或服务器数据库中取出的。客户端请求如下URL:
http://tk.xfocus.org/setlocale.php?locale=zh_CN’;return local;}alert(“XSS”);function dummy(){a=’
“zh_CN’;return local;}alert(“XSS”);function dummy(){a=’”就会被作为语言信息存储下来。浏览器再去请求网站页面时,上面的函数就会变成这样:
function getLocal() {
    var local;
    local = ’zh_CN’;return local;}alert(“XSS”);function dummy(){a=”;
    return local;
}
由于语言信息是需要全局使用的,所以一般网站的每个页面都会包含上面的代码。这样,“木马”就长存于“操作系统”中了。以后被攻击者每次访问该网站的每一个页面,都会执行这些XSS代码。
反射型XSS
-0×01 [前言]
#sH:看过了那么多的paper,心血来潮,自己也来写个:)科普型paper,大牛略过。- -:
在Web 2.0技术的发展下越来越多的计算工作被放到客户端处理,由于程序员的疏忽,导致了许多的安全漏洞。XSS属于比较常见的一种,在前几年XSS 还并不怎么被人重视,但如今,随着XSS漏洞的危害日益增大,如校内和baidu空间前阵子的XSS WORM等等,其危害之大也引起了大家的重视。
XSS的类型大体分为两种:反射型XSS和持久型XSS,相比之下,后者的利用要比前者方便许多。甚至许多人认为反射型的XSS是鸡肋,因为其利用起来很不方便,但在安全技术飞速发展的今天,鸡肋也有变鸡翅的一天。下面我们来看看什么是反射型XSS。

-0×02 [什么是反射型XSS]
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。
那么什么是反射型XSS呢?黑哥对我讲的是形如”
非持久性XSS(Reflected cross-site scripting),是我们通常所说的反射型XSS,也是最常用,使用最广的一种方式。它 通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行。它的特点是非持久化,必须用户点击带有特 定参数的链接才能引起。
持久性XSS(Persistent cross-site scripting),指的是恶意脚本代码被存储进被攻击的数据库,当其他用户正常浏览网页时,站点从数据库中读取了非法用户存入非法数据,恶意脚本代码被执行。这种攻击类型通常在留言板等地方出现。
很多人非常鄙视非持久性XSS(反射型XSS),认为这种XSS只能依靠欺骗的手段去骗人点击,才能让攻击正常实施起来。其实让反射型XSS变得持久的方 法,已经出现过好多次了。比如利用applet、利用flash的AS脚本、利用IE的Ghost 页面,Cross Iframe Trick等等。

-0×03 [反射型XSS的常见利用方法]
既然是“需要欺骗用户自己去点击链接才能触发XSS”,那利用反射型XSS岂不是只有去忽悠用户这一种方法?放在几年前也许是这样的,现如今,就要上演鸡肋变鸡翅的好戏了!
[1]欺骗
不得不说这是最简单有效的利用方法了,但对忽悠的能力有严格的要求,不然用户不会那么容易上钩的。其次,现在的用户都有了一定的安全意识,也不是那么好骗 了。以上面提到的链接为例,由于是NASA网站的跨站,大家完全可以在一些天文爱好者聚集的群里发类似这样的消息,如:“美国航空航天局公布最新UFO照 片”然后加上我们的链接。由于是NASA的链接(现在连小学生都知道NASA是干什么的),我想应该会有一部分人相信而去点击从而达到了我们的目的,这个 反射型的XSS被触发。但如果不是这么碰巧呢?请往下看。
[2]ClickJacking
在去年的OWASP会议上,ClickJacking这种攻击方式被提了出来。简单来说ClickJacking大致是这么回事:
1. 表现为点击某个链接或button时,实际上是点击到别的地方去了(劫持链接)
2. 不一定需要javascript,所以noscript也挡不住,但是如果有javascript会让事情更简单
3. 攻击是基于DHTML的
4. 需要攻击者一定程度上控制页面
所以,我们只要将用户的点击劫持到我们的链接上去就行了,而且ClickJacking是可以跨域的哦~
具体应用示例大家去google下就有了。
[3]结合CSRF技术
CSRF是伪造客户端请求的一种攻击,CSRF的英文全称是Cross Site Request Forgery,字面上的意思是跨站点伪造请求。这种攻击方式是国外的安全人员于2000年提出,国内直到06年初才被关注。
结合CSRF技术来利用反射型XSS是种不错的方法,利用CSRF可以使得这些不好利用的XSS漏洞变得威力无穷。具体示例请参考余弦的《基于CSRF的XSS攻击》(
[4]Cross Iframe Trick
先讲讲这种攻击能够达成什么效果:
1. 跨域执行脚本(IE、Firefox)
2. 把非持久性XSS变成持久性XSS –>!!!
3. 跨页面执行脚本
这种攻击方法比较绕,具体请参考《Cross Iframe Trick》(
[5]反转雅典娜—配合Anehta的回旋镖模块
什么是Anehta? Anehta是一个跨站脚本攻击(XSS)的利用平台。功能模块化,开发者可以单独为anehta开发各种各样的模块,以满足独特 的需求。Anehta中有许多的具有创意的设计,回旋镖模块(Boomerang),就是其中一个。回旋镖模块的作用,是为了跨域获取本地cookie, 只是在站点上有一个XSS,种类不限,不管是反射型XSS,还是持久型XSS,都可以为我们工作。
这时,反射型XSS的余热就被充分的发挥了。
具体示例请参考axis牛的《Anehta – Boomerang(回旋镖),如何将反射型XSS变成持久型XSS:论跨域获取cookie》(

-0×04 [浅析Anehta回旋镖模块工作原理]
既然提到了Anehta的Boomerang模块,那就简单说说吧。
Boomerang的工作原理:我们知道,浏览器被XSS攻击后,攻击者可以用js或其他脚本控制浏览器的行为。这时候如果我们强制浏览器去访问站点B上 一个存在XSS漏洞的页面,就可以继续用B站上的XSS_B控制用户的浏览器行为; 那么把整个过程结合起来,简单表示如下:
victim Browser —>site A,XSS_A —- redirect to —->Site B,XSS_B —– redirect somewhere —>…..
在IE中,iframe、img等标签都是拦截本地cookie的。需要使用不拦截cookie的比如 等方法,但是会被IE拦截弹出窗口,所以axis 牛在Boomerang中使用了表单提交,构造一个form,向site B提交,然后再从Site B导入一个XSS B,获取了cookie后,再通 过表单提交,跳转回原来的Site A.如果在Site B上,使用XSS_B再将页面重新定向回 Site A,那么对于用户来说,就是简单的闪了一 下,非常具有欺骗性,整个过程就像用回旋镖扔出去打了一下B一样。
但其实这并没有把反射型XSS真正的变成持久型的XSS,只是反射型XSS的一种攻击方式而已,也没有跨域,而是URL重定向转了一圈,跳了一圈又回来了。但这确实是让反射型XSS得到了充分的利用,达到了我们的目的。axis牛的这种思路非常值得我们学习!

-0×05 [小结]
本文只总结了常见的反射型XSS利用的方法,但都是简单的提了下,起到了个抛砖引玉的作用,让大家见到反射型XSS时能想到这些(貌似要都详细写出来就太 多了- -:),如有不足之处还请各位见谅。为了写这个查了很多资料,另外还要感谢黑哥耐心解答我的问题(黑哥对我的第一句话总是“?”) - -:。第 一次写paper,好与不好的大家就凑和看吧。有错误的地方还请各位大牛指出,谢谢。

没有评论:

发表评论