• 9、DVWA——XSS(Stored)


    一、存储型XSS概述

      XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行

    需要强调的是,XSS不仅仅限于JavaScript,还包括flash等其它脚本语言。

      根据恶意代码是否存储在服务器中,XSS可以分为存储型XSS与反射型XSS。DOM型的XSS由于其特殊性,常常被分为第三种,这是一种基于DOM树的XSS。例如:服务器端经常使用document.boby.innerHtml等函数动态生成html页面,如果这些函数在引用某些变量时没有进行过滤或检查,就会产生DOM型的XSS。DOM型XSS可能是存储型,也有可能是反射型。

    二、low

    2.1 源码分析

    
    
    if( isset( $_POST[ 'btnSign' ] ) ) {
        // Get input
        $message = trim( $_POST[ 'mtxMessage' ] );
        $name    = trim( $_POST[ 'txtName' ] );
    
        // Sanitize message input
        $message = stripslashes( $message );
        $message = mysql_real_escape_string( $message );
    
        // Sanitize name input
        $name = mysql_real_escape_string( $name );
    
        // Update database
        $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
        $result = mysql_query( $query ) or die( '
    ' . mysql_error() . '
    '
    ); //mysql_close(); } ?>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

      分析:

    • stripslashes()删除字符串中的反斜杠;
    • mysql_real_escape_string()转义SQL语句中使用的字符串中的特殊字符
    • 可见服务端并没有对XSS进行过滤。

    2.2 通关分析

      既然没有过滤,payload:

    在这里插入图片描述
    在这里插入图片描述

    三、medium

    3.1 源码分析

    
    
    if( isset( $_POST[ 'btnSign' ] ) ) {
        // Get input
        $message = trim( $_POST[ 'mtxMessage' ] );
        $name    = trim( $_POST[ 'txtName' ] );
    
        // Sanitize message input
        $message = strip_tags( addslashes( $message ) );
        $message = mysql_real_escape_string( $message );
        $message = htmlspecialchars( $message );
    
        // Sanitize name input
        $name = str_replace( ' 。因为name处有字符限制,故抓包修改参数。

    在这里插入图片描述

    在这里插入图片描述

    四、high

    4.1 源码分析

    
    
    if( isset( $_POST[ 'btnSign' ] ) ) {
        // Get input
        $message = trim( $_POST[ 'mtxMessage' ] );
        $name    = trim( $_POST[ 'txtName' ] );
    
        // Sanitize message input
        $message = strip_tags( addslashes( $message ) );
        $message = mysql_real_escape_string( $message );
        $message = htmlspecialchars( $message );
    
        // Sanitize name input
        $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name );
        $name = mysql_real_escape_string( $name );
    
        // Update database
        $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
        $result = mysql_query( $query ) or die( '
    ' . mysql_error() . '
    '
    ); //mysql_close(); } ?>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

      分析:name参数处只是过滤了script标签,可以使用img标签进行绕过。

    4.2 通关思路

      payload:
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    从硬件编程到软件平台的ci/cd
    PON网络是什么
    springboot嵌入式数据库H2初探
    健身用什么耳机比较好、五款适合健身房运动的耳机推荐
    Java中ArrayList 和 LinkedList 的区别是什么?
    027.Python面向对象_类&方法
    ​Mac还是Windows好?适合自己的可能才是最好的
    微服务17:微服务治理之异常驱逐
    ssh免密快捷连接简单配置实现
    12.01 - 每日一题 - 408
  • 原文地址:https://blog.csdn.net/qq_55202378/article/details/132993154