DVWA实战测试之XSS

0x01 XSS(Reflected)

Low

源码分析
Hello ' . $_GET[ 'name' ] . '
'; } ?>

代码只是判断了name值是否为空,然后再将name打印出来,参数没有做任何的过滤,存在明显的XSS漏洞。

测试过程

输入成功弹框!

可以弹窗的函数:alert()、confirm()、prompt()

Medium

源码分析
', '', $_GET[ 'name' ] );

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

$name = str_replace( '

  • 大写绕过:
  • High

    源码分析
    Hello ${name}
    "; } ?>
    $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );	
    //这段正则表达式直接将*s*c*r*i*p*t给过滤了,并且不区分大小写,使得双写绕过和大小写混淆绕过不可行,但同样是使用黑名单策略,仍存在安全隐患。
    
    测试过程

    尝试其他标签:

    • img:当图片显示错误时,执行alert(‘0xdawn’)
    • 超链接:0xdawn

    Impossible

    源码分析
    Hello ${name}
    "; } // Generate Anti-CSRF token generateSessionToken(); ?>

    Impossible级别的代码使用htmlspecialchars函数把预定义的字符&、"、’、<、>转换为 HTML 实体,防止浏览器将其作为HTML元素。 当输入时,因为 htmlspecialchars 函数会将 < 和 > 转换成html实体,并且${name}取的是$name的值,然后包围在

    标签中被打印出来,所以我们插入的语句并不会被执行。

    0x02 XSS(Stored)

    Low

    源码分析
    ' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
    ' ); //mysql_close(); } ?>

    low级别的代码对我们输入的message和name并没有进行XSS过滤,而且数据存储在数据库中,存在比较明显的存储型XSS漏洞。

    测试过程

    name中填入0xdawn,message中填入代码立即执行

    DVWA实战测试之XSS_第1张图片

    查看元素,发现js代码已经被写入进去。DVWA实战测试之XSS_第2张图片

    Medium

    源码分析
    ', '', $name );
        $name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
    
        // Update database
        $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
        $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '
    ' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
    ' ); //mysql_close(); } ?>

    代码中name值的处理增加了一个str_replace() 函数,用来将字符串中含有,成功写入。

    DVWA实战测试之XSS_第3张图片

    • 双写绕过,在name中填入ipt>alert('0xdawn'),成功写入。

    DVWA实战测试之XSS_第4张图片

    High

    源码分析
     ' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
    ' ); //mysql_close(); } ?>

    在medium级别上,name参数使用了正则表达式进行过滤,仍然可以突破。

    测试过程
    • 查看元素,修改name值最大限制为100.

    • name中填入,成功写入
      DVWA实战测试之XSS_第5张图片

    • 超链接:name中填入0xdawn,成功写入
      DVWA实战测试之XSS_第6张图片

    Impossible

    源码分析
    prepare( 'INSERT INTO guestbook ( comment, name ) VALUES ( :message, :name );' );
        $data->bindParam( ':message', $message, PDO::PARAM_STR );
        $data->bindParam( ':name', $name, PDO::PARAM_STR );
        $data->execute();
    }
    
    // Generate Anti-CSRF token
    generateSessionToken();
    
    ?> 
    

    Impossible在high级别的基础上对name参数也进行了更严格的过滤,导致name参数也无法进行XSS攻击。而且使用了Anti-CSRF token防止CSRF攻击,彻底防御XSS漏洞和CSRF漏洞。

    0x03 XSS(DOM)

    Low

    源码分析
     
    

    代码没有任何的保护措施,对default参数没有任何过滤。

    测试过程

    直接构造xss代码,访问连接:

    192.168.8.151/dvwa/vulnerabilities/xss_d/?default=English		//脚本成功执行
    

    Medium

    源码分析
     
    

    代码先检查default参数是否为空,如果不为空则接受参数的值,同时使用了stripos将即可成功弹窗。

    Impossible

    源码分析
     
    

    防御机制写在了客户端里,无XSS漏洞。

    你可能感兴趣的:(漏洞靶场,xss,web安全,网络安全,DVWA)