0%

浅谈代理隧道的几种应用场景

一、前言

熟练的代理转发,既可助你穿梭内网,亦可在工作生活中提供便利。理论上,任何接入互联网的计算机都是可访问的,但是如果目标主机处于内网,而我们又想和该目标主机进行通信的话,就需要借助一些端口转发工具来达到我们的目的。

二、端口转发

把端口接收到的流量转发到另外一个端口,可以是本机的端口,也可以是其它网络的端口。
实现原理:基于传输层协议,把socket字节流原封不动进行转发。
弊端:如果上层协议有校验,会出错。比如HTTP协议中部分WEB服务会校验host头,导致HTTP连接中断。

2.1 简单端口转发

域C可访问域B,不可访问域A。172.16.1.1172.16.2.1的SSH服务22端口转发到自己的8022端口,192.168.1.2可通过访问172.16.1.1:8022端口连接172.16.2.1的SSH服务。

实现方法:

  • Windows:netsh int portproxy,如:netsh interface portproxy add v4tov4 listenport=8022 connectport=22 connectaddress=172.16.2.1
  • Linux:socat、iptables DNAT+SNAT,如:socat tcp-l:8022,reuseaddr,fork tcp:172.16.2.1:22,reuseaddr
  • lcx
  • ew
  • 其它

2.2 反弹端口转发

局域网B内PC1无法直接访问局域网A内机器,把局域网A服务器172.16.2.1:22端口转发到公网服务器1.1.1.1:8022端口,这样可以让PC1通过公网访问该机器。

实现方法:

  • SSH远程转发
  • ngrok
  • nps
  • shootback

三、socks转发

socks转发与端口转发类似,但是效果不同,端口转发效果只能访问单个端口的服务,socks转发可以访问整个目标网络。与VP*N效果类似,但是不能转发传输层以下的包。

3.1 简单socks转发


实现方法:

  • 小飞机
  • ew
  • nps
  • reGeorg(webshell)
  • 冰歇(webshell)

    3.2 反弹socks转发

    socks服务器位于内网,外部机器通过公网访问反弹的socks端口来访问内网。

    实现方法:
  • 小飞机+反弹端口
  • ew
  • nps
  • 其它socks服务+反弹端口

四、SSH代理隧道

4.1 使用SSH动态端口转发

需求

使用工作PC访问公司内网服务器,登陆内网网站、登陆内网服务器。

网络拓扑

工作PC可使用SSH连接123.123.123.123:2222登陆到内网服务器A,其它内网端口未做映射

操作步骤
  1. 工作机使用Xshell新建连接,并填好连接信息,然后打开隧道选项
  2. 添加动态转发隧道
  3. 这时候工作机使用浏览器设置127.0.0.1:9999为socks5代理,即可访问172.16.1.101:80
  4. 如果要连接服务器B的3389端口,则需要借助sockscap64之类的工具打开,因为Windows远程连接客户端原生不支持代理,需要借助工具强制让它使用代理,这里不多赘述,可参考我的另一篇文章让BurpSuite使用MSF的socks4a代理解决方法->步骤->1中的sockscap64使用示例
    原理解释
    使用SSH动态端口转发,相当在远程SSH服务器启动了socks5代理服务,本地监听的9999端口流量将通过SSH隧道转发到SSH服务器,SSH服务器再对外发起网络请求。以上转发亦可使用ssh命令或者其它SSH客户端实现,具体方法可自行实验。
    出口数据流向

4.2 使用SSH隧道本地转发

需求

工作PC连接Windows服务器B的远程桌面。

网络拓扑

工作PC可使用SSH连接123.123.123.123:2222登陆到内网服务器A,其它内网端口未做映射

操作步骤
  1. 工作机xshell创建连接后,在属性->连接->隧道中添加Local类型转发
  2. 这时工作机打开远程桌面客户端,通过连接127.0.0.1:9999端口,可连接到内网服务器B的3389端口
    原理解释
    SSH隧道的本地转发,相当于把本地监听的9999端口接收到的TCP流量,通过SSH隧道转发到远程的SSH服务器A,服务器A再发起TCP连接到服务器B的3389端口。可以看到,本地转发跟动态转发有点相似,不同的是本地转发是转发了一个远程端口到本地,而动态转发可通过配置代理访问整个远程网络
    注意:这种方法转发HTTP端口一般无法成功,因为HTTP协议带有Host头,服务器端校验Host头后可能会重置该HTTP请求导致无法连接,如果想了解这一细节,不妨抓个包看看。
出口数据流向

4.3 使用SSH隧道远程转发

需求

工作PC-B访问工作PC-A上面的MySQL数据库(3306端口)。

网络拓扑

操作步骤

原理说明

远程转发的功能刚好与本地转发相反,可以把本地监听的端口转发到远程服务器上,可用于办公区的机器需要访问工作机的本地端口时候使用,比如工作机上面配置了数据库服务,监听本地3306端口,通过转发本地3306端口到远程服务器A的9999端口上,服务器B可访问工作机的数据库应用。

注意:远程转发默认只能转发到SSH服务器的环回网卡(127.0.0.1),外部网络访问(如本例)需要启动GatewayPorts配置:

1
2
# 编辑sshd 的配置文件/etc/ssh/sshd_config,将GatewayPorts 开关打开:
GatewayPorts yes
出口数据流向

五、代理链工具

强制程序使用代理,让一些不支持代理的工具也能使用socks代理

  • proxychains
  • sockscap64

参考

内网渗透之端口转发与代理工具总结
内网端口转发及穿透
让BurpSuite使用MSF的socks4a代理