DVWA靶场(九、存储XSS)

一、存储XSS(low)

1.1、代码分析,可以看到我们提交的内容会提交到数据库当中进行存储的


if( isset( $_POST[ 'btnSign' ] ) ) {
    // Get input
    $message = trim( $_POST[ 'mtxMessage' ] );
    $name    = trim( $_POST[ 'txtName' ] );

    // Sanitize message input
    $message = stripslashes( $message );
    $message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

    // Sanitize name input
    $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( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

    //mysql_close();
}

?> 

1.2、输入,弹框成功,并且这是持久性的,当我们再次访问页面也会存在

二、存储XSS(medium)

2.1、代码分析,和反射型xss一样,过滤了script,并且在Message栏加入了htmlspecialchars进行实体转换

2.2、在Message栏不能绕过,可以在Name栏通过大小写绕过,但是Name栏输入有限制,可以通过审查元素修改

三、存储XSS(high)

3.1、代码分析,massage栏进行了实体转换,name栏通过正则过滤了script

3.2、和反射型XSS一样,可以通过<img src='1' onerror=alert(/xss/)/>替换script

四、存储XSS(impossible)

4.1、代码分析,都使用了htmlspecialchars函数将字符转为实体

常见防范措施

1、过滤用户输入
2、使用htmlspecialchars()过滤
3、使用owasp等安全xss处理API

原文地址:https://www.cnblogs.com/tonywell/p/14033668.html