4

各种端口转发工具的使用方法

 3 years ago
source link: https://y4er.com/post/port-forwarding/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

各种端口转发工具的使用方法

2019-07-23

科普转发工具的用法

本文主要介绍几种内网中常用的端口转发以代理的几种姿势。阅读本文前请看到每个阶段的网络环境,对理解本文有重要帮助。

我们在这里用三台实验机

client :172.16.1.1

attacker:172.16.2.18 172.16.1.144

server:172.16.2.8

我们的目的是从我们的client就可以连接上 win2008 的远程桌面。

lcx.exe有两大功能

  1. 端口转发 slave和listen成对使用
  2. 端口映射 tran

slave listen

server执行

lcx.exe -s 172.16.2.18 5555 127.0.0.1 3389

这句话的意思是把本机的3389端口转发到172.16.2.18的5555端口

在attacker执行

lcx.exe -l 5555 4444

这句是把本机5555接收到的数据转发到本机的4444端口

现在就可以在client上 mstsc 连接attacker的4444端口,或者直接在attacker中连接127.0.0.1:4444

整个数据的流向

client <-> 4444 attacker 5555 <->3389 server

如果server中有防火墙不允许3389出站,那么可以用tran将3389映射到防火墙允许出站的端口,比如53端口。

server执行

lcx -t 53 172.16.2.8 3389

直接连接server:53

server 3389 <-> 53 <->attacker

Earthworm

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

该工具共有 6 种命令格式:ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran

正向socks5

attacker:

ew -s ssocksd -l 1080

client:

C:\Users\Y4er>curl http://172.16.2.8 -x socks5://172.16.1.144:1080
I am 172.16.2.8

client <-> attacker 1080 <-> server

反向socks5

attacker执行,监听8888端口转发到1080端口

ew -s rcsocks -l 1080 -e 8888

在server中启动socks5服务,并且反弹到attacker的8888端口

ew -s rssocks -d 172.16.2.18 -e 8888

在client中就可以用这个代理了

curl http://172.16.2.8 -x socks5://172.16.1.144:1080

client <-> attacker 1080 <-> attacker 8888 <-> server

这里着重说一下lcx_tranlcx_listenlcx_slave的用法。

在attacker中启动一个socks5代理,端口是9999

ew -s ssocksd -l 9999

然后通过lcx_tran来转发9999到1080

ew.exe -s lcx_tran -l 1080 -f 127.0.0.1 -g 9999

然后就能从client访问server了

curl http://172.16.2.8 -x socks5://172.16.1.144:1080

实际上还是用attacker搭了一个socks5代理,这个例子主要说的是lcx_tran的使用方法

案例二: attacker:

ew.exe -s lcx_listen -l 1234 -e 8888

server:

ew.exe -s lcx_slave -d 192.168.1.100 -e 8888 -f 127.0.0.1 -g 3389

原理和lcx一样

假如我们当前的网络环境如下

a: 192.168.1.100
b: 192.168.1.101,10.0.0.1
c: 10.0.0.2,172.16.0.1
d: 172.16.0.2

那么我们怎么做才能让a访问到d的资源呢?

ew提供了多级级联

a: ew.exe -s lcx_listen -l 1080 -e 8888
b: ew.exe -s lcx_slave -d 192.168.1.100 -e 8888 -f 10.0.0.2  -g 9999
c: ew.exe -s lcx_tran -l 9999 -f 172.16.0.2 -g 3389

a 1080 <-> a 8888 <-> b 9999 <-> c 9999 <-> d 3389

netsh

netsh(Network Shell) 是一个windows系统本身提供的功能强大的网络配置命令行工具。

https://docs.microsoft.com/zh-cn/windows-server/networking/technologies/netsh/netsh-contexts

netsh添加规则

netsh interface portproxy set v4tov4 listenaddress=172.16.1.144  listenport=4444 connectaddress=172.16.2.8 connectport=3389

将172.16.1.144的4444端口映射到172.16.2.8的3389

C:\Users\Administrator\Desktop>netsh interface portproxy show all

侦听 ipv4:                 连接到 ipv4:

地址            端口        地址            端口
--------------- ----------  --------------- ----------
172.16.1.144    4444        172.16.2.8      3389
netsh interface portproxy delete v4tov4 listenaddress=172.16.1.144 listenport=4444

关闭防火墙

netsh firewall set opmode disabled

sSocks

sSocks是一个socks代理工具套装,可用来开启socks代理服务,支持socks5验证,支持IPV6和UDP,并提供反向socks代理服务,即将远程计算机作为socks代理服务端,反弹回本地,极大方便内网的渗透测试。官方地址:http://sourceforge.net/projects/ssocks/

使用方法类似ew

attacker

rcsocks -l 4444 -p 5555 -vv

server

rssocks –vv –s 172.16.2.8:5555

client

curl 172.16.2.8 -x socks5://172.16.1.144:4444

portfwd

portfwd是一款强大的端口转发工具,支持TCP,UDP,支持IPV4–IPV6的转换转发。

portfwd是meterpreter中内置的功能,也有单机exe版本的https://github.com/rssnsj/portfwd

较为简单,不举例了。


以上我们将的都是win平台下的tcp端口转发,接下来我们看Linux平台下的。

改变下我们当前的网络结构

win10 client:172.16.1.1

kali attacker:172.16.1.141 172.16.2.19

win2008 server:172.16.2.8

我们现在的目的是通过kali的转发来使client连接到server的3389


socat

socat是一个多功能的网络工具,名字来由是” Socket CAT”,可以看作是netcat的N倍加强版,socat的官方网站:http://www.dest-unreach.org/socat/

socat的主要特点就是在两个数据流之间建立通道,且支持众多协议和链接方式:ip, tcp, udp, ipv6, pipe,exec,system,open,proxy,openssl,socket等。

socat TCP4-LISTEN:4444 TCP4:172.16.2.8:3389

client连接172.16.1.141:4444就是连接server的3389

如果需要使用并发连接,则加一个fork,如下:

socat TCP4-LISTEN:4444,fork TCP4:172.16.2.8:3389

在一个NAT环境,如何从外部连接到内部的一个端口呢?只要能够在内部运行socat就可以了。

attacker

socat tcp-listen:1234 tcp-listen:3389 

server

socat tcp:172.16.2.19:1234 tcp:172.16.2.8:3389

这样,你外部机器上的3389就映射在内部网172.16.2.8的3389端口上。

mstsc 172.16.1.141:3389

参考倾旋师傅的文章https://payloads.online/tools/socat


我们再来看看基于ssh协议的端口转发,环境跟上文一样。


SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH 还同时提供了一个非常有用的功能,这就是端口转发。它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。

https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/index.html

SSH 端口转发能够提供两大功能:

  1. 加密 SSH Client 端至 SSH Server 端之间的通讯数据。
  2. 突破防火墙的限制完成一些之前无法建立的 TCP 连接。

-C Enable compression.

压缩数据传输。

-N Do not execute a shell or command. 不执行脚本或命令,通常与-f连用。

-g Allow remote hosts to connect to forwarded ports. 在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。

-f Fork into background after authentication. 后台认证用户/密码,通常和-N连用,不用登录到远程主机。

本地端口转发

所谓本地端口转发,就是将发送到本地端口的请求,转发到目标端口。这样,就可以通过访问本地端口,来访问目标端口的服务。

client(win10有ssh命令)

ssh -CfNg -L 4444:172.16.2.8:3389 [email protected]

此时client去连接localhost:4444就是server:3389

远程端口转发

所谓远程端口转发,就是将发送到远程端口的请求,转发到目标端口。这样,就可以通过访问远程端口,来访问目标端口的服务。

client

ssh -CfNg -R 4444:172.16.1.1:3389 [email protected]

此时client去连接localhost:4444就是server:3389

本地转发与远程转发的对比

首先,SSH 端口转发自然需要 SSH 连接,而 SSH 连接是有方向的,从 SSH Client 到 SSH Server 。而我们的应用也是有方向的,比如需要连接远程桌面时,远程桌面自然就是 Server 端,我们应用连接的方向也是从应用的 Client 端连接到应用的 Server 端。如果这两个连接的方向一致,那我们就说它是本地转发。而如果两个方向不一致,我们就说它是远程转发。

总的思路是通过将 TCP 连接转发到 SSH 通道上以解决数据加密以及突破防火墙的种种限制。对一些已知端口号的应用,例如 Telnet/LDAP/SMTP,我们可以使用本地端口转发或者远程端口转发来达到目的。

如果你对ssh转发还有问题的话,推荐阅读以下文章

ssh架设socks代理

client

ssh -qTfnN -D 1080 172.16.1.141

client上架设socks,端口1080,数据通过attacker转发到内网。

dnscat2

dnscat2 是一款基于 DNS 协议的代理隧道。不仅支持端口转发,另外还有执行命令,文件传输等功能。其原理与 DNS Log 类似, 分为直连和中继两种模式, 前者直接连接服务端的 53 端口, 速度快, 但隐蔽性差, 后者通过对所设置域名的递归查询进行数据传输, 速度慢, 但隐蔽性好。

创建一条端口转发

(the security depends on the strength of your pre-shared secret!)
This is a command session!

That means you can enter a dnscat2 command such as
'ping'! For a full list of clients, try 'help'.

command (LAPTOP) 1> listen 1234 127.0.0.1:3389
Listening on 0.0.0.0:1234, sending connections to 127.0.0.1:3389
command (LAPTOP) 1> 

这个我没有测试,这个参考 @X1r0z 的文章 dnscat2 tunnel

至于更多用法请参阅 README.MD

HTTP/HTTPS隧道

http隧道较为简单,在这里举几个有名的http隧道(或是基于http包装的tcp隧道)

如何使用socks代理?

  1. shadowsocks
  2. sockcap64 windows
  3. Proxifier
  4. proxychains
  1. win2008 远程桌面黑屏鼠标没反应可能是因为你登录的用户已经登录了。
  2. 连不上3389需要先关防火墙。
  3. socat尽量用fork,不然一次会话结束后就会断。

文章中的很多东西网上都有,端口转发实际上只要明白原理和数据的流向,就很明了了。

但是对于杀软来说,像lcx这种工具传上去就被杀掉了,所以推荐golang自写端口转发工具,当然你也可以在GitHub找一些少见的自写的端口转发工具来规避杀软。比如https://github.com/tavenli/port-forward

参考链接:

文笔垃圾,措辞轻浮,内容浅显,操作生疏。不足之处欢迎大师傅们指点和纠正,感激不尽。


Recommend

  • 46
    • www.freebuf.com 6 years ago
    • Cache

    内网渗透之端口转发与代理

    内网渗透之端口转发与代理

  • 29
    • www.tuicool.com 5 years ago
    • Cache

    SSH 端口转发教程

    SSH 端口转发教程 对于开发者来说,ssh 是一个必备的工具,用来登录服务器。 但是,它还有一大用途,就是作为加密通信的中介,充当两台服务器之间的通信加密跳板。这个功能称为端口转发(port forwarding),又称 ssh...

  • 52
    • www.tuicool.com 4 years ago
    • Cache

    charles 端口转发

    本文参考: charles 端口转发 端口转发 端口转发(Port forwarding),有时被叫做隧道,是安全壳(SSH) 为网络安全通信使用的一种方...

  • 46
    • www.tuicool.com 4 years ago
    • Cache

    ssh端口转发的三种方式

    ssh是我使用最频繁的两个命令行工具之一(另一个则必须是vim)。有了ssh,我可以远程处理各种可能出现的问题而无需肉身到现场。 这几天teamviewer被黑的事情影响挺大,于是由远程控制想到了内网穿透,自然而然的想到了ssh的端口转...

  • 34
    • www.tlanyan.me 4 years ago
    • Cache

    ssh端口转发的三种方式 - tlanyan

    ssh端口转发的三种方式ssh是我使用最频繁的两个命令行工具之一(另一个则必须是vim)。有了ssh,我可以远程处理各种可能出现的问题而无需肉身到现场。这几天teamviewer被黑的事情影响挺大,于是由远程控制想到了内网穿透,自...

  • 22

    iox English | 中文 Tool for port forward & intranet proxy, just like lcx / ew , but bett...

  • 28
    • www.cnblogs.com 3 years ago
    • Cache

    ssh端口转发

    假设现在有两台服务器client1,client2,他们直接不能直接相互通信,但是他们均能连接上第三台服务器balance,我们可以在client1,client2和balance三台机器之间建立ssh隧道来让client1和client2实现通信。 ssh端口转发有三种实...

  • 11
    • beginor.github.io 3 years ago
    • Cache

    SSH 端口转发小结

    SSH 端口转发小结 Linux 的 SSH 服务不仅仅能够远程登录和管理,还可以在本地计算机和服务器之间建立 TCP 通道, 实现代理、内网穿透、暴露内网服务等功能,简单可靠。 动态端口转发 将向本地指定端口发送的请求通过 SSH...

  • 7
    • 3gstudent.github.io 3 years ago
    • Cache

    渗透基础——端口转发与代理

    0x00 前言 在渗透测试中,经常会使用到端口转发和代理。 端口转发是转发一个网络端口从一个网络节点到另一个网络节点的行为。 实际应用中需要考虑两种情况: Client->Transit server->Server:Client能够正...

  • 2
    • halfcoke.github.io 2 years ago
    • Cache

    FRP端口转发工具

    FRP端口转发工具及部署方式详解(win+linux)在此前的文章中,介绍了使用ssh命令进行端口转发。使用ssh进行端口转发有优点也有缺点,其优点主要在使用方便,服务器上基本都安装了ssh服务...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK