1. 项目概述从靶场实战到存储型XSS的深度剖析如果你正在学习网络安全尤其是Web安全那么DVWADamn Vulnerable Web Application这个靶场你一定不陌生。它就像是一个专门为安全爱好者搭建的“练功房”里面包含了SQL注入、文件上传、XSS等十几种常见的Web漏洞。今天我们不谈别的就聚焦在其中一个既经典又极具危害性的漏洞上存储型XSSStored Cross-Site Scripting。为什么单独拎出来讲因为相比反射型XSS存储型XSS的危害等级要高得多。反射型XSS就像一把需要你亲手递给攻击者的刀攻击链依赖用户点击一个精心构造的恶意链接。而存储型XSS则像是攻击者提前在网站的水源里下了毒所有后续来喝水的用户都会中招攻击是持久且广泛的。DVWA的XSSStored模块就完美模拟了这种场景一个简单的留言板或评论系统用户输入的内容被永久存储在服务器数据库里并在其他用户访问页面时被加载执行。网上有很多“DVWA通关教程”告诉你每一步点哪里、输入什么Payload。但这远远不够。知其然更要知其所以然。这篇文章的目的就是带你超越简单的“通关”深入理解每一次攻击背后的代码逻辑、防御机制的演变以及我们作为攻击者或防御者的思考过程。我们会从Low级别毫无防护的“裸奔”状态开始一步步闯过Medium、High级别的防线最终分析Impossible级别是如何从根本上杜绝漏洞的。在这个过程中你会掌握XSS Payload的构造技巧、前端的绕过思路以及最重要的——建立一种面对黑盒目标时如何系统性地测试和挖掘XSS漏洞的思维模型。2. 靶场环境与攻击核心原理拆解2.1 DVWA环境搭建与核心模块定位在开始“攻击”之前我们必须先有一个稳定、可控的“战场”。DVWA的搭建并不复杂通常需要一个集成了Apache、MySQL、PHP的环境比如XAMPP、PHPStudy或直接使用Kali Linux自带的LAMP堆栈。这里不赘述详细的安装步骤但强调几个关键点这些点往往是被新手忽略的“坑”PHP版本兼容性DVWA对PHP版本有一定要求建议使用PHP 5.4 - 7.x的版本。PHP 8.x可能会导致部分功能异常。在config/config.inc.php文件中你需要正确配置数据库连接信息。一个常见的错误是MySQL密码为空或使用了错误的数据库名默认是dvwa。安全等级设置登录DVWA后默认账号admin/password务必在左侧“DVWA Security”选项卡中将安全级别设置为Low、Medium、High或Impossible。这个设置会全局影响所有漏洞模块的服务器端代码是我们进行分级挑战的基础。练习时请从Low开始逐步提升。XSSStored模块入口在左侧导航栏找到“XSSStored”。这个模块模拟了一个简单的留言板。页面通常包含两个部分一个表单让你输入“Name”和“Message”和一个下方显示所有历史留言的区域。你的攻击目标就是通过这个表单注入恶意脚本并让它持久化存储在他人查看留言板时自动执行。注意强烈建议在虚拟机或隔离的网络环境中搭建和练习DVWA。虽然它是故意设计为有漏洞的但错误的配置或随意的网络暴露仍可能带来不必要的风险。2.2 存储型XSS攻击原理深度解析要发动有效的攻击必须彻底理解攻击的原理。存储型XSS的攻击链可以清晰地分为四个阶段输入注入攻击者在一个允许用户提交内容并存储的功能点如留言、评论、个人简介、商品评价中提交一段包含恶意JavaScript代码的输入。这段输入不仅仅是简单的文本而是被精心构造的Payload。持久化存储服务器端程序在没有进行充分过滤和验证的情况下直接将用户输入包含Payload存入数据库。这是漏洞形成的根本原因。恶意代码加载当其他正常用户受害者访问包含这些存储数据的页面时例如查看留言板Web应用程序会从数据库中读取数据并将其作为页面内容的一部分通常是HTML的一部分发送到受害者的浏览器。客户端执行受害者的浏览器接收到服务器响应将其渲染为HTML。由于Payload被当作合法的页面内容浏览器会忠实地执行其中的JavaScript代码。至此攻击完成。关键在于第3和第4步代码的执行环境是受害者的浏览器且其权限与目标网站当前会话的权限相同。这意味着恶意脚本可以盗取Cookie通过document.cookie获取用户的会话标识从而劫持用户账户。模拟用户操作发起网络请求如转账、改密、发帖即CSRF攻击。钓鱼在页面中伪造登录框诱骗用户输入敏感信息。破坏页面篡改页面内容进行挂马或跳转到恶意网站。理解这个原理后我们就能明白防御的核心思路在数据存储前输入验证/过滤或数据输出前输出编码进行严格处理确保用户输入的数据始终被当作“文本”来处理而不是可以被浏览器解析执行的“代码”。3. 分级攻击实战从Low到High的攻防博弈接下来我们进入实战环节。我们将安全级别从Low逐步调到High观察防御是如何层层加码的而我们作为攻击者又该如何见招拆招。3.1 Low级别毫无防护的“裸奔”状态将DVWA安全级别设置为Low进入XSSStored模块。攻击过程与Payload分析在Name或Message输入框中直接输入经典的XSS测试Payloadscriptalert(XSS)/script。提交后你会发现页面弹出了警告框并且这条“留言”被成功保存。刷新页面或新开一个浏览器访问该页面警告框依然会弹出。这说明我们的脚本被原封不动地存储并输出了。背后的代码逻辑源码分析查看Low级别的服务端源码通常位于vulnerabilities/xss_stored/source/low.php关键部分如下?php if( isset( $_POST[ btnSign ] ) ) { // 获取输入 $message trim( $_POST[ mtxMessage ] ); $name trim( $_POST[ txtName ] ); // 直接存入数据库没有任何过滤 $query INSERT INTO guestbook ( comment, name ) VALUES ( $message, $name );; $result mysqli_query($GLOBALS[___mysqli_ston], $query ) or die( pre . ((is_object($GLOBALS[___mysqli_ston])) ? mysqli_error($GLOBALS[___mysqli_ston]) : (($___mysqli_res mysqli_connect_error()) ? $___mysqli_res : false)) . /pre ); } ?以及输出部分的代码?php // 从数据库查询留言 $query SELECT * FROM guestbook;; $result mysqli_query($GLOBALS[___mysqli_ston], $query ) or die( pre . ((is_object($GLOBALS[___mysqli_ston])) ? mysqli_error($GLOBALS[___mysqli_ston]) : (($___mysqli_res mysqli_connect_error()) ? $___mysqli_res : false)) . /pre ); while($row mysqli_fetch_assoc($result)) { // 直接输出没有任何编码 echo div class\message\; echo pstrong{$row[name]}/strong: {$row[comment]}/p; echo /div; } ?漏洞根因代码对用户输入$message和$name没有进行任何过滤或编码直接拼接SQL语句存入数据库又从数据库直接取出拼接进HTML页面。我们的script标签被浏览器当成了合法的HTML标签解析并执行。实操心得 在Low级别你可以尝试各种基础的XSS Payload理解不同上下文Name输入框通常输出在strong标签内属于HTML标签内部HTML上下文。Message输入框输出在p标签内也是HTML上下文。 你可以测试img srcx onerroralert(1)、svg onloadalert(1)等它们都能成功。这里的关键是建立“输入点-输出点”的对应关系并确认输出上下文。3.2 Medium级别初级的过滤与绕过将安全级别调整为Medium再次尝试之前的Payloadscriptalert(XSS)/script。你会发现提交后页面没有弹窗Payload似乎被“吃掉”了。防御机制分析查看Medium级别的源码medium.php关键过滤代码如下?php if( isset( $_POST[ btnSign ] ) ) { $message trim( $_POST[ mtxMessage ] ); $name trim( $_POST[ txtName ] ); // 对$message和$name进行了简单的字符串替换过滤 $message strip_tags( addslashes( $message ) ); $name str_replace( script, , $name ); $name str_replace( /script, , $name ); // 存入数据库 $query INSERT INTO guestbook ( comment, name ) VALUES ( $message, $name );; $result mysqli_query($GLOBALS[___mysqli_ston], $query ) or die( pre . ((is_object($GLOBALS[___mysqli_ston])) ? mysqli_error($GLOBALS[___mysqli_ston]) : (($___mysqli_res mysqli_connect_error()) ? $___mysqli_res : false)) . /pre ); } ?代码解读strip_tags()这是一个PHP函数用于剥去字符串中的HTML和PHP标签。它被用在了$message上。这意味着如果你在Message框里输入scriptalert(1)/scriptstrip_tags()会直接移除script和/script标签只留下alert(1)文本从而失效。str_replace(‘script’, ‘’, $name)这是一个非常初级、存在明显缺陷的黑名单过滤。它仅将字符串“
企业数字化 ERP 产品动态
相关推荐
Windows 11本地部署GLM-5.2大模型并集成智能体与知识库实战指南 🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 在实际 AI 应用开发中,将大语言模型(LLM)本地化部署并集成智能体(Agent)与… · 2026/8/3 8:17:17
基于YOLOv11的3D打印缺陷自动检测系统开发 1. 项目概述在3D打印领域,打印质量直接影响最终产品的可用性和美观度。传统的人工检测方式效率低下且容易遗漏细微缺陷。我们基于YOLOv11深度学习框架开发了一套3D打印缺陷自动识别系统,能够实时检测Spaghetti(杂乱堆积)、Zits&am… · 2026/9/18 8:55:20
Boss-Key:应对突发打扰的智能隐私守护方案 Boss-Key:应对突发打扰的智能隐私守护方案 【免费下载链接】Boss-Key 老板来了?快用Boss-Key老板键一键隐藏静音当前窗口!上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key
你正在专注地浏览一份重要资料&… · 2026/9/10 18:23:28
CLLC谐振变换器设计:基波分析、参数优化与MATLAB仿真 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 5:06:25
机器学习之Selenium(Machina Learning about Selenium) 四、爬虫自动化——Selenium1、Selenium基础知识与元素定位1.1 Selenium介绍在之前的文章中我们能够深刻学习到使用 request 库进行网页爬取。requests 只能获取服务器返回的 HTML 源码,但是现在网页越来越复杂,很多东西都是通过 JavaScript 进行动态加载… · 2026/9/27 5:06:25
Emerson Ovation Compact I/O继电器底座1C31219G01技术解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 5:06:25
Windows权限提升完全手册:从信息收集到SYSTEM权限的完整路径 📌写在前面
“Windows怎么提权?”“有了普通用户怎么变SYSTEM?”“有哪些常见的提权漏洞?”
在渗透测试中,拿到初始shell往往只是低权限用户。要真正控制系统、横向移动、窃取凭据,就需要提升权限到SYSTEM或… · 2026/9/27 5:06:25
RK3588平台RTMPose模型部署与推理优化实践指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 5:06:19
消防主机协议列表PDF解析:从寄存器提取到Modbus驱动实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 5:06:13
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01