1. 程式人生 > 實用技巧 >新手DVWA-XSS (Reflected)

新手DVWA-XSS (Reflected)

XSS (Reflected)

XSS(Cross Site Scripting)即跨站指令碼攻擊,是指由於過濾不當導致惡意程式碼注入網頁,當受害者訪問網頁時,瀏覽器執行惡意程式碼,執行攻擊者的攻擊行為

low

伺服器核心程式碼

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Feedback for end user
    echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}

?> 

從程式碼上看,沒有任何過濾

解法

輸入<script>alert(1)</script>

成功彈窗

medium

伺服器核心程式碼

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Get input
    $name = str_replace( '<script>', '', $_GET[ 'name' ] );

    // Feedback for end user
    echo "<pre>Hello ${name}</pre>";
}

?> 

medium難度程式碼過濾了script標籤

解法

雙寫繞過<scri<script>pt>alert(1)</script>

成功彈窗

high

伺服器核心程式碼

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Get input
    $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );

    // Feedback for end user
    echo "<pre>Hello ${name}</pre>";
}

?> 

正則匹配徹底過濾掉了script標籤,改用其他標籤

解法

輸入<img src=123 onerror=alert(1)>

成功彈窗

impossible

伺服器核心程式碼

<?php

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // Get input
    $name = htmlspecialchars( $_GET[ 'name' ] );

    // Feedback for end user
    echo "<pre>Hello ${name}</pre>";
}

// Generate Anti-CSRF token
generateSessionToken();

?>

程式碼使用了htmlspecialchars()函式,將'<','>'轉換為html實體,所以已經不存在XSS漏洞了