先登录自己账户抓包

将原有路径添加一段 1.css,查看返回包显示 x-cache

查看相应包发现 X-miss:hit 并返回了相同页面,说明此次请求走的是缓存

构造钓鱼链接,路径为添加了 1.css 的恶意 url,发送给受害者,受害者点击后服务器返回受害者账户信息并存储在缓存中

再次访问恶意 url,发现返回的页面变成了受害账户信息界面
2.利用分隔符差异

使用;作为分隔符,发包后与基础响应相同,说明服务器不解析;作为分隔符

再次发包,发现 x-cache:hit,说明走的是缓存路径,缓存将;作为了分割符,
3.利用目录解析差异,源服务解析,缓存服务不解析

记录原正常请求页面

通过爆破发现?分隔字符服务器不解析

在请求路径添加 a/..%2F,发包后正确返回跳转,说明服务器能正确解析

再在后面添加.css,期望 cdn 能识别并将其缓存,但相应包中显示没有走缓存,说明 cdn 没能正确识别解析

查看 http 历史记录,发现静态文件 js,css 文件等的 url 路径都是 resources 开头,cdn 可能识别路径是不是以此开头,是的话就走缓存

添加 resources 开头后发包,响应中出现了 x-cache,说明被 cdn 识别为走缓存
4.源服务不解析,缓存服务解析

依旧爆破出?不被源服务解析

向上题一样在 my-account 路径前添加 a/..%2f,这次显示路径没找到,说明源服务不解析,上题是源服务解析缓存不解析,那这次应该缓存解析

查看 http 历史记录依旧和上体一样需要是 resources 路径才能缓存,上题将/../放在原有路径前面,因为源服务能解析,但是这题源服务不解析,放前面就会导致路径错误,这次将/../放后面并在前面加上源服务不解析的分隔符

依旧开始爆破寻找可用分隔符,开始使用的/my-account$$/a 爆破结果除了?都返回 404,查看资料是;+/在某一层被当作 语法错误、路径分隔或被拒绝的形式,可能是框架对其进行校验,也可能是防火墙拦了

找到可利用分割符后再找可利用目录,发现源服务对../及其编码都不解析

把编码后的../放到后面,这里使用 rebots.txt cdn 会将其识别为缓存

写入利用程序,并在开始的 payload 后面加上一个?wd,?的作用是来破坏缓存形成唯一标识,防止缓存命中的是之前已存入缓存的不是管理员的资源,开始没用?一直返回的 winer 账号页面,beyond,细节

联系之前 csrf 的知识,一个安全的 csrf 令牌应该是服务器校验后通过镶嵌在前端页面中发送给客户端,csrf 攻击者无法读取受害者的页面内容也就无法获得令牌,但是利用 web 缓存漏洞我们却可以通过缓存读取受害者的界面从而拿到令牌

利用 bp 的 csrf poc 将令牌替换后完成攻击