在渗透测试中,经常会使用到端口转发和代理。
端口转发是转发一个网络端口从一个网络节点到另一个网络节点的行为。
实际应用中需要考虑两种情况:
· Client->Transit server->Server:Client能够正向连接Transit server。Transit server直接转发即可
· Client<-Transit server->Server:Client无法正向连接Transit server,但Transit server能够反向连接Client。
如果Client要对Server的多个端口进行扫描(或是多个Server的多个端口),逐个配置转发规则很不现实。
为了提高效率,这里可以使用代理,配置一次规则即可。
本文将对常用方法和工具进行整理总结,分门别类,区分正向和反向连接,区分转发和代理,分析其中的联系和区别,并给出应用场景,以作参考。
0x01 简介
本文将要介绍以下内容:
· 针对Windows系统和Linux系统(Ubuntu和CentOS)下的方法
· 端口转发——正向连接的方法
· 端口转发——反向连接的方法
· 正向代理的方法
· 反向代理的方法
· 以上方法的应用场景
注:Go语言支持跨平台编译,所以本文更侧重于介绍Go语言实现的工具
0x02 端口转发——正向连接
零、应用场景
1.流量转发的跳板
用于隐藏真实的服务器地址
CIA Hive Beacon Infrastructure中端口转发使用的是Linux的iptables
2.建立通道
连接内网服务器的指定端口
Client能够正向连接到Transit server
一、测试环境
· Client: 192.168.111.136
· Server: 192.168.111.103
使用nc测试网络连接
Server:
nc -lvp 4444
Client:
nc -vv 192.168.111.103 4444
Client连接成功,如下图:
二、Windows系统下的端口转发方法
· Transit server: 192.168.111.132
1、使用netsh实现端口转发(需要管理员权限)
(1)添加转发规则
netsh interface portproxy add v4tov4 listenaddress=192.168.111.132 listenport=7777 connectaddress=192.168.111.103 connectport=4444
(2)添加防火墙入站规则
netsh advfirewall firewall add rule name=“transit test” protocol=TCP dir=in localport=7777 action=allow
注:默认配置允许出站并阻挡入站通信,所以此处仅需要添加入站规则
测试网络连接:
Server:
nc -lvp 4444
Client:
nc -vv 192.168.111.132 7777
Client连接成功
(3)查看端口转发规则
netsh interface portproxy show all
(4)清除端口转发规则
netsh interface portproxy delete v4tov4 listenaddress=192.168.111.132 listenport=7777
(5)清除防火墙规则
netsh advfirewall firewall delete rule name=“transit test”
2、使用rinetd实现端口转发
下载地址:https://boutell.com/rinetd/http/rinetd.zip
仅需要压缩包中的rinetd.exe
(1)为rinetd.exe添加防火墙规则(管理员权限)
netsh advfirewall firewall add rule name=“transit test2” dir=in program=“c:\test\rinetd.exe” action=allow
(2)编写转发规则
echo 0.0.0.0 7777 192.168.111.103 4444 > conf.txt
(3)启动
rinetd.exe -c c:\test\conf.txt
(4)清除防火墙规则(管理员权限)
netsh advfirewall firewall delete rule name=“transit test2” dir=in program=“c:\test\rinetd.exe”
3、使用HTran实现端口转发
注:lcx同其功能类似
源码来源于互联网,我在github做了备份,备份地址:https://raw.githubusercontent.com/3gstudent/test/master/HTran.cpp
(1)为HTran.exe添加防火墙规则(管理员权限)
netsh advfirewall firewall add rule name=“transit test3” dir=in program=“c:\test\HTran.exe” action=allow
(2)开启转发功能
HTran.exe -tran 7777 192.168.111.103 4444
(3)清除防火墙规则(管理员权限)
netsh advfirewall firewall delete rule name=“transit test3” dir=in program=“c:\test\HTran.exe”
4、使用EarthWorm实现端口转发
下载地址:https://github.com/rootkiter/EarthWorm
(1)为ew_for_win_32.exe添加防火墙规则(管理员权限)
netsh advfirewall firewall add rule name=“transit test4” dir=in program=“c:\test\ew_for_win_32.exe” action=allow
(2)开启转发功能
ew_for_win_32.exe -s lcx_tran -l 7777 -f 192.168.111.103 -g 4444
(3)清除防火墙规则(管理员权限)
netsh advfirewall firewall delete rule name=“transit test4” dir=in program=“c:\test\ew_for_win_32.exe”
三、Linux系统(Ubuntu)下的常用端口转发方法
· Transit server: 192.168.111.102
1、使用iptables实现端口转发
(1)开启转发功能
echo 1 >/proc/sys/net/ipv4/ip_forward
注:该命令立即生效,重启失效
(2)添加转发规则
iptables -t nat -A PREROUTING -p tcp -d 192.168.111.102 --dport 8888 -j DNAT --to-destination 192.168.111.103:4444
iptables -t nat -A POSTROUTING -p tcp -d 192.168.111.103 --dport 4444 -j SNAT --to-source 192.168.111.102
(3)查看转发规则
iptables -L -t nat --line-number
测试网络连接:
Server:
nc -lvp 4444
Client:
nc -vv 192.168.111.102 8888
Client连接成功
(4)清除规则
iptables -F -t nat
(5)保存规则
iptables-save > /etc/iptables.up.rules
(6)恢复规则
iptables-restore < /etc/iptables.up.rules
2、使用rinetd实现端口转发
(1)编译安装
wget http://www.boutell.com/rinetd/http/rinetd.tar.gz
tar zxvf rinetd.tar.gz
cd rinetd
make
(2)编写转发规则
echo 0.0.0.0 8888 192.168.111.103 4444 > /etc/rinetd.conf
(3)启动
./rinetd.exe
(4)结束进程
pkill -9 rinetd
3、使用HTran实现端口转发
Linux版HTran(lcx)的源码参考如下地址:https://github.com/windworst/LCX
需要使用gcc重新编译
(1)开启转发功能
./lcx -tran 8888 192.168.111.103 4444
注:go语言编写的HTran(lcx),优点是跨平台,支持Windows和Linux
下载地址:https://github.com/cw1997/NATBypass
4、使用EarthWorm实现端口转发
下载地址:https://github.com/rootkiter/EarthWorm
未开源
(1)开启转发功能
./ew_for_linux -s lcx_tran -l 8888 -f 192.168.111.103 -g 4444
四、Linux系统(CentOS)下的常用端口转发方法
· Transit server: 192.168.111.105