用Charles Proxy骇客

今天,让我们谈谈“中间人”方法, 方法允许任何人跟踪智能手机或计算机上的浏览器发送和接收的所有流量。 有时,您无法将所需的数据放入应用程序中,但是如果您可以在将浏览器或应用程序接收到的内容发送到智能手机之前对其进行修改,则可以使用一种非常方便的方法来测试点播数据。

这就是我将在本文中通过实际示例进行解释的内容。

我将重点介绍在台式机浏览器中进行测试,以及Android和iOS应用程序中的测试。 为此,我将使用Charles Proxy。 稍后,在另一篇博客文章中,我可能会写关于mitmproxy的信息,它是免费的开放源代码,但使用起来不太方便。 因此,在本文中,我将详细介绍如何在MacBook,台式机浏览器和iPhone上使用Charles Proxy。

中间代理人

什么是Charles Proxy?

Charles Proxy是HTTP和HTTPS的交互式中间人代理。 它使任何人都可以查看其一台计算机与Internet之间的所有HTTP和SSL / HTTPS通信。 这包括请求,响应和HTTP标头(其中包含cookie和缓存信息)。 也可以在将请求发送到服务器之前对其进行修改,或者,这就是我将在此处描述的,收到的响应会带来很多机会。

如何安装Charles

Charles可用于Windows,MacOS和Linux。 只需在“下载”页面上下载所需的那个,然后按照说明进行即可。

您将获得一个试用版,因为Charles不是免费的(而mitmproxy是免费的),但这是值得的。 我必须承认我首先使用了mitmproxy,但是Charles的使用方式更简单,如果您确实需要代理,则可能不后悔这笔费用。

如何捕捉事物……?

…将显示在桌面浏览器中

如果要从浏览器捕获数据包,则必须将其配置为使用Charles。 默认情况下,它配置为使用端口8888,但是您可以通过打开“代理设置”来为所需的端口进行修改。

您可以先打开“帮助”,然后打开“本地IP地址”,以了解访问浏览器需要使用哪些IP,但是大多数时候,您可能会使用localhost(127.0.0.1)在本地进行操作。

让我们配置浏览器。 转到代理设置,然后添加127.0.0.1作为代理地址,并添加8888作为端口。

现在,您将捕获所有请求和响应的数据包,但仅适用于http服务器。 例如,如果Charles捕获了https://www.lyontesting.fr,您将看到此响应,但阅读起来不太舒服。

只需右键单击该请求,然后选择“启用SSL代理”。

然后在浏览器中刷新页面,您会发现结果并不理想。 这是因为www.lyontesting.fr页面被重定向到lyontesting.fr。 转到“代理/ SSL代理设置”,并调整位置主机,以匹配您要捕获的所有情况。

有趣的是,您可以修改将发送到浏览器的响应。 为此,只需添加这样的断点。

在“代理/断点设置…”中,选择“启用断点”,使用host = lyontesting.fr添加一个检测POST请求的断点,然后选择“响应”。

现在再次刷新页面,响应将不会发送到浏览器,正在等待您的批准。

在“编辑回复”标签中,您可以修改html。 在这里,我将“里昂测试”替换为“世界测试”。 结果显示在浏览器中。

现在,您可能认为可以使用浏览器的开发工具非常简单地完成此操作,并且您是对的。 但是这些简单的步骤向您展示了Charles和代理的基础知识。 这些东西也可以用于智能手机应用程序,这就是我们现在所看到的。

…将在智能手机应用中使用

Charles Proxy现在也作为iOS应用程序提供。 使用它,您可以指定要在记录中包括或排除的主机名(例如,仅对应用程序服务器的请求),与SSL代理相同。 要安装证书,请按照说明进行操作。

Charles代理应用程序是相当新的应用程序,因此无法修改收到的响应。 也许它将很快作为一项新功能添加。 因此,如果您要编辑回复,则需要使用桌面版的Charles代理。 幸运的是,您之前已经安装了它。 如果没有,那就迟到总比没有好。

您的智能手机必须位于相同的本地网络(如果使用相同的WiFi,则应该可以),以便能够捕获来自智能手机的流量。 在Charles中,转到“帮助”,然后转到“本地IP地址”。

您会在智能手机上的WiFi访问设置中找到需要用作手动代理的IP地址。 在这里,使用iPhone,使用Charles使用的默认端口8888。

就是这样,流应该显示在您的Charles Proxy中。 您还需要在智能手机上安装Charles证书。 “帮助/ SSL代理”菜单中说明了该过程。 让我为您复制/粘贴它:“ 将设备配置为使用Charles作为其192.168.2.1:8888上的HTTP代理,然后浏览到chls.pro/ssl以下载并安装证书。 请注意,在iOS 10及更高版本上,您必须进入设置>常规>关于>证书信任设置,并使Charles证书受信任。

就像本文开头一样,右键单击流程,然后可能需要“启用SSL代理”。

Voilà。

好的,现在您知道如何显示http / s通信了。 我们该怎么办?

过滤和更改请求或响应

测试时,显示所需内容并不总是那么容易。 根据产品的可测试性,如果必须使用生产后端并且无法对其进行欺骗,则很难检查所有极端情况。

使用代理,您可以更改显示内容。

让我们看看天气应用程序发送什么样的数据。 例如,我几乎每天都会在出门骑自行车之前使用:rainToday。 希望其中一个不使用证书旋转的人,否则我们的目标将很难实现。

下雨时选择一个城镇…。

…看看查尔斯捕获了什么。 对weatherpro.consumer.meteogroup.com的请求应出现在应用程序中,然后建议您添加一个过滤器,以不显示其他请求。

当您选择一个城镇时,您会看到已发送2个请求:

  • GET /weatherpro/RainService.php?method=getRainChart&areaID=UWZFR4562
  • GET /weatherpro/WeatherServiceFeed.php?format=xml&lid=1837351&mode=observation

显示第一个的响应,您将看到与此类似的json:

{ "precAngle": 18, "domainMax": 100, "domainMin": 0, "avg": [36, 36, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 34, 34, 34, 33, 33, 33, 33, 32, 32, 32, 31, 31, 31], "min": [32, 32, 32, 32, 32, 32, 33, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 34, 34, 34, 33, 32, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 22, 21, 20, 20, 20, 19, 19, 19, 19, 18, 18, 17], "max": [37, 37, 37, 37, 37, 37, 37, 36, 36, 37, 37, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36], "startMin": 0, "endMin": -1, "intensity": 0.3477275, "uwzid": "UWZFR4364", "winddir": "18", "startdtg": "2019-02-03 21:00:00", "creationdtg": "2019-02-03 21:05:59", "interval": "60000" } 

我猜Rain的值在0到100之间,但是由于将来不能100%确定,rainRadar每分钟给出近似值(间隔:60000,平均,最小和最大值为60个值)。

如果我们要测试极限值,例如:

或者更好的是,无效值,并查看应用程序的行为:

我只需要在文本编辑器中复制粘贴3行,avg,min,max,然后将第一个值替换为50、0、100,将第二个值替换为0、100、0(每次重复3次,以便得到更多在应用中可见)。 结果是:

 "avg": [50, 50, 50, 0, 0, 0, 50, 50, 50, 36, 36, 36, 36, 36, 36, 36, 36, 36, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 34, 34, 34, 33, 33, 33, 33, 32, 32, 32, 31, 31, 31], "min": [0, 0, 0, 100, 100, 100, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 34, 34, 34, 33, 32, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 22, 21, 20, 20, 20, 19, 19, 19, 19, 18, 18, 17], "max": [100, 100, 100, 0, 0, 0, 100, 100, 100, 37, 37, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36], 

但是我们需要截取该流,然后需要添加一个断点来检测GET请求和以下路径: /weatherpro/RainService.php*然后捕获响应。

再次选择城镇,或者选择另一个城镇,然后断点将停止流动。

为了编辑流程,请选择“编辑响应”和“ Json文本”。

然后将3行替换为上述行,然后单击“执行”。 好吧,如果您同时阅读此书,您可能不够快。 练习一下,您将足够快地假冒该应用程序。

新值将由应用程序解释,这不会崩溃或不在显示屏外显示值,这是一个好主意。

而且,您可以在正在测试的应用程序上伪造什么? 显示不需要的数据时,是否可以使其崩溃?

警告

在某些情况下,如果应用程序禁止网络代理或使用SSL固定,则在使用Charles Proxy(或任何其他“中间人”工具)时可能会遇到困难。 例如,请阅读以下内容详尽的文章:如何通过SSL固定使iOS应用更安全

对于从Android 7(SDK v24)开始的Android,除非添加一段代码,否则SSL网络是不直接可见的,但是在任何正式版本中激活以下技巧可能不是一个好主意。 请参阅有关此主题的非常清晰的文章:启用Android Nougat“查尔斯” SSL网络

结论

Charles代理是一个非常强大的工具,即使某些功能尚不可用,您也可以修改所需内容并测试应用程序或网站,更改接收到的数据,修改发送的请求等。

希望本文对您有所帮助。 感谢Charles Proxy的帮助,请发表评论,我对您的故事非常感兴趣。

祝您测试愉快!