远程遥控 IPTables 进行端口复用
这篇首发在 ThreatHunter 社区:国内首个专注于高级威胁发现与安全数据分析的社区,请大家多多支持,https://threathunter.org。
有一天坐地铁的时候突然想到利用 iptables nat 表的 PREROUTING 链配合 REDIRECT 应该是可以达到端口复用的效果的。
比如在服务器的 PREROUTING 链里面加一条规则,将到本机 80 端口的流量 REDIRECT 到 22 端口,就算 80 端口正在被 Apache 监听,此流量也能成功到达 22 端口,因为 nat 表的 PREROUTING 链会在路由决策之前被处理。
现在的问题只有一个,如何区分到 80 端口的正常流量和“复用流量”? 正常的的 HTTP 流量应该让它正常地发往 Apache,而“复用流量”应该前往 22 端口。答案也很简单,只要“复用流量”有特征就可以了。
当天晚上我简单写了一个 PoC 来验证我的想法,如下:192.168.33.78 为虚拟机的 IP,虚拟机上用 python 在 80 端口启动了一个 http 服务
虚拟机上执行:
将发送本机 80 端口,源端口为 8989 的流量重定向至本机 22 端口
/sbin/iptables -t nat -A PREROUTING -p tcp --sport 8989 --dport 80 -j REDIRECT --to-port 22
本地执行:
socat 监听本地 2326 端口,接收到链接后,利用本地的 8989 端口将流量转至虚拟机的80端口
socat tcp-listen:2326,fork,reuseaddr tcp:192.168.33.78:80,sourceport=8989,reuseaddr &
SSH 连接本地 2326 端口,成功连接上了虚拟机的 SSH,同时本地正常用 curl 是能够访问到虚拟机的 80 端口的 HTTP 服务的
ssh vagrant@127.0.0.1 -p 2326
效果图:
以上是最初的 PoC。它有一个很明显的问题是不支持多链接。 如果想创建两个 SSH 链接就会出错,因为本地的 8989 端口已经被第一个 SSH 连接占用了。
今天我对这个方法进行了改进,不再用 source port 做为 “复用流量” 的标识,所以也就不需要再用 socat 来进行一次本地的转发了。同时,加入了远程遥控端口复用开关的功能。我这里直接放出脚本代码:
第一种方式:利用 ICMP 做遥控开关。缺点在于如果目标在内网,你是无法直接 ping 到它的。
创建端口复用链
iptables -t nat -N LETMEIN
创建端口复用规则,将流量转发至 22 端口
iptables -t nat -A LETMEIN -p tcp -j REDIRECT --to-port 22
开启开关,如果接收到一个长为 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
关闭开关,如果接收到一个长为 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
let’s do it,如果发现 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
开启复用前,WEB 是可以访问的:
开启复用
ping -c 1 -s 1111 192.168.33.78
向目标发送一个长度为 1111 的 ICMP 数据包(加上包头28,总长度实际为1139)
关闭复用
ping -c 1 -s 1112 192.168.33.78
向目标发送一个长度为 1112 的 ICMP 数据包(加上包头 28,总长度实际为 1140)
效果图:
第二种方式:利用 tcp 数据包中的关键字做遥控开关,不怕目标在内网。
端口复用链
iptables -t nat -N LETMEIN
端口复用规则
iptables -t nat -A LETMEIN -p tcp -j REDIRECT --to-port 22
开启开关
iptables -A INPUT -p tcp -m string --string ‘threathuntercoming’ --algo bm -m recent --set --name letmein --rsource -j ACCEPT
关闭开关
iptables -A INPUT -p tcp -m string --string ‘threathunterleaving’ --algo bm -m recent --name letmein --remove -j ACCEPT
let’s do it
iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN
开启复用,开启后本机到目标 80 端口的流量将转发至目标的 SSH,80 将无法再被本机访问:
echo threathuntercoming | socat - tcp:192.168.33.78:80
关闭复用,关闭后,80 恢复正常:
echo threathunterleaving | socat - tcp:192.168.33.78:80
效果图:
只要有特征,就可以做为远程遥控的标志。我这里只是想验证一下自己的想法,所以用了我认为最简单的两种方法。其它方法希望大家自己挖掘,分享。
最后留一个小问题,如果在开启 tcpdump 进行抓包的同时,利用 iptables 对数据包进行了更改,那 tcpdump 抓到的是更改之前的包还是更改之后的包呢? :)
远程遥控 IPTables 进行端口复用相关推荐
- iptables实现端口复用
iptables实现端口复用 1.端口复用的概念 2.基于iptables的端口复用 2.0 前置概念 2.0.1 iptables自定义链 2.0.2 iptables recent模块使用 2.1 ...
- iptables端口复用
环境: 攻击主机:Kali -- 192.168.218.135 目标主机:RHEL8 -- 192.168.218.129 什么是端口复用 端口复用是指不同的应用程序使用相同端口使用相同端口进行通讯 ...
- 管理端口_内网渗透 | 红蓝对抗:Windows利用WinRM实现端口复用打造隐蔽后门
目录 WinRM端口复用原理 端口复用配置 新增80端口监听 修改WinRM默认监听的端口 远程连接WinRM WinRM端口复用原理 该端口复用的原理是使用Windows的远程管理服务WinRM,结 ...
- iptables实现端口映射(本地和远程端口映射)
iptables实现端口映射(本地和远程端口映射) 说明: 需要将外网访问本地IP(192.168.75.5)的80端口转换为访问192.168.75.3的8000端口,这就需要用到iptables的 ...
- linux socket 端口复用 SO_REUSEADDR
下面建立的套接字都是tcp套接字 1.进程创建监听套接字socket1,邦定一个指定端口,并接受了若干连接.那么进程创建另外一个套接口socket2,并试图邦定同一个端口时候,bind错误返回&quo ...
- Web端口复用正向后门研究实现与防御
0×01背景 现在的很多远控/后门因为目前主流防火墙规则的限制,基本上都采用TCP/UDP反弹回连的通讯形式:但是在较高安全环境下,尤其负责web相关业务的环境,因为安防设备(防火墙,IDS,IPS等 ...
- Centos6.8下安装Mysql5.6.14,连接mysql及增删改查,通过Mysql-Front远程连接(开启端口、允许远程连接)
Centos6.8下安装Mysql5.6.14,连接mysql及增删改查,并能通过Mysql-Front远程连接(开启端口.允许远程连接) 概述: 通过源代码安装高版本的5.6.14. 正文: 一:卸 ...
- php开启端口复用,WebServer端口复用后门
0x00 有朋友问到了我一个关于"无端口可用"的问题.说在如下图所示的内网环境中,firewall只允许Web Server的80端口建立网络连接,并且Web Server上的80 ...
- esp32-cam摄像头+远程遥控小车
目录 1.esp32cam开发 2.51单片机开发 3.手机端开发 4.总结 先来说说需要的器件,因为是心血来潮做的一个简单的实验,所以用的也都是最基础的东西.淘宝买的一个小车底板,外加四个带轮子的减 ...
最新文章
- Mirror, Mirror,What do I see、一切都是投射
- 并发编程之多进程进程进程
- 简单检测CDN链接是否有效
- Google Hacking的用法
- POJ 2115 C Looooops
- [Axure教程]0001.新手入门基础
- homebrew mac_借助Homebrew使从Mac到Linux的转换更加容易
- 浙大 PAT 乙级1055
- OAuth2.0认证服务器之客户端相关配置
- MyBatis递归查询
- chrome浏览器提示“adobe flash player不是最新版本!”
- python列表怎么比较大小_python列表怎么比较大小
- 超详细的商业智能BI知识分享,值得收藏
- 多因子模型水平测试题试答(因子部分)
- 面向对象设计之单一职责原则(Simple-Responsibility Principle)
- 计算机专业买什么u盘好,大容量u盘要格式化要选择哪种格式比较好用?-win7之家...
- 论文阅读 [TPAMI-2022] DE-GAN: A Conditional Generative Adversarial Network for Document Enhancement
- java64 压缩包,qq64位下载-rar 64位 v5.21 免费版
- 西安邮电大学计算机专业怎样,计算机怎么样?西安理工大学和西安邮电大学哪个比较好?...
- 科普篇|什么是JBOD?