使用Web缓存投毒来攻击对资源导入的不安全处理
一些网站使用unkeyed标头动态生成用于导入资源的URL,例如外部托管的JavaScript文件。在这种情况下,如果攻击者将适当的标头的值更改为他们控制的域,则他们可能会操纵生成的URL指向自己的恶意JavaScript文件。
如果包含此恶意URL的响应被缓存,则攻击者的JavaScript文件将被导入并在其请求具有匹配的缓存键的任何用户的浏览器会话中执行。
攻击步骤
先对浏览器设置bp的代理,然后打开存在漏洞的网站,下面这个就是网站的首页:
这时可以在bp的HTTP history中看到我们访问的请求:
找到那个首页的请求,就是上图中URL那一栏只有一个 \
的那一个请求。然后将请求发送到bp的Repeater模块中。
然后到漏洞利用需要的网站上将我们的攻击代码存储起来,这个漏洞是当前网站加载其他网站的不安全js资源文件导致的。
可以看到,攻击payload是 alert(document.cookie)
,然后我们就可以将我们资源网站的网址提供给具有漏洞的网站了,我们在bp的repeater中修改我们的数据包如下:
可以看到我们第一次访问的时候,是服务器进行提供的服务,然后我们再次发送这个数据包,后可以看到 X-Cache
字段的变化,从 miss
变成了 hit
,hit
表示第二次返回的数据包是从缓存中发送的。
然后我们现在访问有漏洞的网站,就可以看到我们解决了这个实验:
这个漏洞用我们刚才的payload会看到用户的cookie会被弹出,如果换用更具危害性的payload,将会造成更严重的攻击。