端口转发(上)
Lastmod: 2023-04-29

叙述对端口转发的一点认识,陆续补充几种常见转发工具。前文有一篇结合反弹Shell介绍端口映射的,作为兄弟篇,现在讲讲端口转发。

Let’s be more clear. 端口转发指的是把本端口流量转到另一端口上,这是主动的。端口映射指的是,本端口被镜像到了另一端口上,对另一端口访问,最终导向到本端口。不同角度看,一个主动,一个被动,同一个结果。

handwrite_soul.png

LCX

理清流量走向,才能理解怎么配置转发。

例如,打算将Ubuntu的SSH 22端口转发到Kali的8022端口。

其中一种走向,用户访问Kali:8022=>Kali:8000=>Ubuntu:22,最后来到Ubuntu的SSH端口

  1. 为什么需要Kali:8000?

    A端口与B端口通信的同时,还可以立即向C端口发送数据吗?不能。这时候,需要另一对Socket的通信。例如本地开启D端口,D口把B缓存的数据发往C端口。流量过程:B>A>D>C,B<A<D<C,事实上,A、D端口就是一个中转站,本质是B和C的Socket在通信。

    这个问题一提出来,我自己是懵的,但文字一表达出来,就明了了。

  2. 写法一,slave + listen(这里使用lcx工具,以"Ubuntu"、“Kali"表示各自的IP。)

    Kali:

    ./lcx -listen 8022 8000
    

    ​ 该语句执行时,根据端口书写顺序,先等待8022端口的输入。当用户访问Kali:8022端口时,将数据发往8000端口,并等待8000响应。

    lcx_listen_front.png

    解析:两个语句不用区分先后执行顺序。

    Ubuntu:

    ./lcx -slave Kali 8000 Ubuntu 22
    

    ​ 该语句执行时,lcx向Kali的8000端口请求,有数据来的时候,就转发到Ubuntu22端口,获取到的响应再去回复8000端口。

    lcx_slave_front.png

  3. SSH连接有顺序,流量需要从用户端到SSH端口,如果写作 ./lcx -slave Ubuntu 22 Kali 8000,lcx会一直尝试连接22端口,22端口自然会返回数据,lcx再转给8000端口,问题是,8022端口现在没有用户在用啊,数据包就丢弃了。上面的过程一直重复,SSH误以为一直有人请求访问,一直响应发包,等到真有用户连接8022端口的时候,连接就容易重置,表现为断连。

    lcx_slave_repeat.png

  4. 写法二,tran语句

    Kali:

./lcx -tran 8022 Ubuntu 22

​ 没错,就是一句话。那是因为Kali跟Ubuntu之间能互相访问。