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
漏洞分析:
- 需要两个参数:
autosubmit和action action参数可使用JavaScript伪协议
攻击方法:
?autosubmit=1&action=javascript:alert(1)
原理:
autosubmit=1满足第一个条件判断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)
原理:
- 修改
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攻击的各种形式和防御方法,建议在安全环境中进行实践测试。