Skip to content

Latest commit

 

History

History
74 lines (34 loc) · 4.14 KB

[snowming]-2021-8-15-正反向 socks 的理解.md

File metadata and controls

74 lines (34 loc) · 4.14 KB

title

我们的正反向 socks,都是为了搭建上图中的 host → proxy 的这一步,这样是为了使用已控机器代理进目标网络。所以 socks 服务器一定是搭建在被控目标机器上的,因为我们要使用它的流量代理进内网。而一定不可能搭建在 C2 机器上,因为 C2 机器本身不在目标内网中。

具体来说,被控目标机器必须运行一个程序,用于处理 socks5,必须要有这个服务。因为被控目标机器作为代理,其作用就是转发。如果没有 socks5 服务,它用什么做转发呢(公网流量转发进内网)?

在本文中,介绍了正向 socks 代理反向 socks 代理。之所以有这两种方向的 socks 代理,是因为作为 socks sever 的那一台被控目标机器(必须出网),可能有公网 IP,也可能没有。如果没有公网 IP,那么搭建好 socks 服务之后,可能无法直接用其作为 socks 代理,这种情况下,我们就需要借助 C2 的公网 IP。

  • 正向 socks

正向代理(Forward Proxy) Lhost → proxy → Rhost Lhost 为了访问到 Rhost,向 proxy 发送了一个请求并且指定目标是 Rhost,然后 proxy 向 Rhost 转交请求并将获得的内容返回给 Lhost,简单来说正向代理就是 proxy 代替了我们去访问 Rhost。

正向的 socks 也就是以目标网络中的已控失陷机器作为 socks 服务器(也就是正向代理中的 proxy)。

往往是让此机器监听本机的一个端口,这个端口提供 socks5 服务,比如:直接在已控目标机器上开个 gost -L socks5a://:1080,那失陷目标机器就直接监听 1080 了(在这一步可能需要 C2 去执行 gost 这个开启 socks 服务器的命令)。

然后就可以使用此 socks 代理了,使用任何攻击机器去连到这个 socks 代理,就可以使用此机器的流量进入目标网络。

适用情况:

正向 socks 适用于你可以连接到目标上的情况,比如目标有公网 ip,如果目标在内网,这种就没意义了,因为你在外面,他就算监听本机的端口,你也连不上。

  • 反向 socks

反向代理(reverse proxy) Lhost<--->proxy<--->firewall<--->Rhost 和正向代理相反(废话),Lhost 只向 proxy 发送普通的请求,具体让他转到哪里,proxy 自己判断,然后将返回的数据递交回来,这样的好处就是在某些防火墙只允许 proxy 数据进出的时候可以有效的进行穿透。

反向 socks 代理就是为了解决上面这种情况: 目标在内网,攻击机器无法直接连接,但是通外网。

这时候没法用正向socks5,就需要反向的,反向原理上其实就是个端口转发。

比如:

title

C2 监听两个端口(1000 和 2000)

  • 1000 用来被攻击机器连接
  • 2000 用来跟目标机器进行通信

这样通过此 1000 → 2000 的端口转发,socks 代理就可以使用 C2 的公网 IP。

目标机器运行某个 exe,连接到 C2 的 1000,这样 C2 和目标就建立了 tcp 通道(这里也说明了要想搭建 socks 隧道,目标机器可以没有公网 IP,但必须出网)。

使用的时候攻击机器配置代理连接到 C2 的 2000 端口。流量是这样走的:

攻击机器访问某个内网 URL → socks5 封包发送到 C2 的 2000 端口,C2 的 exe 把这个 2000 端口收到的流量,通过 socket 直接转发给目标机(因为和目标机已经建立了 TCP),然后目标机收到 socks5 流量,转发进内网,再把请求结果发给 C2,C2 再发给攻击机器的浏览器。

其中,2000 端口就起到一个端口转发的目的,把 socks 包转发给目标机器提供的 socks5 服务程序。

title

CS 的 rportfwd(反向端口转发)和 reverse socks5 原理一样,使用团队服务器监听端口给攻击机器提供 socks 服务,并中继流量转发到目标机器。


感谢我的好朋友 @undefined 教我~~