前面我们已经学习了ssh端口转发、防火墙端口转发、rinetd端口转发、nc端口转发,今天我们来看一个增强版的nc端口转发,socat 这个工具和nc 有一点渊源,都是cat,都是网络相关的,都可以做端口转发、文件传输,这些功能都是冰山一角,有时间可以继续深入挖掘,今天先看端口转发,文章末尾有彩蛋~
nc是net cat , socat 是socket cat,名字相似,功能相似
实验环境:
- macos:192.168.199.206
- kali:192.168.199.247
- centos:192.168.199.236
实验一:本地转发
socat TCP-LISTEN:8888,reuseaddr,fork TCP:127.0.0.1:22
从黑客视角看一看抓包
再从受害者角度看一看流量,怎么感觉和其他端口转发都一样啊
实验二:远程端口转发,换个IP地址即可
socat TCP-LISTEN:7777,reuseaddr,fork TCP:192.168.199.236:22
- 看看黑客视角的流量,一样,不贴图了
- 看看跳板机视角的流量,一样,不贴了
网络安全任重道远,洗洗睡吧~
彩蛋:使用socat 将一个小文件从macos传递到kali
1、在macos上操作
socat -u open:黑客0717.png tcp-listen:7777,reuseaddr
2、在kali上操作
socat -u tcp:192.168.199.206:7777 open:黑客0717.png,create
3、检查,成功拿到「“黑客0717”这张图片」
之前曾介绍过有关如何用SSH实现端口转发的方法,既可以用于ipv4,也可用于ipv6,感兴趣的朋友可以戳这里 ,本文介绍另一种可以实现端口转发效果的方法——socat,并且在某些方面要优于SSH。
什么是socat
socat是一种TCP或UDP流量转发工具,可以本机转发给本机,也可以本机转发给内网的机器,也可以转发给外网。利用socat可以实现很多有趣的功能。官方网站是这里
如何实现端口转发
例如将发往本机22端口的TCP流量,转移至ipv6地址[CDCD:910A:2222:5498:8475:1111:3900:2020]的3389端口,需要用如下命令:
nohup socat TCP4-LISTEN:22,reuseaddr,fork TCP6:[CDCD:910A:2222:5498:8475:1111:3900:2020]:3389
其中
nohup 是为了让socat后台运行,最后的&也是后台运行,熟悉linux的人对他们很熟了。
TCP4-LISTEN指明了ipv4的本机监听端口,
reuseaddr的意义是“Allows other sockets to bind to an address even if parts of it (e.g. the local port) are already in use by socat (example).”
fork意义是“After establishing a connection, handles its channel in a child process and keeps the parent process attempting to produce more connections, either by listening or by connecting in a loop”
TCP6指明转发的ipv6地址
与SSH做比较
笔者所处的网络环境并非太好,经常会网速较低。实测用SSH进行端口转发不如socat稳定。(尚未定量测试,目前主观感觉是这样的)
总结
socat从本质上来说,是将TCP或UDP流量直接转发给了另外的ip,在稳定性上略胜一筹,安全性有所折扣。