Projects STRLCPY SeaMoon Files
🤬
78 lines | UTF-8 | 3 KB

HTTP

HTTP代理 涉及了三个问题。

  1. HOST 路由问题
  2. HTTPS 请求认证问题
  3. 链式代理
  4. 底层转发http.client.do()问题

依次在原理部分解释月海是如何处理上述问题的

效果

speed

原理

HOST 路由问题

最早接触云函数就是大佬们的文章:通过云函数进行动态IP池的代理。开启了大家探索云函数的历程。

其基本原理在于: 通过本地代理拦截 http请求进行解析,将分析出来的参数提供给云函数执行。

而云函数端仅提供一个类似request的方法,把获取到的参数重组HTTP请求,请求过后将数据返回而已。

在设计月海时,我对这种模式实在是难以苟同,太不优雅了,先不提各种编码可能导致的问题,光是要在本地开一个client端,就已经很难受了。

(月海最初的目标是实现本地端不需要任何工具,拿到一台机器,连接到云函数就能进行渗透工作)

但是经过一番折腾,发现截止至目前,云函数的支持力度仅能够存在这一种利用的方式。

问题就出在了HTTP的代理模式。

我们正常使用HTTP代理(浏览器插件、burp、bash终端的export HTTP_PROXY)等,实际上是将HTTP数据包原封不动的发给了我们配置的代理服务器。

实际上,等效于这种请求: curl -H "HOST: Dest-HOST" example.proxy.com

但是在云函数的实现都是通过API网关来寻找对应的FC,来确定触发器到底是由哪个函数执行。

而这就用到了这个HOST头字段,导致无法直接在云函数开启一个HTTP代理,用插件配置上使用。

"不要在已有的模式上造轮子", 因此,基于FC的特性,针对HTTP模式,就不再做更多思考与尝试了。

这里仍可以做的,就是优化HTTP请求的优雅程度,比如,通信方式,字段规范,以及编码问题的处理。

HTTPS 请求认证问题

其实基于上面的架构。HTTPS 的问题已经很好解决了。

因为我们的 云函数HTTP代理,并不是一个实际意义上的代理,而是一个模拟代理。 云函数模拟的请求是可以发送https的。

那么问题就变成了,如何信任我们的client端,参照大多proxy和burp的模式,可以通过信任根路径的证书来解决这个问题。

可以参考这篇文章

实现基于 HTTPS 代理的中间人攻击

HTTPS 迎刃而解。

链式代理

待开发

底层逻辑问题

月海测试beta版本,使用的方式是通过net.http 直接发送从header获取的完整路径请求。

这和现有的一些工具逻辑完全一致。 但是在测试时,很容易出现:http redirect request 、 js/css加载失败或直接失效的场景,这相比socks5的舒适度差了一大截。

因此,基于完美主义,后续将会重构一版底层net转发的逻辑。

Please wait...
Page is in error, reload to recover