• 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:
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    Git | 详解 | 命令
    利用游标给数据库所有表添加同一个字段
    【Java EE初阶二十八】简单的博客系统
    ROS小车——编写launch文件(8)【ROS保姆注释教学】
    Sui成为DeFi增长的首选平台
    【D3.js】1.17-给 D3 元素添加标签
    数据结构与算法4-递归
    GPU释放显存
    YOLO系列梳理(九)初尝新鲜出炉的YOLOv6
    Hbase 面试题(五)
  • 原文地址:https://blog.csdn.net/qq_55202378/article/details/132993154