本实验采用局域网模拟,通过修改本地HOSTS文件来模拟域名以及DNS欺骗。合法网站使用Linux CentOS7的apache服务器搭建,IP为192.168.1.113,HOSTS文件中加入192.168.1.113 www.cache-test.com来模拟域名。正常访问页面如下图所示,在离线时也能够正常刷新出来。

攻击者由安装有XAMPP服务器的桥接虚拟机表示,IP为192.168.1.154。攻击者可以访问本目录的demo_html.appcache获得缓存文件,在同名文件加入自己的恶意代码(这里是弹出hacked对话框),利用DNS欺骗、中间人等方式,这里将HOSTS文件更改为192.168.1.154 www.cache-test.com来模拟。通过两次更新manifest文件,让用户缓存恶意页面并使其manifest文件与合法网站保持一致,如图所示。

接下来,修改HOSTS文件为192.168.1.113 www.cache-test.com,模拟用户已经回到了安全的上网环境下,当用户再次访问该合法网站时,仍然出现的是上述攻击者的页面。通过Wireshark抓包可以看到,浏览器仅仅请求了demo_html.appcache,离线缓存攻击成功。注意在实验时需要排除浏览器本身缓存的影响,仅仅刷新页面会收到服务器返回的304响应。

由于时间有限,并没有用爬虫去找使用了HTML5离线缓存的网站,仅仅做了这种攻击的验证实验,若有大家可以推荐几个来测试。

主页htm:

<!DOCTYPE html>
<html manifest="demo_html.appcache">
<meta charset="UTF-8">
<body>
<script src="demo.js">
</script>
<p id="timePara"><button onclick="getDateTime()">提交</button></p>
<p>这是攻击者的页面,点击出现hacked</p><br/>
<p>在离线的状态下重新载入这个页面,页面也可以访问。</p>
</body>
</html>

demo_html.appcache:

CACHE MANIFEST
#2015-05-12 CACHE:
demo.js

demo.js:

function getDateTime()
{
alert('hacked!');
}

最新文章

  1. JSON字符串和对象 的转换
  2. n维数组实现(可变参数表的使用)
  3. jdbc向各种数据库发送sql语句
  4. java源代码跟踪
  5. Android adb push 和 pull操作
  6. 使用Python玩转WMI
  7. Linux下的动态连接库及其实现机制
  8. 拼接json示例 json分页并显示所有页码
  9. GPIO软件模拟I2C
  10. H5本地存储
  11. WIN7 Net Configuration Assistant打不开
  12. roundcute 添加修改密码插件
  13. light oj 1047-neighbor house
  14. myeclipse 10怎么安装与激活
  15. windows 10下通过python3.6成功搭建jupyter 服务器
  16. python接口自动化(三)--如何设计接口测试用例(详解)
  17. 一个简单的例子了解states
  18. python-面向对象入门
  19. python+opencv 运行环境搭建
  20. HDU 4733 G(x) (2013成都网络赛,递推)

热门文章

  1. Android的NDK开发(1)————Android JNI简介与调用流程
  2. 前端工具WebStorm好在哪里?(带详细破解教程)
  3. Java 类锁、对象锁、私有锁
  4. dbvisualizer 使用笔记
  5. style.height、offsetHeight、clientHeight、scrollHeight的差别
  6. NET C#转Java
  7. Oracle数据库分页查询的几种实现方法
  8. python 多线程拷贝单个文件
  9. WPF中选择文件及文件夹
  10. UML静态视图——类图、对象图、包图