zoukankan      html  css  js  c++  java
  • DVWA靶场(十、DOM型XSS)

    一、DOM型XSS(low)

    1.1、代码分析,可以看到没有任何的保护措施

    <?php
    
    # No protections, anything goes
    
    ?> 
    

    1.2、可以看到在地址栏输入1111,使用dom将用户提交的内容写入到反弹回的页面中,接着我们再在地址栏输入,可以看到返回弹窗



    查看网页源代码可以看到脚本插入到代码中,所以执行了

    二、DOM型XSS(medium)

    2.1、代码分析,可以看到,medium级别的代码先检查了default参数是否为空,如果不为空则将default等于获取到的default值。这里还使用了stripos 用于检测default值中是否有 <script ,如果有的话,则将 default=English

    <?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;
        }
    }
    
    ?> 
    

    2.2、很明显,这里过滤了 <script (不区分大小写),那么我们可以使用<img src=1 οnerrοr=('hack')>

    此时没有任何弹框,我们查看网页源代码,发现我们的语句被插入到了value值中,但是并没有插入到option标签的值中,所以img标签并没有发起任何作用

    所以我们需要闭合前面的标签,构造语句闭合option标签

    但是语句并没有执行,于是我们查看源代码,发现我们的语句中只有 > 被插入到了option标签的值中,因为闭合了option标签,所以img标签并没有插入
    继续构造语句去闭合select标签,这下我们的img标签就是独立的一条语句了

    查看源代码,可以看到,我们的语句已经插入到页面中了

    三、DOM型XSS(high)

    3.1、代码介绍,这里high级别的代码先判断defalut值是否为空,如果不为空的话,再用switch语句进行匹配,如果匹配成功,则插入case字段的相应值,如果不匹配,则插入的是默认的值。这样的话,我们的语句就没有可能插入到页面中了。

    <?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;
        }
    }
    
    ?> 
    

    3.2、使用注释进行绕过,这里的#在php中是单行注释,提交时会将#后的内容注释掉,但是也会带入到html当中当作js代码执行

    这里需要注意执行之前#号前要加空格

    四、DOM型XSS(impossible)

    4.1、代码分析,impossible级别的代码没有任何东西,注释写的是保护的代码在客户端的里面

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

    尝试访问链接,发现页面并没有弹出任何东西,而且语言框内的值是我们输入的参数的经过URL编码后的数据,其实这里对我们输入的参数并没有进行URL解码,所以我们输入的任何参数都是经过URL编码,然后直接赋值给option标签

    常见防范措施

    1、过滤用户输入
    2、使用htmlspecialchar()过滤
    3、客户端浏览器手动启动XSS Filter(XSS筛选器)

  • 相关阅读:
    Unity 3D:控制相机旋转、移动、缩放等功能
    电子公文传输系统验收3-开发环境
    冲刺 day7
    电子公文传输系统2-贡献排序
    程序运行
    实验三-电子公文传输系统1-个人贡献
    thread同步测试
    第五章学习总结
    第三周学习java第四章学习总结及体会!
    第一章学习过程问题小结
  • 原文地址:https://www.cnblogs.com/tonywell/p/14033749.html
Copyright © 2011-2022 走看看