简介
端口转发是服务器A(地址:端口)将接收到的通信客户端C(地址:端口)完全转发给另一个服务器B(地址:端口),实现客户端C与服务器B的通信。可用于对服务器B隐藏客户端C的真实地址。端口转发也可应用于访问内网服务器(相当于服务器B)。
实现端口转发
可以应用于以下两种情况:
- 当客户端C可以正向连接服务器A。
- 当客户端C无法正向连接服务器A,但服务器A可以反向连接客户端C。
情况1:正向连接
- 服务器A为windows系统
实验环境:
主机 | ip | 端口 |
---|---|---|
Client(Kali) | 192.168.246.136 | \ |
ServerA(Win10) | 192.168.246.130 | 8888 |
ServerB(win7) | 192.168.246.131 | 6666 |
方法:使用netsh(windows自带),需要管理员权限进行配置。
步骤:
- 在ServerA上以管理员身份运行cmd.exe
- 添加转发规则:
netsh interface portproxy add v4tov4 listenaddress=192.168.246.130 listenport=8888 connectaddress=192.168.246.131 connectport=6666
- 由于防火墙默认阻挡了入站通信,因此需要添加防火墙规则:
netsh advfirewall firewall add rule name="transmit" protocol=TCP dir=in localport=8888 action=allow
- 在ServerB上开启监听6666端口:
nc.exe -lvp 6666
- 在Client上连接ServerA的8888端口
nc 192.168.246.130 8888
ServerB监听到的是来自ServerA的连接
此处netsh可能常用到的命令:
查看端口转发规则:netsh interface portproxy show all
删除端口转发规则:netsh interface portproxy delete v4tov4 listenaddress=192.168.246.130 listenport=8888
查看防火墙规则:netsh advfirewall firewall name="transmit"
删除防火墙规则:netsh advfirewall firewall delete rule name="transmit"
更多命令可以使用netsh -h
查看
- 服务器A为Linux系统
实验环境:(交换Client和ServerA角色)
主机 | ip | 端口 |
---|---|---|
Client(Win10) | 192.168.246.130 | \ |
ServerA(Kali) | 192.168.246.136 | 8888 |
ServerB(win7) | 192.168.246.131 | 6666 |
方法:使用iptables(Linux自带),也需要管理员权限。
步骤:
- 切换root权限(su root)
- 添加转发规则,分别如下
目的地址转换规则:
iptables -t nat -A PREROUTING -p tcp -d 192.168.246.136 --dport 8888 -j DNAT --to-destination 192.168.246.131:6666
源地址转换规则:
powershell iptables -t nat -A POSTROUTING -p tcp -d 192.168.246.131 --dport 6666 -j SNAT --to-source 192.168.246.136
- 开启转发功能(将1写入到/proc/sys/net/ipv4目录下的ip_forward文件中,不修改的情况下是0):
echo 1 >/proc/sys/net/ipv4/ip_forward
- 在ServerB上开启监听6666端口:
nc.exe -lvp 6666
- 在Client上连接ServerA的8888端口
nc.exe 192.168.246.130 8888
ServerB监听到的是来自ServerA的连接
注:使用iptables配置的端口转发规则,在重启后都会失效,包括开启转发功能也会恢复到默认的0。
可以使用下面命令保存和恢复转发规则
保存规则:iptables-save > xxxxx
恢复规则:iptables-restore < xxxx
注:保存和回复-之间没有空格;
xxxx为保存的文件路径,例如/root/Desktop/rule,指的是/root/Desktop下的rule文件。
此处iptables可能常用到的命令:
查看转发规则:iptables -L -t nat --line-numbers
删除所有规则:iptables -F -t nat
删除指定规则:iptables -t nat -D PREROUTING 1(删除nat表的PREROUTING链的第一条规则)
更多命令可以使用iptables -h
查看,或者参考这篇文章。
情况2:反向连接
方法:使用EarthWorm,Linux和Windows使用方法相同。
实验环境:
主机 | ip | 端口 |
---|---|---|
Client(Win10) | 192.168.246.130 | 6868 |
ServerA(Kali) | 192.168.246.136 | 8888 |
ServerB(win7) | 192.168.246.131 | 6666 |
步骤:
- 在Client上,监听6868端口,6868端口接收到的是反弹在8888端口上的:
ew_for_Win.exe -s lcx_listen -l 6868 -e 8888
- 在ServerA上,反弹给Client的8888端口的是ServerA连接在ServerB的6666端口的连接:
ew_for_linux64 -s lcx_slave -d 192.168.246.130 -e 8888 -f 192.168.246.131 -g 6666
Client上显示OK!
- 在ServerB上,监听6666端口:
nc64.exe -lvp 6666
- 在Client上,连接本地的6868端口:
nc.exe 127.0.0.1 6868
同样,ServerB监听到的是来自ServerA的连接
此处EarthWorm一些参数可以使用-h
查看。