一、应用场景
为了从外网实现对内网的访问,进入内网后,为了突破网络边界,需要搭建多层代理,实现从dmz想生产网、核心网、办公网的突破多层网络隔离的情况,实现对更深成次的网络访问,结合端口转发,进行网络跨越网络中只允许指定端口出网,为了实现边界突破需要进行端口复用,实现对防火墙的跨越
1、正向代理 (proxy)
位于客户端和服务器之间的一个服务器,为了从原始服务器中获取内容,客户端向代理服务器发送一个制定目标的请求,然后代理服务器再向原始服务器发送请求,并将获得内容返回给客户端。
区分正想代理和反向代理的关键点,是看这个代理是为谁在服务。
正向代理是为客户端服务的,ssr、VPN等
反向代理是为服务器服务的,比如nginx
2、反向代理(reverse proxy)
服务器根据客户端的情况,从其关联的一组或者多组后端服务器 (如web服务器)上获取资源,然后将这些资源返回给客户端,客户只会得知反向代理的IP地址,而不知道代理后面的服务器簇的情况。
3、端口转发 (port forwarding)
- 通过一些列的配置或者软件、将访问端口A的流量转发到端口B上
- 端口A和端口B可以为本地端口,也可以为远程端口
- 端口A和端口B可以在同一台机器上,也可以在不同的主机上
- 不同的程序使用相同的使用相同的端口进行通信
- 端口服务在系统以开放的端口,进行通信,支队输入信息进行字符匹配,不对网络进行任何数据拦截,复制类操作,所以对数据传输性能不受影响。
- 可以做后门
例如 外网开放的 8080 端口 通过防火墙的映射成内网的 8888 端口,8888端口可以同时转发A和B程序的流量,实现方式是:
C程序可以根据流量的协议或者其他流量特点分析外面来的流量的不同,进而判断转发给后面不同的程序。
二、代理客户端工具和协议
proxifier
全平台代理工具,支持 sock等多种协议
frp
ew
cobalt strike
1、常见搭理协议特点:
TCP
- 面向连接的传输层协议
- 面条只能有两个端点
- 连接可靠
- 提供全双工通信
- 面向字节流
UDP
- 无连接
- 面向报文
- 尽最努力交付
- 没有拥塞控制
- 支持一对一,一对多,多对一,多对多通信
- 首部开销小
2、TCP/UDP对应应用
协议 | 应用层协议 | 工具实例 |
TCP | Socks4a | x8;Cobalt Strike |
Socks5 | SSH、FRP | |
websocks | regeorg | |
UDP | KCP | xa0;FRP、Dtunnel |
icmp | ptunnel | |
dns | DNS2TCP\DNSCAT |
常用 tcp,但是由于防火墙的防护,可以考虑使用udp的绕过
3、Socks4a
Socks 是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递。SOCKS 是 “SOCketS”的缩写
Socks4a 是 Socks4的简要扩展,
常见的支持软件
- Cobalt Strike
- Metasploit
Socks5 比 4多了身份认证
4、Cobalt Strike
1、右键点击 开启代理的Beacon
2、点击Pivoting 菜单
3、点击Socks Server
4、点击TeamServer 监听端口开启Socks4a代理
注意事项
默认HTTP通道速度最快
可选择DNS TXT模式 使用DNS隧道
5、Metasploit
设置路由
- msf回话, route [add/remove] subnet netmask [comm/sid]
- Meterpreter回话:run autoroute [-r] -s subnet -n netmask
开启代理服务器
- Use auxiliary/server/socks4a
- Use auxiliary/server/socks5
不推荐使用,经常挂。
建议使用msf 然后转移到 cobalt strike 或者其他的代理工具中
6、socks5
Socks 5 支持 鉴定 ipv6 udp
ssh
frp (go语言写的)
ew
termite go 语言报错可以使用
三、常用隧道
1、SSH隧道
(1)ssh 协议
建立在引用层基础上安全协议
目前较为可靠,转么为远程回话和其他网路服务提供安全的协议
带有公钥和私钥
Linux 和unix 系统自带,无其依赖
(2)使用方式
前提条件:
- 需要root权限
- 需要自己控制一台公网VPS
- 需要更改VPS sshd配置文件,开启端口转发:GatewayPorts yes(修改后切记重启SSH服务,systemctl restart sshd.service)
步骤:
ssh -qTfnN -D 0.0.0.0:[内网socks5服务端口] root@localhost -p [本地的ssh服务端口