缓存投毒,听起来就是寻找和利用都很困难的一类漏洞利用。但在了解了原理以及实际体验过之后,你会发现,过程很神奇,结果很美好~ 这篇文章算是对缓存投毒的一个小总结,以便后面的复习。内容浅尝即止,师傅们轻喷。
文章一共分为以下几个部分:
什么是缓存投毒?
缓存投毒的发现与利用
一、什么是缓存投毒?
什么是Web缓存:
缓存位于服务器和用户之间,通常在固定的时间内保存(缓存)对特定请求的响应。如果另一个用户在这段时间内发送了同样的请求,则缓存会直接提供响应的副本(缓存)给用户,而无需与服务器直接进行交互。通过减少服务器对重复请求进行处理的次数,来减轻服务器的负担。使用CDN(内容分发 *** )就可以达到这样的目的。关于CDN与缓存之间的理解,参考:CDN与缓存的归纳理解
如下图就是同时间的用户访问同一个内容时,获取资源的过程。
那CDN怎么知道用户要访问的是同一个页面呢?(实际上除了CDN还有其他的缓存技术,这里以CDN为例,其他的暂不了解)
当缓存接收到HTTP请求的时候,它会匹配vary头部指定的HTTP HEADER来进行判断。当指定的头部与缓存中的数据匹配时,则提供缓存的内容。如果不匹配,就直接与服务器交互。这些指定的头部被称作:缓存键 “cache key”。其他的头部就是非缓存键。
参考:HTTP请求的响应头部Vary的理解
缓存投毒的原理
在web缓存部分我们知道,当一个页面的内容被缓存后,其他用户访问这个页面时会接收到同样的内容。如果在缓存的过程中,存入了有害的内容,比如存入了一个带有XSS payload的页面。其他用户访问时,就会受到XSS漏洞的攻击。这就是缓存投毒。
那什么情况下可以在缓存中写入一个带有XSS的页面呢?或者说其它对用户有害的内容?
二、缓存投毒的发现与利用
这个部分的内容,在参考的文章当中已经有比较完整的步骤描述。大致可以分为以下几个步骤:
1.判断哪些非缓存键会影响页面内容
任何的缓存投毒都依赖于非缓存键,所以我们在一开始就要判断哪些HTTP头部属于缓存键,哪些不属于。再通过修改或添加HTTP头部来判断哪些头部会引起页面内容的变化。常用的两种方式:
手动修改或添加HTTP头部,指定随机字符来判断头部是否影响页面内容
使用Brupsuite插件Param Miner来自动判断
2.构造内容引起服务器端的有害响应
针对不同的非缓存键,我们需要知道哪些非缓存键会导致页面返回有害的内容。举一个例子:页面中js链接的域名是通过获取HTTP头部中的“X-Forwarded-Host”字段来设置的。而服务器不会将这个字段作为缓存键,那么这个字段就可以利用。
3.获取响应,使有害内容被缓存
通过构造有害的内容,访问页面,获取响应。就会将有害的内容存入缓存中。需要注意的是,页面是否会被缓存受到文件扩展名、内容类型、url路由、状态代码和响应标头的影响。在测试的会比较麻烦。
看完上面这几个步骤,应该对投毒的过程有了一个大概的了解。现在我们通过几个实验例子来学习具体的缓存利用方式。这里的实验环境为Brupsuite社区的缓存投毒实验案例。目的都是通过缓存投毒来导致XSS漏洞。
前言 内网渗透时,获得主机管理员权限后,通常会抓取用户的明文密码或hash,进行pth攻击。 大部分情况会遇到防护软件,常规抓取方法失效,因此需要对防护进行绕过。 Procdump.exe Proc...
CDN与缓存的归纳理解 缓存是什么 缓存是一个到处都存在的用空间换时间的例子。通过使用多余的空间,我们能够获取更快的速度。 我们通常意义上说的缓存主要包含两部分。第一个是用户浏览器端的缓存,第二个是服...
Linux编程 点击右侧关注,免费入门到精通! 作者丨Ruhenghttps://www.jianshu.com/p/072587b47515 在日常工作中,经常会...
凯文·米特尼克 米特尼克曾被美国司法部称为“美国历史上被通缉的头号计算机罪犯”,他是好莱坞两部反映黑客生活的电影的原型人物。他的最早黑客行为是破解洛杉矶的 公交车打卡系统,因此得以免费乘车。他第...
无锡市公安局7日召开记者招待会,公布了该市警察揭发的全国首起“暗网”平台事件的详情。 在此事件中,男王某在“黑暗网”上制作淫秽网站,散播淫秽物品获利,被警察逮捕时,网站注册会员已达6万多人。 “暗网”...
CNVD-IDCNVD-2020-22665 公开日期:2020-04-13 危害级别:中 (AV:N/AC:L/Au:S/C:P/I:P/A:N) 影响产品:WordPress Contact Fo...