如何在macOS上监听单个应用HTTPS流量
|
副标题[/!--empirenews.page--]
写在前面的话如果你准备对网络协议进行逆向分析或进行任何与网络安全有关的活动时,可能是为了了解协议运行机制,也有可能是为了查找敏感信息,你或多或少都需要收集一定量的网络通信数据。在此之前,我们只需要打开... ![]() 写在前面的话 如果你准备对网络协议进行逆向分析或进行任何与网络安全有关的活动时,可能是为了了解协议运行机制,也有可能是为了查找敏感信息,你或多或少都需要收集一定量的网络通信数据。在此之前,我们只需要打开tcpdump就可以查看到所有的明文数据包流量了,但是现在几乎每一个人的网络流量都经过了加密处理,看样子之前的好日子一去不复返了。话虽如此,但现在仍然有很多用户的在线服务账号被黑,而他们的个人信息随后便会在暗网市场中出售,这又是为何呢? 如今,只要你打算做网络分析,那么你绝对需要HTTPS/SSL/TLS拦截的相关知识,这应该非常好理解吧?毕竟HTTPS/SSL/TLS的初衷就是加密你的通信。当然了,在拦截TLS通信之前,你还需要解决一些问题。首先,你必须理解中间人攻击(MitM)的工作机制。第二,你还需要了解证书的工作机制以及如何将其安装在你的系统中。第三,你还需要配置你的系统和特定应用来使用这些证书。最后,在真正拦截并显示网络通信数据之前,你还需要浏览一大堆代理文档和配置文件。 在这篇文章中,我将教会大家如何在macOS上监听和拦截单个应用的HTTPS加密流量。 概述 拦截通信流量的步骤大致如下: 安装工具 安装proxychains【GitHub主页】,使用命令“brew install proxychains-ng”,别忘了后面的“-ng”:
创建一个proxychains.conf文件,然后将下列代码添加进去:
其中最重要的一行是“http 127.0.0.1 8080”,这行代码可以让proxychains将应用中所有的流量重定向到127.0.0.1(端口号为8080),我们将用这个地址运行mitmproxy。 接下来,我们使用pip来安装mitmproxy:
运行mitmproxy之后,它还可以帮助我们在~/.mitmproxy中生成一个root证书:
安装证书的过程中我们有两个可选项。首先是clicky-clicky方法: 现在按下组合键Command+Space,然后输入“Keychain Access”。接下来,双击mitmproxy-ca-cert.pem进行安装,或者你也可以将它拖到KeychainAccess中。此时你应该可以看到下图所示的界面: ![]() ![]() 完成所有的配置之后,你的证书应该与下图所示相似: ![]() mitmproxy手册非常的棒,由此可以看出mitmproxy的开发人员在软件和辅助文档上下了苦功夫,所以在此我就不对其进行赘述了,因为帮助文档中已经把所有的东西都介绍清楚了,而且所有的操作都很简单。 当然了,如果你此前从未用过mitmproxy的话,你首先需要知道下面这几个快捷键: 测试 既然现在proxychains已经配置完成了(指向本地主机),证书也安装好了,mitmproxy也在运行了,那么接下来我们要测试一下我们的工具是否能够正常工作。
你测试之后就会发现,我们并没有得到任何的流量记录,因为系统App的SIP协议会直接屏蔽掉proxychains。此时你需要使用下面的命令来解决这个问题:
或者你也可以运行命令“brew install wget”,然后将curl替换为wget,因为wget并非系统App。 当你能够在mitmproxy中看到通信流量时,这也就意味着一切都差不多搞定了。但我个人还觉得不够,因为我还想代理一些Python代码。 我在req.py文件中添加了下面的代码:
接下来运行命令“pip install requests”,这个脚本的功能跟curl一样,但它能输出的数据更加丰富。接下来让我们测试一下: $proxychains4 python req.py # automatically finds proxychains.conf [proxychains]configfile found: /Users/caleb/secret-shit-omg/proxychains.conf [proxychains]preloading /usr/local/Cellar/proxychains-ng/4.12_1/lib/libproxychains4.dylib Traceback(most recent call last): File "req2.py", line 2, in我们可以修改代码并在requests.get中添加一个verify参数来指向你的证书,这样可以让requests模块信任你的mitmproxy证书:
如果你还遇到了其他问题的话,可以尝试下面的解决方案:
比如说,你还可以使用第一个版本的req.py(去掉verify参数)
|




