目录
开启开关,如果接收到一个长为 1139 的 ICMP 包,则将来源 IP 添加到加为letmein的列表中
关闭开关,如果接收到一个长为 1140 的 ICMP 包,则将来源 IP 从 letmein 列表中去掉
let’s do it,如果发现 SYN 包的来源 IP 处于 letmein 列表中,将跳转到 LETMEIN 链进行处理,有效时间为 3600 秒
端口复用概念:
定义:端口复用是指不同的应用程序使用相同端口进行通讯。
场景:内网渗透中,搭建隧道时,服务器仅允许指定的端口对外开放。利用端口复用可以将3389或22等端口转发到如80端口上,以便外部连接。
一,使用ICMP做遥控开关
ICMP定义:ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
创建端口复用链:
[root@manage ~]# iptables -t nat -N ZH
查看该链:
[root@manage ~]# iptables -nvxL -t nat --line
将流量转发至22端口:
[root@manage ~]# iptables -t nat -A ZH -p tcp -j REDIRECT --to-port 22
开启开关,如果接收到一个长为 1139 的 ICMP 包,则将来源 IP 添加到加为letmein的列表中
[root@manage ~]# iptables -t nat -A PREROUTING -p icmp --icmp-type 8 -m length --length 1139 -m recent --set --name letmein --rsource -j ACCEPT
关闭开关,如果接收到一个长为 1140 的 ICMP 包,则将来源 IP 从 letmein 列表中去掉
[root@manage ~]# iptables -t nat -A PREROUTING -p icmp --icmp-type 8 -m length --length 1140 -m recent --name letmein --remove -j ACCEPT
let’s do it,如果发现 SYN 包的来源 IP 处于 letmein 列表中,将跳转到 LETMEIN 链进行处理,有效时间为 3600 秒
[root@manage ~]# iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j ZH
查看ZH链上的规则:
开启复用:
[root@master ~]# ping -c 1 -s 1111 192.168.199.128
验证:
关闭复用:
[root@master ~]# ping -c 1 -s 1112 192.168.199.128
验证:
ssh -p 80 root@192.168.199.128
二,使用tcp数据包中的关键字做遥控开关
创建端口复用链:
iptables -t nat -N LZH
将流量转发至22端口:
iptables -t nat -A LZH -p tcp -j REDIRECT --to-port 22
开启开关:
iptables -A INPUT -p tcp -m string --string 'zhimakaimen' --algo bm -m recent --set --name zdm --rsource -j ACCEPT
关闭开关:
iptables -A INPUT -p tcp -m string --string ‘threathunterleaving’ --algo bmm recent --name zdm --remove -j ACCEPT
开搞:
iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name zdm --rsource -j LZH
[root@manage ~]# echo zhimakaimen | socat - tcp:192.168.199.132:80
[root@manage ~]# echo threathunterleaving | socat - tcp:192.168.199.132:80
让HTTPS、SSH 共享端口的——工具SSLH
安装 SSLH
yum install -y epel-release
yum install -y sslh
安装 SSLH 时,将提示你是要将 sslh 作为从 inetd 运行的服务,还是作为独立服务器运行。每种选择都有其自身的优点。如果每天只有少量连接,最好从 inetd 运行 sslh 以节省资源。另一方面,如果有很多连接,sslh 应作为独立服务器运行,以避免为每个传入连接生成新进程。
配置 Apache 或 Nginx Web 服务器
编辑 Web 服务器(nginx 或 apache)配置文件并找到以下行:
listen 443 ssl;
将其修改为:
listen 127.0.0.1:443 ssl;
如果你在 Apache 中使用虚拟主机,请确保你也修改了它。
VirtualHost 127.0.0.1:443
保存并关闭配置文件。不要重新启动该服务。我们还没有完成。
配置 SSLH
使 Web 服务器仅在本地接口上侦听后,编辑 SSLH 配置文件:
sudo vim /etc/default/sslh
找到下列行:
Run=no
将其修改为:
Run=yes
并修改以下行以允许 SSLH 在所有可用接口上侦听端口 443(例如 0.0.0.0: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"
–user sslh:要求在这个特定的用户身份下运行。
–listen 0.0.0.0:443:SSLH 监听于所有可用接口的 443 端口。
–sshs 127.0.0.1:22 : 将 SSH 流量路由到本地的 22 端口。
–ssl 127.0.0.1:443 : 将 HTTPS/SSL 流量路由到本地的 443 端口。 保存并关闭文件。
最后,启用并启动 sslh 服务以更新更改。
sudo systemctl enable sslh
sudo systemctl start sslh
测试
检查 SSLH 守护程序是否正在监听 443。
ps -ef | grep sslh
现在,在kali上远程访问: