如何搭建TCP代理(一)

来源:岁月联盟 编辑:猪蛋儿 时间:2020-03-16
要利用此行为并接收重新路由的数据,我们将需要在笔记本电脑上设置第二台服务器。这将是实际的代理服务器,它将负责从你的手机接收数据,阅读并打印数据,以便我们进行检查;最后将其转发给预定的收件人。
为什么我们不能只进行Burp操作?
实际上,像Burp这样的HTTP/S代理不需要做任何DNS欺骗来让你的智能手机向他们发送数据,但为什么我们还要进行TCP代理?
因为,像Burp这样的HTTP/S代理使我们广泛使用了HTTP协议的一些高级功能,这些功能的存在只是为了帮助代理,其中包括连接请求和HTTP 主机标头,稍后我会详细介绍。
现在所有的智能手机都利用了这些功能,因此可以很好地与HTTP/S代理一起工作。你的智能手机有一个系统设置,允许你指定一个代理,它应该使用所有的HTTP请求。为了使用像Burp这样的HTTP MITM代理,你首先要将笔记本电脑和智能手机连接到同一网络,然后告诉你的智能手机笔记本电脑的本地IP地址用作HTTP代理。你在笔记本电脑上打开Burp代理,智能手机就会乖乖地把所有的HTTP/S流量转发到笔记本电脑上。此时,Burp立即启动并运行。

但是,由于我们希望代理能够处理所有基于TCP的协议,而不仅仅是HTTP,因此我们无法利用任何特定于HTTP的功能,这就是为什么我们不得不求助于我们的DNS hijinks的原因。你遇到的其他基于TCP的协议可能具有其等效的代理友好功能,但同样也可能没有。此时你将无法知道正在检查的特定协议是否具有任何此类功能,直到你能够使用代理检查其请求,并且在检查了其请求之前,你将不知道如何代理其请求。
现在,我们知道了如何诱骗智能手机将TCP数据发送到笔记本电脑,现在,让我们看看如何使用它来做些事情。
代理服务器
现在要讲的是代理服务器本身,本文要讲的是一台在笔记本电脑上运行的服务器。它会接受来自你的智能手机的流量(但前提是在我们伪造的DNS服务器的帮助下),将其转发到目标应用的远程服务器,并将它得到的任何响应发送回你的智能手机
本文,我们将要解决的主要问题是确保我们的代理知道将智能手机流量转发到哪个远程服务器。像所有计算机程序一样,代理程序并不是很聪明。它们不知道如何处理收到的数据,而唯一知道这些数据的方法是明确地告诉他们。
比如,当你想和朋友共进晚餐时,你会给他们的手机号码发短信,说“今晚想去吃晚餐吗?”
现在,假设你有一位私人助理,你将雇用该助理来转发所有文本。过程如下:首先你将所有文本发送给该助理,然后它们代表你转发给你的朋友。如果你仅向该助理发送短信,说“今天晚上想吃晚饭吗?”他们是不知道将其转发给谁。有很多方法可以解决以上出现的代理问题。比如,你可以在消息后面附加一个标题“Send-To: 415-123-1234”,或者你可以提前制定一个规则,将所有晚餐建议始终发送给你的母亲。
同样,HTTP/S代理可以使用HTTP协议的特殊、特定于代理的特性轻松地解决这个路由挑战。不过,我们不能使用它们,因为我们希望我们的TCP代理完全与应用程序协议无关。
因此,我们要稍微作弊一下。我们将把一个主机名硬编码到我们的代理中,并告诉我们的代理将它接收到的所有数据转发给这个主机。这就好比告诉你的私人助理,把你今天发送的所有消息信都转发给你的一个好友或信任的人。
以上只是我的一个简单比喻,通常,你将使用代理检查每个应用发送的数据。此应用可能会将其所有有趣的数据发送到一个主机名,例如api.targetapp.com。
我们可以查看前一节中的虚假DNS服务器的日志,并查看你的智能手机尝试联系的主机列表。我们可以使用直觉和猜测来找出最有趣的主机名。例如,api.targetapp.com可能比stats.mobileanalytics.com更有趣。然后,我们可以将该主机名硬编码到我们的代理中,并指示我们的代理将它从你的智能手机接收到的所有数据发送到这个主机。
请注意,我们将需要配置伪造的DNS服务器,使其仅发送与代理程序将所有数据发送到的主机名相同的代理流量。对于所有其他主机名,我们的虚假DNS服务器应向真实DNS服务器发出真实DNS请求,并将此真实响应转发到你的智能手机。这将导致你的智能手机绕过我们的代理,将这些主机名的所有流量直接发送到正确的位置。如果我们不这样做,我们的代理最终可能会将敏感数据转发到错误的服务器。
 

上一页  [1] [2]