如何搭建TCP代理(二)

来源:岁月联盟 编辑:猪蛋儿 时间:2020-03-16
随着你的智能手机和我们的代理之间的TLS连接成功构建,我们的系统的其余部分将完全按照计划工作。此时,TCP代理就已经完成。
TCP代理的详细过程
该过程分为3个步骤:
1. 伪造的DNS服务器,在笔记本电脑上运行的DNS服务器,欺骗你的智能手机将其TCP流量发送到笔记本电脑
2. 代理服务器,在笔记本电脑上运行的服务器,可以处理智能手机和远程服务器之间的流量;
3. 伪造的证书颁发机构,一种生成智能手机将信任的TLS证书的工具。
完成以上3个步骤后,你将拥有一个可以正常工作的TCP代理,可用于检查和分析任何基于TCP的协议。我已经使用Python3为每个部分编写了示例代码。虽然这也意味着你最好使用Python3,但是用另一种语言实现TCP代理也是完全可行的。
伪造DNS服务器
伪造DNS服务器的代理将能够处理任何基于TCP的协议,而不仅仅是HTTP。
接下来,我们将构建一个在笔记本电脑上运行的虚假DNS服务器。我们将配置你的智能手机,使其在需要使用DNS将主机名解析为IP地址时使用该服务器。当你的智能手机向我们的服务器询问目标应用程序的主机名的IP地址(例如api.targetapp.com)时,我们的服务器将处于说谎状态。它会返回你笔记本电脑的本地IP地址,而不是返回目标应用程序的真实IP地址。

此时,你的智能手机将信任我们服务器的响应,并误认为你的笔记本电脑的本地IP实际上是api.targetapp.com的正确IP地址。现在,只要你的智能手机希望向api.targetapp.com发送一些数据,它就会将其发送到你的笔记本电脑,而不是真正的TargetApp服务器。这将完成你的智能手机数据必须通过我们的代理系统进行的第一跳。在接下来,我们将构建一个代理服务器,以监听并利用此重新路由的数据。
深入了解DNS
在开始使用我们的虚拟DNS服务器之前,我们将使用一些现有的工具来详细研究一些真实的DNS请求。我们还将手工制作和欺骗一些DNS响应,证明你的手机确实会信任并响应包含笔记本电脑发送的虚假的DNS响应。尽管我们的代理经过明确设计,能够处理非HTTP TCP流量,但我们将首先使用HTTP请求对其进行测试,不过,这纯粹是为了简单起见。通常,让智能手机发出HTTP请求要比其他任何类型的TCP请求都容易,因为触发一个网站所需要做的就是访问网站。不过我们的代理不是“non-HTTP”,而是“non-HTTP-specific”。
如果你尚未下载,请下载Wireshark和netcat(nmap的一部分)。Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Netcat被称为网络安全界的瑞士军刀,netcat可以用于监控/扫描网络端口,它应用最多的情况是后门程序。
将智能手机的DNS请求发送到笔记本电脑
首先,让你的智能手机将DNS请求发送到你的笔记本电脑,而不是将当前配置为使用的任何真实DNS服务器(例如Verisign,Google或OpenDNS)发送给你。
首先,请确保你的笔记本电脑和智能手机连接到同一无线网络。
接下来,通过运行一个类似 ifconfig | grep 'en0' -A 2 | grep netmask的终端命令来查找你的笔记本电脑的本地IP地址,如果你使用的是Windows系统,请尝试ipconfig。该命令应将笔记本电脑的本地IP地址打印到终端上,这可能看起来像192.168.x.y。
现在找到你的智能手机的DNS设置页面,此时你可以更改你的智能手机向其发送DNS请求的DNS服务器。将DNS服务器IP地址更新为你刚刚发现的笔记本电脑的本地IP地址,尝试访问一些网站并使用一些应用程序,但最终你会发现这些网站和程序都无法工作。
此时,你的智能手机已停止运行,因为它已开始将其所有DNS请求发送到你的笔记本电脑。由于你的笔记本电脑不知道如何处理这些请求,所以它会将它们丢弃而不产生响应。这意味着你的智能手机无法将主机名解析为IP地址。尽管它在技术上仍可以连接到互联网,但我们已经打破了它的一个主要机制来解决如何使用它。互联网上的路由是使用IP地址而不是主机名完成的。互联网主干网不知道怎么去targetapp.com,就像你的出租车司机不知道怎么去你的约会对象的家一样。
探测DNS请求
使用Wireshark探测DNS请求
我们已经成功断开了你的手机与网络的连接,我觉得这是个好消息,因为它表明你的手机已开始向笔记本电脑发送DNS请求。现在,让我们使用数据包嗅探器Wireshark来检查你的笔记本电脑的网络流量,并查找你的手机命中注定的DNS请求,看看我的判断是否正确。我们可以确认它们确实被发送到你的笔记本电脑,并且你的笔记本电脑目前没有向你的手机发送任何DNS响应。
在诱骗你的智能手机之前,让我们先进行一次基本检查以确保Wireshark正常运行。首先,在笔记本电脑上打开Wireshark,并使用udp端口53来运行它。DNS请求通过端口53上的UDP协议发送,这将屏蔽掉我们不感兴趣的网络流量。现在,在笔记本电脑上,可以访问任何网站。你应该在Wireshark中看到该网站的主机名的DNS请求和响应,这是你的笔记本电脑向真正的DNS服务器发出自己的DNS请求,以便它可以将浏览器(例如robertheaton.com)的HTTP请求从你的浏览器发送到正确的IP地址。

DNS请求

DNS响应
如果这不起作用,那么也可以尝试其他一些网站。你的笔记本电脑可能最近向robertheaton.com发出了DNS请求,并且可能已缓存收到的响应。
现在,让我们查看手机中的一些DNS请求。首先,让我们调整Wireshark过滤器。 udp端口53过滤器同时显示发送到笔记本电脑和由笔记本电脑发送的DNS请求。。通过处理,我们只显示通过你的手机发送到你的笔记本电脑的请求。将Wireshark过滤器更新为udp端口53 && dst $ YOUR_LAPTOPS_IP。在你的智能手机(其DNS服务器仍设置在笔记本电脑上)上,访问另一个网站。不过,由于DNS缓存,你可能不得不多尝试几次。你应该在Wireshark中看到针对此网站主机名的DNS请求,并将其UDP数据包的“目标IP”字段设置为你的笔记本电脑。如果你这样做,则可以确认你的手机正在与笔记本电脑通话,这是一个巨大的诱骗方法的突破!
但是,Wireshark不会显示相应的DNS响应。这是因为我们尚未告知你的笔记本电脑,当它在端口53上收到UDP数据包时,会发生什么?
在开始对笔记本电脑进行设置之前,让我们使用Netcat从另一个角度来看一下DNS流量。
 

上一页  [1] [2]