zoukankan      html  css  js  c++  java
  • XSS

    一、XSS简介

    什么是XSS

      XSS全称(Cross Site Scripting)跨站脚本攻击,是最常见的web应用程序安全漏洞之一,位于OWASP top 10 2013年度第三名,XSS是指攻击者在网页中嵌入客户端脚本,通常是JavaScript编写的危险代码,当用户使用浏览器浏览网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的。

      从上面的一段话,可以得知,xss属于客户端攻击,受害者最终是用户,但特别要注意的是网站管理人员也属于用户之一。这就意味着xss可以进行“服务端”攻击,因为管理员要比普通用户的权限大得多,一般管理员都可以对网站进行文件管理,数据管理等操作,而攻击者一般也是靠管理员身份作为“跳板”进行实施攻击。

      xss攻击最终目的是在网页中嵌入客户端恶意代码,最常用的攻击代码是JavaScript语言,但也会使用其他的脚本语言,例如:ActionScript、VBScript。而如今的互联网客户端脚本基本上是基于JavaScript,所以如果想要深入研究xss,必须要精通JavaScript。

      xss换句话说,JavaScript能够到什么效果,xss的胃里就有多大。这完全不是危言耸听。JavaScript可以用于获取用户的cookie,弹出窗口,那么存在xss漏洞的网站,xss就可以用来盗取用户cookie,废掉页面,导航到恶意网站!更高端的xss代码完全可以进行监控你的键盘操作,模仿windows注销界面,诱导你输入开机密码!而攻击者需要做的仅仅是向你的代码中注入JavaScript代码!

    如何挖掘xss

      寻找脚本程序的输出显示代码,搜索关键字,显示输出那个变量,跟踪变量是否过滤。

    二、xss的类型

    (一)反射型xss或不持久型xss

    实例1

    <?php
    $name = $_GET['name'];
    echo "Welcome $name</br>"; ?>

    测试结果

     

    在这段代码中程序接受name的值,并且输出,如果提交xss1.php?name=111,那么程序将输出111,如果恶意用户输入nam=<sCrIpT>恶意代码</sCrIpT>,因为程序并没有进行xss代码过滤,最终造成反射型xss漏洞。

    实例2

    在线xss跨站网站:https://public-firing-range.appspot.com/

    (二)存储型xss或持久型xss

    实例1

    与反射型xss相比,唯一的区别就是xss代码被带入数据,在下次浏览时,又被读取出来使用DVWA

    mysql -uroot -p

    use dvwa;

    show tables;

    select * from guestbook;

    delete from guestbook;

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

    此时xss脚本已经存入数据库

    实例2

    新建一个xss/index.php文件:

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title></title>
    </head>
    <body>
    <div>
    <?php
    
        if(isset($_POST['input']))
        {
            $data = $_POST['input'];
        echo $data;
        }
    
    ?>
    </div>
    <form action="" method="post">
      <p>
        <textarea name="imput" rows="20" cols="60"></textarea>
      </p>
      <p>
        <input type="submit" value="Go" />
      </p>
    </form>
    </body>
    </html>

    (三)DOM xss

    隐蔽性比较好,扫描器很难扫出!

    实例1

    DOM
    <
    script> var urls = document.URL; var index = document.URL.indexOf("url=")+4; var par = urls.substring(index); document.write(decodeURI(par)); </script>

    实验如下:

     不知道为什么突然上传不了图片了

    (四)变异 xss

    http://www.thespanner.co.uk/2014/05/06/mxss/

    变异xss是从安全范围引导入到不安全的过滤范围。大多数的常见的变异xss结构是源于错误的阅读innerHTML之间的代码。一个好的变异xss例子是使用listing元素使xss条件满足

    <listing>&lt;img src=1 onerror=alert(1)&gt;listing>

     当listing的innerHTML之间被读,它转变进入一个image元素,即使原始的HTML被避开。

    下面的代码例子显示出实际是如何被解析的。

    <listing id=x>&lt;img src=1 onerror=alert(1)&gt;listing>
    <script>alert(document.getElementById('x').innerHTML)</script>

     alert的预期的结果是将输出 “ &lt;img src=1 onerror=alert(1)&gt; ”,然后IE10实际解析返回的结果是 “ <img src=1 onerror=alert(1)> ”。引导者从安全范围引导入不安全的过滤范围。变异xss影响数据多次被读,第一层是真实的HTML,而且每次读innerHTML之间是被看作其它变异,取决于它变异的次数。

    http://www.businessinfo.co.uk/lab/mxss/

    通过使用mxss tool可以轻松知道矢量变异和执行。因为变异xss影响多个等级,根据下面的HTML将完美有效的,如果你改变等级到2.这读写HTML两次,你当然能增加变异值和无限编译。

    <listing id=x>&amp;lt;img src=1 onerror=alert(1)&gt;</listing>

    HTML编译器解析经常混乱而又可理解,因为复杂的相互作用的HTML、实体和不同的文本类型。那些混淆发生在HTML和XHTML。在IE9实际文档格式将会被解析软件混乱编译这是一个XHTML元素而不是HTML元素。

    (五)专业或相对路径覆盖 xss

    http://challenge.hackvertor.co.uk/xss_horror_show/chapter7/rpo.php

     (六)不存储型 xss

    只要是输入的地方都可以插入恶意xss代码

    四 xss测试技巧

    工具扫描

    APPscan

    awvs

    burpsuite

    XSSERXSSF

    http://www.domxsscanner.com/

    手动测试

    使用手工检测web应用程序是否存在xss漏洞,最重要的是考虑那里有输入,输入的数据在什么地方输出。

    在进行手工检测xss时,人毕竟不像软件那样不知疲倦,所以一定要选择有特殊意义的字符,这样可以快速测试是否存在xss。比如测试某输入是否存在xss漏洞,请不要直接输入xss跨站语句进行测试一步一步来,这样更有利于测试。

    第一种情况:可得知输出位置

    输入一些敏感字符,例如<、>、"、'、() 等等,在提交请求后去查看HTML源代码,看这些输入的字符是否被转义。

    在输出这些敏感字符的时候,很有可能程序已经做过了过滤,那么你在寻找这些字符的时候就不是那么容易了,这时候你可以直接输入“XXSER<>"'&”折床字符串,然后再查找源代码的时候直接进行查找XXSER或许比较方便一些。

    第二种情况:无法得知输出位置

    非常多的web应用程序源代码是不对外开放的,这时在进行测试xss时就有可能无法得知输入数据到底在何处显示,比如测试某留言本是否存在xss,那么在留言之后,你必须要经过管理员的审核才能进行显示,这时你是无法得知,你输入的数据在后台管理页面处于何种状态,例如:

      在<div>标签之中:<div>XSS test</div>

      在<input>标签之中:<input type="text" name="content" value="xsst test"/>

      对于这种情况通常会采用输入" ">... "来进行测试

      万能测试xss漏洞代码:“ /></textarea><script>alert(1)</script> ”

      有些情况手工检测漏洞效率比全自动检测软件更快(漏洞验证),因为测试人员通过经验可以快速的发现输入点,这是扫描器所无法比拟的。

     另外,一些xss漏洞也不仅仅是直接注入到HTML,或者数据库中才能触发,比如在上传文件时修改文件名“<script>alert(/xss/)</script>”,那么程序在读取文件名后并将文件名显示在HTML文档中,也会触发xss漏洞。

    有着输入的地方就有可能存在着风险,如果连输入都没有了,xss也不必检测了,包括其他安全漏洞。

  • 相关阅读:
    B树
    23查找树和红黑树
    红黑树---满足红黑性质的二叉查找树
    AVL树---平衡的二叉查找树
    二叉查找树
    Ping程序
    ICMP:Internet控制报文协议
    Unix&Linux大学教程目录
    Linux文件系统
    git简介
  • 原文地址:https://www.cnblogs.com/little-kwy/p/9502855.html
Copyright © 2011-2022 走看看