CTFer成长之路之XSS的魔力
字数 1361 2025-08-11 11:39:36

XSS攻击实战教学文档

1. XSS基础概念

XSS (Cross-Site Scripting) 跨站脚本攻击是一种常见的Web安全漏洞,攻击者能够在受害者的浏览器中执行恶意脚本。本教学文档基于CTF实战题目,详细讲解6种不同场景下的XSS攻击方法。

2. 环境搭建

使用docker-compose快速搭建测试环境:

version: "3.2"
services:
  xss:
    image: registry.cn-hangzhou.aliyuncs.com/n1book/web-xss:latest
    ports:
      - 3000:3000

启动命令:

docker-compose up -d

3. 关卡详解

Level1 - 基础XSS注入

URL: /level1?username=xss

漏洞分析

  • 用户输入的username参数直接输出到页面中
  • 没有任何过滤或编码

攻击方法

<script>alert(/xss/)</script>

防御建议

  • 对用户输入进行HTML实体编码
  • 使用CSP策略限制脚本执行

Level2 - 转义绕过

URL: /level2?username=xss

漏洞分析

  • 输入被escape()函数编码
  • 但可以通过闭合JavaScript语句注入

攻击方法

';alert(1);'

原理

  • 闭合原始语句:var username = '';
  • 添加新语句:alert(1);
  • 注释剩余部分:''

Level3 - 转义字符绕过

URL: /level3?username=xss

漏洞分析

  • 单引号被反斜杠转义
  • 但可以使用HTML事件属性

攻击方法

<a onmouseover="alert(1)"> 或 

原理

  • 利用HTML标签的事件属性执行JS
  • 不需要闭合JavaScript语句

Level4 - URL重定向XSS

URL: /level4

漏洞分析

  • 通过jumpUrl参数控制重定向目标
  • 可以使用JavaScript伪协议

攻击方法

../level4?jumpUrl=javascript:alert(1)

原理

  • javascript:协议允许直接执行JS代码
  • 10秒后定时器触发重定向时执行

Level5 - 表单自动提交XSS

URL: /level5

漏洞分析

  • 需要两个参数:autosubmitaction
  • action参数可使用JavaScript伪协议

攻击方法

?autosubmit=1&action=javascript:alert(1)

原理

  1. autosubmit=1满足第一个条件判断
  2. action=javascript:alert(1)作为表单提交目标执行

Level6 - AngularJS模板注入

URL: /level6?username=xss

漏洞分析

  • 使用AngularJS 1.4.6模板引擎
  • 存在沙箱逃逸漏洞

攻击方法

?username={{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)

原理

  1. 修改charAt方法为join
  2. 通过$eval执行任意代码
  3. 绕过AngularJS沙箱限制

4. 防御措施总结

  1. 输入过滤:对所有用户输入进行严格过滤
  2. 输出编码:根据上下文使用HTML/URL/JavaScript编码
  3. CSP策略:实施内容安全策略限制脚本来源
  4. 框架更新:及时更新框架版本修复已知漏洞
  5. 避免eval:避免使用eval()setTimeout(string)等危险函数
  6. HTTP头设置:使用X-XSS-ProtectionX-Content-Type-Options

5. 扩展学习资源

  1. OWASP XSS防护手册
  2. AngularJS安全最佳实践
  3. CSP策略配置指南
  4. 现代Web应用安全开发规范

通过这6个关卡的实战练习,可以全面了解XSS攻击的各种形式和防御方法,建议在安全环境中进行实践测试。

XSS攻击实战教学文档 1. XSS基础概念 XSS (Cross-Site Scripting) 跨站脚本攻击是一种常见的Web安全漏洞,攻击者能够在受害者的浏览器中执行恶意脚本。本教学文档基于CTF实战题目,详细讲解6种不同场景下的XSS攻击方法。 2. 环境搭建 使用docker-compose快速搭建测试环境: 启动命令: 3. 关卡详解 Level1 - 基础XSS注入 URL : /level1?username=xss 漏洞分析 : 用户输入的username参数直接输出到页面中 没有任何过滤或编码 攻击方法 : 防御建议 : 对用户输入进行HTML实体编码 使用CSP策略限制脚本执行 Level2 - 转义绕过 URL : /level2?username=xss 漏洞分析 : 输入被 escape() 函数编码 但可以通过闭合JavaScript语句注入 攻击方法 : 原理 : 闭合原始语句: var username = ''; 添加新语句: alert(1); 注释剩余部分: '' Level3 - 转义字符绕过 URL : /level3?username=xss 漏洞分析 : 单引号被反斜杠转义 但可以使用HTML事件属性 攻击方法 : 原理 : 利用HTML标签的事件属性执行JS 不需要闭合JavaScript语句 Level4 - URL重定向XSS URL : /level4 漏洞分析 : 通过 jumpUrl 参数控制重定向目标 可以使用JavaScript伪协议 攻击方法 : 原理 : javascript: 协议允许直接执行JS代码 10秒后定时器触发重定向时执行 Level5 - 表单自动提交XSS URL : /level5 漏洞分析 : 需要两个参数: autosubmit 和 action action 参数可使用JavaScript伪协议 攻击方法 : 原理 : autosubmit=1 满足第一个条件判断 action=javascript:alert(1) 作为表单提交目标执行 Level6 - AngularJS模板注入 URL : /level6?username=xss 漏洞分析 : 使用AngularJS 1.4.6模板引擎 存在沙箱逃逸漏洞 攻击方法 : 原理 : 修改 charAt 方法为 join 通过 $eval 执行任意代码 绕过AngularJS沙箱限制 4. 防御措施总结 输入过滤 :对所有用户输入进行严格过滤 输出编码 :根据上下文使用HTML/URL/JavaScript编码 CSP策略 :实施内容安全策略限制脚本来源 框架更新 :及时更新框架版本修复已知漏洞 避免eval :避免使用 eval() 、 setTimeout(string) 等危险函数 HTTP头设置 :使用 X-XSS-Protection 和 X-Content-Type-Options 5. 扩展学习资源 OWASP XSS防护手册 AngularJS安全最佳实践 CSP策略配置指南 现代Web应用安全开发规范 通过这6个关卡的实战练习,可以全面了解XSS攻击的各种形式和防御方法,建议在安全环境中进行实践测试。