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