Cache Poisoning via URL discrepancies
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
这是对帖子 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)