DVWA-Reflected XSS

本文详细分析了三种不同级别的反射型XSS漏洞,包括代码结构、防护机制及绕过方法,如双写绕过、大小写混淆绕过,并探讨了在高难度级别下如何利用img标签事件触发XSS攻击。

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

Reflected XSS Source(Low)

vulnerabilities/xss_r/source/low.php

代码分析

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

?>

$_GET[ ‘name’ ]无任何过滤

漏洞利用

输入,成功弹框:
http://127.0.0.1/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Ealert%28233%29%3C%2Fscript%3E在这里插入图片描述

Reflected XSS(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>删除,这种防护机制是可以被轻松绕过的。

漏洞利用

双写绕过

输入<sc<script>ript>alert(233)</script>,成功弹框:
在这里插入图片描述

大小写混淆绕过

输入<ScRipt>alert(233)</script>,成功弹框:
在这里插入图片描述

Reflected XSS(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>"; 
} 

?>   

$name = preg_replace( ‘/<(.)s(.)c(.)r(.)i(.)p(.)t/i’
使用黑名单过滤输入,preg_replace()函数用于正则表达式的搜索和替换,这使得双写绕过、大小写混淆绕过(正则表达式中i表示不区分大小写)不再有效。

漏洞利用

虽然无法使用<script>标签注入XSS代码,但是可以通过img、body等标签的事件或者iframe等标签的src注入恶意的js代码。
输入<img src=1 onerror=alert(/233/)>,成功弹框:
在这里插入图片描述

<think>好的,我现在要解决用户在DVWA中进行XSS攻击时无法弹窗的问题。首先,我需要回忆一下DVWA的基本设置。DVWA(Damn Vulnerable Web Application)是一个用于安全测试的环境,用户通常会在不同的安全级别下进行练习,比如Low、Medium、High。XSS攻击弹窗不出现,可能有多种原因。 首先,用户可能是在较高的安全级别下进行测试。比如,在Medium或High级别下,DVWA会有一些防护措施,比如过滤<script>标签或对输入进行转义。这时候,我需要检查当前的安全级别,并建议用户将其调至Low级别进行测试。 其次,输入的payload可能被过滤或处理了。例如,在Medium级别中,可能会使用str_replace函数替换<script>标签。这时候,用户需要尝试其他标签,比如<img src=x onerror=alert(1)>,或者使用大小写混淆绕过过滤,比如<ScRiPt>alert(1)</ScRiPt>。 另外,浏览器的安全机制也可能阻止弹窗。比如,现代浏览器对反射型XSS可能会有内置的保护措施,特别是如果URL中包含alert()这类常见函数。这时候,可以尝试换用其他函数,比如prompt()或confirm(),或者使用编码绕过,比如将alert(1)转换成String.fromCharCode(97,108,101,114,116,40,49,41)然后通过eval执行。 还需要检查是否有输入长度限制。某些情况下,DVWA的输入字段可能有长度限制,导致payload被截断。这时候,可以尝试缩短payload,或者通过浏览器开发者工具移除输入框的maxlength属性。 此外,确保用户是在正确的模块下测试。DVWA中有反射型XSSReflected)和存储型XSS(Stored),如果用户在错误的模块输入payload,也可能无法触发弹窗。需要确认用户是否在正确的页面提交payload。 最后,可能需要查看服务器端的代码,了解具体的过滤机制。例如,在High级别的DVWA中,可能会使用正则表达式彻底过滤脚本标签,这时候需要更高级的绕过技巧,比如事件处理程序或使用其他HTML元素。 总结下来,可能的解决步骤包括:检查安全级别、尝试不同payload、绕过浏览器保护、处理输入限制、确认测试模块,以及分析服务器端过滤逻辑。接下来需要将这些步骤整理成用户友好的解答,并提供具体的示例和引用相关知识点。</think>### DVWAXSS攻击无法弹窗的解决方法 在DVWA中遇到XSS攻击无法弹窗的问题,通常与安全级别设置、输入过滤或浏览器防护机制有关。以下是逐步排查和解决的方法: --- #### **1. 确认DVWA安全级别** DVWA的安全级别(Low/Medium/High)直接影响XSS漏洞的利用难度: - **Low级别**:无防护,直接使用`<script>alert(1)</script>`即可弹窗。 - **Medium/High级别**:可能过滤`<script>`标签或转义特殊字符[^1]。 **操作步骤**: 1. 登录DVWA,点击左侧`DVWA Security`。 2. 将安全级别调整为**Low**后重试。 --- #### **2. 尝试绕过过滤的Payload** 若安全级别为Medium或High,需使用绕过技巧: - **Medium级别**:过滤`<script>`标签,但未处理大小写或事件属性。 ```html <!-- 使用大小写混淆 --> <ScRiPt>alert(1)</ScRiPt> <!-- 使用HTML事件属性 --> <img src=x onerror=alert(1)> ``` - **High级别**:可能彻底过滤脚本标签,需利用其他方式: ```html <!-- 使用伪协议或编码绕过 --> <a href="javascript:alert(1)">Click</a> <svg onload=alert(1)> ``` --- #### **3. 检查浏览器防护机制** 现代浏览器(如Chrome)可能拦截反射型XSS弹窗: - **解决方法**: 1. 改用`prompt()`或`confirm()`代替`alert()`: ```html <script>prompt(1)</script> ``` 2. 使用编码绕过检测: ```html <script>eval(String.fromCharCode(97,108,101,114,116,40,49,41))</script> ``` 3. 更换浏览器(如Firefox)测试。 --- #### **4. 处理输入长度限制** 某些DVWA输入字段(如存储型XSS)有长度限制: - **操作步骤**: 1. 打开浏览器开发者工具(F12)。 2. 找到输入框,删除`maxlength`属性后提交长payload。 --- #### **5. 确认测试的XSS类型** DVWA包含两种XSS模块: - **反射型XSSReflected)**:Payload直接显示在URL中,需通过输入框提交。 - **存储型XSS(Stored)**:Payload需提交到数据库(如留言板),刷新页面后触发。 **示例**(存储型XSS): ```html <textarea><svg onload=alert(1)></textarea> ``` --- #### **6. 查看服务器端过滤逻辑** 分析DVWA源码(以反射型XSS为例): - **Low级别**:无过滤: ```php <?php echo $_GET['name']; // 直接输出输入内容 ?> ``` - **Medium级别**:部分过滤: ```php <?php $name = str_replace('<script>', '', $_GET['name']); // 替换<script>标签 echo $name; ?> ``` - **High级别**:严格过滤: ```php <?php $name = preg_replace('/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET['name']); // 正则过滤 echo $name; ?> ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值