Cache Poisoning via URL discrepancies

学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)

支持 HackTricks

这是对帖子 https://portswigger.net/research/gotta-cache-em-all 中提出的技术的总结,以执行缓存中毒攻击 利用缓存代理和 Web 服务器之间的差异。

此攻击的目标是 让缓存服务器认为正在加载静态资源,因此它会缓存该资源,而缓存服务器将路径的一部分存储为缓存键,但 Web 服务器响应解析另一个路径。Web 服务器将解析实际路径,这将加载一个动态页面(可能存储有关用户的敏感信息、恶意负载如 XSS 或重定向以从攻击者网站加载 JS 文件等)。

分隔符

URL 分隔符 根据框架和服务器的不同而有所不同,影响请求的路由和响应的处理。一些常见的源分隔符包括:

  • 分号:在 Spring 中用于矩阵变量(例如 /hello;var=a/world;var1=b;var2=c/hello/world)。

  • :在 Ruby on Rails 中指定响应格式(例如 /MyAccount.css/MyAccount)。

  • 空字节:在 OpenLiteSpeed 中截断路径(例如 /MyAccount%00aaa/MyAccount)。

  • 换行字节:在 Nginx 中分隔 URL 组件(例如 /users/MyAccount%0aaaa/account/MyAccount)。

可以通过以下过程找到其他特定的分隔符:

  • 步骤 1:识别不可缓存的请求,并使用它们监控带有潜在分隔符的 URL 的处理方式。

  • 步骤 2:将随机后缀附加到路径,并比较服务器的响应以确定字符是否作为分隔符。

  • 步骤 3:在随机后缀之前引入潜在分隔符,以查看响应是否发生变化,指示分隔符的使用。

规范化与编码

  • 目的:缓存和源服务器中的 URL 解析器规范化 URL,以提取路径以进行端点映射和缓存键。

  • 过程:识别路径分隔符,通过解码字符和删除点段提取和规范化路径。

编码

不同的 HTTP 服务器和代理(如 Nginx、Node 和 CloudFront)以不同的方式解码分隔符,导致 CDNs 和源服务器之间的不一致,这可能被利用。例如,如果 Web 服务器执行此转换 /myAccount%3Fparam/myAccount?param,但缓存服务器将路径 /myAccount%3Fparam 作为键保留,则存在不一致。

检查这些不一致的一种方法是发送请求 URL 编码不同字符,在加载路径时不进行任何编码,并检查编码路径的响应是否来自缓存响应。

点段

涉及点的路径规范化对于缓存中毒攻击也非常有趣。例如,/static/../home/index/aaa..\home/index,一些缓存服务器将这些路径缓存为自身作为键,而其他服务器可能解析路径并使用 /home/index 作为缓存键。 就像之前一样,发送这些请求并检查响应是否来自缓存有助于识别对 /home/index 的响应是否是请求这些路径时发送的响应。

静态资源

如果响应被识别为静态,多个缓存服务器将始终缓存该响应。这可能是因为:

  • 扩展名:Cloudflare 将始终缓存以下扩展名的文件:7z、csv、gif、midi、png、tif、zip、avi、doc、gz、mkv、ppt、tiff、zst、avif、docx、ico、mp3、pptx、ttf、apk、dmg、iso、mp4、ps、webm、bin、ejs、jar、ogg、rar、webp、bmp、eot、jpg、otf、svg、woff、bz2、eps、jpeg、pdf、svgz、woff2、class、exe、js、pict、swf、xls、css、flac、mid、pls、tar、xlsx

  • 可以通过使用分隔符和静态扩展强制缓存存储动态响应,例如请求 /home$image.png 将缓存 /home$image.png,而源服务器将响应 /home

  • 知名静态目录:以下目录包含静态文件,因此其响应应被缓存:/static、/assets、/wp-content、/media、/templates、/public、/shared

  • 可以通过使用分隔符、静态目录和点强制缓存存储动态响应,例如:/home/..%2fstatic/something 将缓存 /static/something,而响应将是 /home

  • 静态目录 + 点:请求 /static/..%2Fhome/static/..%5Chome 可能会按原样缓存,但响应可能是 /home

  • 静态文件:一些特定文件总是被缓存,如 /robots.txt/favicon.ico/index.html。这可以被滥用,例如 /home/..%2Frobots.txt,其中缓存可能存储 /robots.txt,而源服务器响应 /home

学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)

支持 HackTricks

Last updated