• DWVA-关于反射型xss的漏洞详解<xss reflected>


    反射型xss

    low级别

    代码如下:

     1 <?php
     2 
     3 header ("X-XSS-Protection: 0");
     4 
     5 // Is there any input?
     6 if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
     7     // Feedback for end user
     8     echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
     9 }
    10 
    11 ?> 

    从上图中可以看出来,对于接收到的输入参数,并未做任何处理,因此直接插入恶意代码

    <script>alert('hahaha')</script>

    效果如下:

    medium级别

    代码如下:

     1 <?php
     2 
     3 header ("X-XSS-Protection: 0");
     4 
     5 // Is there any input?
     6 if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
     7     // Get input
     8     $name = str_replace( '<script>', '', $_GET[ 'name' ] );
     9 
    10     // Feedback for end user
    11     echo "<pre>Hello ${name}</pre>";
    12 }
    13 
    14 ?> 

    代码中可以看出,通过str_replace将<script>,替换为空。

    这种情况下可以使用拼写<script>的方法,输入如下参数:

    <scr<script>ipt>alert('lalala')</script>

    输入后前面的<scr<script>ipt>中将<script>替换为空后,有重新组合出一个<script>,达到注入目的。

    效果如下:

    成功注入。

    high级别

    代码如下:

     1 <?php
     2 
     3 header ("X-XSS-Protection: 0");
     4 
     5 // Is there any input?
     6 if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
     7     // Get input
     8     $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
     9 
    10     // Feedback for end user
    11     echo "<pre>Hello ${name}</pre>";
    12 }
    13 
    14 ?> 

    high级别代码,使用正则表达式对输入参数进行搜索和替换,有效避免了组合绕过和大小写绕过。

    不过既然它仅仅是对于<script>进行过滤,我们可以使用其他表达式进行绕过、

    <img src=1 onerror=alert('hahah')>

    效果如下:

  • 相关阅读:
    实现个人域名跳转指定网站
    Latex数学符号表
    Python—Matplotlib基础学习
    Python—Pandas基础学习
    Python—Numpy基础学习
    程序员必读的计算机书籍(附资源分享)
    嗷嗷
    CTF之misc
    网安基础思维导图
    NAT、动态路由及实验
  • 原文地址:https://www.cnblogs.com/Hpineapple/p/12193610.html
Copyright © 2020-2023  润新知