前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一款基于中间人攻击用于偷窥HTTPs网站流量的秘密代理工具

一款基于中间人攻击用于偷窥HTTPs网站流量的秘密代理工具

原创
作者头像
快乐咸鱼每一天
修改2022-11-16 22:56:54
4.3K0
修改2022-11-16 22:56:54
举报
文章被收录于专栏:从零搭建系列从零搭建系列

HTTPS 真的安全吗? 聊聊你可能不知道的中间人攻击

一款基于中间人攻击用于偷窥HTTPs网站流量的秘密代理工具

0x1 为什么是它?

我常用的网络分析工具有:FiddlerCharleswhistleWireSharkTcpdump

Fiddler,Charles,whistle 处理的网络协议集中在OSI 中的应用层,Wireshark 和 Tcpdump能捕获所有的网路流量数据,经常用户定位二进制协议的网络故障,因此不在本文的比较之列。 Fiddler和Charles分别适用于windows&macOS,都有各自优点。whistle的一个特点是跨平台,能在windows和macOS上运行,而且以MIT的协议进行开源。保持Fiddler 和Charles优点的同时,还增加了不少的特性。如果你有兴趣,可以继续往下阅读。

0x2 简介

whistle是基于Node实现的跨平台web调试代理工具,whistle与所有的web调试代理工具一样,主要功能是用于查看、修改HTTP、HTTPS、Websockt的请求响应或者作为HTTP代理服务器,但不同于Fildder+Willow、Charles通过断点的方式修改请求响应,whistle采用的是一种类似配置Hosts方式,通过配置修改请求响应数据,并且提供规则分组功能及通过域名、路径、正则三种匹配方式,特别的,针对终端调试提供了weinre,log等功能,并支持通过Node模块进行扩展。

0x3 抓包原理 Man-in-the-middle

Man-in-the-middle(中间人,简称为 MITM),能够与网络通讯两端分别创建连接,交换其收到的数据,使得通讯两端都认为自己直接与对方对话,事实上整个会话都被中间人所控制。简而言之,在真正的服务端看来,中间人是客户端;而真正的客户端会认为中间人是服务端。

实现中间人攻击有各种各样的手段,这里不展开讨论。一些常见的 HTTP/HTTPS 抓包调试工具,都是通过创建本地 Proxy 服务,再修改浏览器 Proxy 设置来达到拦截流量的目的,他们的工作原理与中间人攻击一致。我用过的这一类工具有:FiddlerCharleswhistle

本文主要讨论 HTTPS 中间人,简单示意如下:

代码语言:txt
复制
Server <---> Local Proxy <---> Browser
         ^                 ^
       HTTPS(1)          HTTPS(2)

上述 HTTPS(1) 连接,是中间人冒充客户端,与服务端建立的连接,由于 HTTPS 服务端一般不认证客户端身份,这一步通常没有问题。而对于 HTTPS(2) 连接来说,中间人想要冒充服务端,必须拥有对应域名的证书私钥,而攻击者要拿到私钥,只能通过这些手段:1)去网站服务器上拿;2)从 CA 处签发证书;3)自己签发证书。

要防范前两点,需要网站做好各个方面的安全防护,从主机安全到网站安全(避免私钥被盗),从域名解析安全到域名邮箱安全(避免攻击者重签证书)。而攻击者自己签发的证书,无法通过系统内置根证书的验证,默认无法用于中间人攻击。

对于 whistle 这一类调试工具来说,能够解密 HTTPS 流量的关键在于他们会往系统受信任的根证书列表导入自己的证书,这样他们的自签证书就能被浏览器信任。进入 whistle 设置中的「HTTPS」Tab,勾选相关功能后,就可以顺利解密和修改 HTTPS 流量。这时在浏览器中可以看到这样的证书链:

0x4 快速开始

  1. 安装node
代码语言:txt
复制
npm install -g node
  1. 安装whistle
代码语言:txt
复制
npm install -g whistle
  1. 启动whistle
代码语言:txt
复制
w2 start
whistle默认端口为8899,如果要修改端口号,可以这么启动:
w2 start -p 8888
重启whistle:
w2 restart
关闭whistle:
w2 stop
更多内容请查看命令行帮助:
w2 help
  1. 配置代理
代码语言:txt
复制
whistle需要手动配置浏览器代理或者系统代理(代理的ip为whistle所在机器的ip,如果是本机就填127.0.0.1;端口号为启动时设置的端口号,默认为8899),这里我们使用chrome的代理插件(SwitchyOmega)
  1. 信任证书使得能够解密https流量
代码语言:txt
复制
根据上面提到的原理,我们需要下载根证书,并且信任它,从来实现中间人攻击进行代理网络请求,从而实现我们的捕获数据解密

0x5 开始使用

在浏览器中输入 127.0.0.1:8899 #network 后,可以看到下面的界面

主要分为三个部分:

  • 菜单栏,包括网络数据的导入导出通常都为text或者saz格式,后者是兼容fiddler的导入导出
  • 主要内容,在这里面展示了我们发出的Http(s)请求,每一个条目都包含了
  • 点击主要内容中的任一个条目,在右侧会显示对应条目的请求和响应

0x6 场景一:捕获手机的网络数据包

如果我们需要在手机上对app进行抓包,那么同样的需要手机信任中间人生成的证书,在safari中打开地址http://192.168.0.4:8899这个地址,找到https选项,下载根证书并且信任它。 需要注意的是请确保你的电脑和手机处于同一个局域网。设置完成后,在手机上访问因特网的流量都会被安装在电脑上的wistle接管。所有的Http(s)流量在这个工具下一览无余。你可以尽情发挥你的想象力,去做那些富有创意的事情。祝你好运

0x7 场景二 : 调式websocket网络流量

除了基本的HTTP协议的流量检测,同时还支持websocket协议,在浏览器中打开ws测试网站,并发送一些文本消息.

然后回到最开始的流量监测tab页面,查看右侧的Frames,你会发现你刚刚发生的消息在这里全部显示出来了。

0x8 场景三: 重放数据

选中左侧条目,拖动到右侧,然后就可以在右边红色方框中看到选中数据包的详情,我们可以在Composer菜单项中修改请求体,对改次请求就行重放。这个方法常用于软件开发过程中的网络接口调试使用,尤其在操作路径很长的场景中,有了这个工具,我们可以很便捷的从中间步骤开始测试,而不是一次失败后,全部重新开始。某些情况下,还可以辅助系统测试专家对网站安全进行测试评估,通过修改参数的方式,验证网站的安全性。

0x9 场景四: 在线页面注入调式

0xa 更多资源

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HTTPS 真的安全吗? 聊聊你可能不知道的中间人攻击
  • 0x1 为什么是它?
  • 0x2 简介
    • 0x3 抓包原理 Man-in-the-middle
    • 0x4 快速开始
    • 0x5 开始使用
    • 0x6 场景一:捕获手机的网络数据包
    • 0x7 场景二 : 调式websocket网络流量
    • 0x8 场景三: 重放数据
    • 0x9 场景四: 在线页面注入调式
    • 0xa 更多资源
    相关产品与服务
    网站建设
    网站建设(Website Design Service,WDS),是帮助您快速搭建企业网站的服务。通过自助模板建站工具及专业设计服务,无需了解代码技术,即可自由拖拽模块,可视化完成网站管理。全功能管理后台操作方便,一次更新,数据多端同步,省时省心。使用网站建设服务,您无需维持技术和设计师团队,即可快速实现网站上线,达到企业数字化转型的目的。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档