zoukankan      html  css  js  c++  java
  • DVWA-反射型XSS

    0x01 XSS介绍

    XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,需要强调的是,XSS不仅仅限于JavaScript,还包括flash等其它脚本语言。根据恶意代码是否存储在服务器中,XSS可以分为存储型的XSS与反射型XSS。

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

    0x02 Low级别

    代码如下:

    <?php
    
    header ("X-XSS-Protection: 0");//header函数向客户端发送原始的HTTP报头,这一句的作用是禁用XSS保护。
    
    // 判断是否有输入。array_key_exists函数用于检查键名是否存在于数组中。
    if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
        // 将最终的信息反馈给用户
        echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
    }
    
    ?> 

    简单的输入<script>alert(/xss/)</script>即可。

    0x03 Medium级别

    代码如下:

    <?php
    
    header ("X-XSS-Protection: 0");//禁用XSS保护
    
    // 判断输入。
    if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
        // 获取输入。将<script>替换为空
        $name = str_replace( '<script>', '', $_GET[ 'name' ] );
    
        // 同low级别
        echo "<pre>Hello ${name}</pre>";
    }
    
    ?> 

    绕过方法:<sc<script>ript>alert(/xss/)</script>或者可以大小写绕过<Script>alert(/xss/)</script>,因为str_replace函数对大小写敏感。

    0x04 High级别

    代码如下:

    <?php
    
    header ("X-XSS-Protection: 0");
    
    // 同以上两个级别
    if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
        // 获取输入。preg_replace函数用于执行一个正则表达式的搜索和替换。
        $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
    
        // 同以上两个级别
        echo "<pre>Hello ${name}</pre>";
    }
    
    ?> 

    绕过方法:<img src='1' onerror=alert(/xss/)>不用script,可以用其他的代码。

    0x05 Impossible级别

    代码如下:

    <?php
    
    // 判断是否有输入
    if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
        // 检查token
        checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
    
        // 获取输入。htmlspecialchars函数把预定义的字符转换为HTML实体。
        $name = htmlspecialchars( $_GET[ 'name' ] );
    
        // 给用户的反馈
        echo "<pre>Hello ${name}</pre>";
    }
    
    // 生成token
    generateSessionToken();
    
    ?> 

    0x06 总结

    反射型XSS防御:
    1.过滤用户输入
    2.使用htmlspecialchar()过滤
    3.使用owasp等安全xss处理API
  • 相关阅读:
    【PHP】php重写session的存储机制
    【Javascript】原生js 全特效微博发布面板效果实现
    【Javascript】原生js百叶窗效果的实现及原理介绍
    【jQuery】jquery全屏滚动插件【fullPage.js】API 使用方法总结
    从百度音乐和酷狗音乐的分类想到的
    jQuer __Ajax DOM
    面向对象闭包 继承
    Git
    设计模式
    html5标签大全
  • 原文地址:https://www.cnblogs.com/-an-/p/12384563.html
Copyright © 2011-2022 走看看