Viper(炫彩蛇)是一款基于MetaSploit图形化的红队行动辅助平台,并且在众多方面对于国人使用MetaSploit的痛楚进行了跨越式的提升,使得它具备了与CS并驾齐驱的能力,我们可以通过Viper(炫彩蛇)来实现:
本文谨参考Viper(炫彩蛇)官方文档并融入以及个人使用体会。并且重新编排此工具使用帮助文档,旨在平行替代MetaSploit攻击战术,提高效率,简化操作,降低技术门槛。由于本人技术有限,若不可抗力本文内容出现错误,请师傅们及时提醒并指出,以免产生误导。本文大量借鉴官方原生文档的内容以及插图,并再次基础上进行重新排版和语句逻辑梳理以及个人体会增加,再次感谢Viper开发者小组。这是一篇老早就写的文,水一篇。
官方文档:https://www.yuque.com/vipersec
项目地址:https://github.com/FunnyWolf/Viper
准备一台Linux系统的VPS或虚拟机,内存大于2G,推荐使用ubuntu系统。使用f8x工具在全新的Linux环境一键安装viper,建议手动在root权限下安装配置,尽量避开su root安装。详细可参考官方首次安装文档:https://www.yuque.com/vipersec/help/olg1ua,等待系统启动后,访问https://yourvpsip:60000进行登录即可。
如果你使用VPS部署Viper,请确认VPS的防火墙开放了60000端口及后续监听需要的端口
f8x红/蓝队环境自动化部署工具由 https://github.com/ffffffff0x 团队提供
sysctl -w vm.max_map_count=262144
curl -o f8x https://f8x.io/ # wget -O f8x https://f8x.io/
bash f8x -viper
VIPER内置一套自签名SSL证书,用于实现前后端https连接,如果你的PC机所在网络环境存在流量监测设备,建议替换内置的SSL证书,绕过流量监测。此处生成的证书用于VIPER控制台前端与后台WEB服务通讯的https加密以及Nginx双向认证,与载荷reverse_https证书无关。
使用VIPER的反溯源功能可以禁止没有安装证书的IP访问后台
cd /root/VIPER/nginxconfig # /root/VIPER为viper安装目录
chmod 755 gencert.sh # 提升运行权限
./gencert.sh # 按照提示运行,牢记密码
根据指示,将 /root/VIPER/nginxconfig/client.pfx 拷贝到本地,双击导入证书到PC
此处输入脚本中指定的密码
pfx证书安装完成后,把ca.crt 也下载然后导入火狐浏览器
然后重启浏览器(必须关闭浏览器的所有进程,然后重新打开)
然后访问https://vpsip:60000登录
这一步实际测试会出现问题,我推荐使用火狐浏览器,pfx证书安装完成后,直接在火狐浏览器上进行pfx证书的导入
其实我们在此基础上,可以搭配Cloudflare证书进行反溯源配置,具体操作和CS如何隐匿是一致的
参考:https://www.yuque.com/vipersec/blog/ne2gzk
创建源服务器证书
然后设置加密模式为完全
记得关闭建议程序
现在就可以使用域名+HTTPS去访问你的VIPER后台,然后创建CF的客户端证书
然后将公钥和私钥放在一起,命名为.pem文件格式即可,需要注意的是xxxx.crt内容放前面,不要留空行
然后上传这个pem证书到VIPER
创建HTTPS监听,注意Cloudflare的端口有限制,https上线用443端口比较稳妥
上线即可形成有效的反溯源
cd /root/VIPER
docker-compose stop
cd /root/VIPER
docker-compose start
docker logs viper-c
docker exec -it viper-c bash
Viper通过docker挂载目录的方式持久化保存数据,安装完成后典型的目录如下图:
--db
|db.sqlite3 # Viper的SQL数据库文件
|dump.rdb # Viper缓存数据库文件
--log
|access.log nginx # 访问日志
|error.log nginx # 错误日志
|daphne.log viperpython # websocket运行日志
|uwsgi.log viperpython # http服务运行日志
|viperpython.log vipepython # 主服务运行日志
|puma.log # msf接口服务日志
--loot # 存放用户下载/上传的文件
--module # 存放自定义模块
--nginxconfig
|gencert.sh # 用于生成自定义ssl证书
|ssl.crt ssl.csr ssl.key ssl.origin.key # ssl证书相关文件,用于nginx
|viper.conf # nginx子配置文件,用户可通过该配置文件自定义nginx配置
右键点击生成的会话
用于展示当前会话session的详细信息,免去信息收集的痛楚,快速了解当前信息身份
查看当前会话的进程列表
点击操作可以对进程进行 注入/窃取token/还原token/kill等操作
通过点击权限,选择 文件管理进入主界面
文件管理功能类似Windows的资源管理器
上图功能依次为 打开根目录
打开默认目录
打开上级目录
目录栏
前往
刷新
切换默认目录
新建文件夹
上传文件
点击上方新建文件夹按钮可在当前目录新建文件夹
点击上传按钮可打开服务端文件管理器,可以将服务器的文件上传到当前目录
点击 下载
链接,后台自动建立下载文件任务,下载的文件会存储在 文件管理
中
支持带参数执行可执行文件(无回显)
可直接修改主机的文本
重点安利模块,免去原生MSF种配置的复杂度,以及CS中做内网多层渗透中代理的麻烦度。自动模式
中,Session会根据所在主机网卡IP/掩码/网关自动添加路由
如果内网某个网卡有多个子网,还可以通过手工输入的方式添加
内网路由页面只显示当前会话Session添加的路由,如果需要查看所有路由,可以通过 内网代理
路由列表
查看所有路由
Viper内网路由即是Metasploit的route功能,具体原理自行参考
正向转发是将当前VPS的网络端口转发到会话Session所在内网的某IP某端口.常用于连接内网的某服务,如RDP,SSH等
如将当前会话所在主机的127.0.0.1:3389映射到VPS的33899端口
远程IP(目标)
远程端口(目标)
也可以选择内网其他主机假设你已经获取到内网192.168.3.13
的权限并建立了Session
你通过一些途径了解到192.168.3.0/24网段的其他机器无法直接连接互联网,也就是无法直接连接你的VPS。俗称不出网机器
此时你可以建立如下反向转发,通过192.168.3.13的session将内网192.168.3.13:20000转发到10.10.10.10:2000
本地IP(目标):10.10.10.10
本地端口(监听):2000
远程端口(监听):20000
10.10.10.10:2000开启handler监听,192.168.3.14连接192.168.3.13:20000生成反向shell
所有内网机器连接192.168.3.13:20000就相当于连接VPS的2000端口
你可以在2000端口建立监听并建立一个192.168.3.13:20000的虚拟监听.
关于监听与虚拟监听相关信息可参考 监听载荷
监听
部分
此时可以使用虚拟监听192.168.3.13:20000作为载荷攻击内网其他机器。即使其无法直接连接VPS,Viper的端口转发功能基于metasploit-framwork的portfwd功能
可以直接删除非当前正在使用的协议
如果Session拥有多个协议,可以手动进行切换操作
切换传输协议,Viper会关闭当前Session,并等待Session所在进程使用信息的传输协议连接
传输协议中无法添加rc4密码参数,所以不要将rc4类的监听添加到传输协议中
命令终端中可以直接输入命令,还可以通过下方快捷键快速输入,实际就是原始MSF中的meterpreter增强命令行
命令终端中默认使用meterpreter增强命令行,如果希望执行系统命令,可以使用shell + 命令的方式
重新请求
会在后台执行更新主机信息模块,模块执行完成后自动将结果存储到数据库中.判断主机有哪些联网应用
通常用于判断内网其他主机的IP地址及服务
用于查找内网网段
用于判断主机的杀软及远控软件(teamviewer/anydesk)运行情况
直接点击主机图标标签修改
在主机管理中批量删除
为什么无法删除主机?
如果当前主机有正在活动的Session,viper会自动新建主机信息
为什么删除主机后Session仍然存在?
删除主机只会删除数据库中存储的主机相关信息,viper并不会关闭对应session
当在存在Session的行点击运行模块时,显示所有可用的模块,包括需要Sesison和无需Session的模块.
如果点击不存在Session的行,则默认只显示不需要Session的模块
Viper的根据ATT&TK模型对模块进行分类,可以通过选择栏进行过滤选择
支持根据关键字搜索模块,搜索功能会根据名称/TTPs/简介进行匹配
左侧点击选择模块后,右侧默认显示模块所需参数.鼠标移到参数上方时自动显示参数说明.
右侧还可以切换到说明选项卡,展示模块的更多信息
适用权限是指模块可以在哪些权限下运行,如上图1表示模块可以在 普通用户权限,管理员权限.SYSTEM权限下都可以运行
图二表示模块只能在管理员及SYSTEM权限下运行.
输入参数后点击运行即可运行模块
运行后切换到 实时输出
可以看到模块运行状态
右侧通知列表会显示 模块进入后台 模块运行时输出的日志 模块运行结束后提示
左侧展示模块的运行结果,包括 运行结束时间 主机IP 模块名称 模块参数 模块结果输出
如果模块运行时间较长,可以在任务列表页面查看后台有哪些模块在运行
点击删除按钮会手动终止模块后台运行
参考:https://www.yuque.com/vipersec/help/vdbhlm
参考:https://www.yuque.com/vipersec/help/rokuc0
在MSF原生的hander/payload基础上,Viper增加了如下两项功能
新建监听
虚拟监听
是指将输入的监听配置选项存储在缓存中,但不在服务器中建立实际运行的监听.后续在运行模块/传输协议时可以快速选择该监听配置.虚拟监听
在系统重启后仍然存在,可用于鱼叉钓鱼,持久化等场景虚拟监听与实际监听可通过 虚拟化
实例化
相互转换
Viper默认内置一个ssl证书 www.example.com.pem
,使用时可直接用于https加密,用户也可以自行上传pem格式证书,注意证书中必须包含公钥和私钥,具体格式参考 www.example.com.pem
参考:https://www.anquanke.com/post/id/255625
主要用于屏蔽沙箱及网络测绘服务器连接监听
参考:https://www.yuque.com/vipersec/help/lxlre4
WebDelivery功能与msf的exploit/multi/script/web_delivery功能相同
用于一句话加载payload.常用于可以执行命令,但是不方便上传文件的场景
参考:https://www.yuque.com/vipersec/help/kvxr65
参考:https://www.yuque.com/vipersec/help/yc0ipk
汇总端口扫描,历史Session上线信息,当前Session信息及当前路由信息,分析处理后生成网络拓扑图
网络节点及连接线说明见下图
参考:https://www.yuque.com/vipersec/help/gh60e1
Viper的内网代理功能基于MSF的socks4a/socks5代理模块集成而来
Viper将内网路由,端口转发,内网代理集中控制,方便使用
参考:https://www.yuque.com/vipersec/help/cv0shx
通过模块获取到的密码信息都会存储在此处
参考:https://www.yuque.com/vipersec/help/iydrqn
基本原生复制msfconsole操作
参考:https://www.yuque.com/vipersec/help/tzugzn
实验模块参考:https://www.yuque.com/vipersec/help/yrys61
使用VIPER扫描Log4j漏洞(主动扫描/被动扫描)
参考:https://www.yuque.com/vipersec/blog/lgrqm4
参考:https://quake.360.cn/quake/#/help?title=%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E
参考:https://www.zoomeye.org/doc
配置消息通道,获取SendKey,填入SendKey
参考:https://sct.ftqq.com/
参考:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
参考:https://longnight.github.io/2018/12/12/Telegram-Bot-notifications
当激活Session监控后,每当平台新增Session时都会发送通知. 需要结合Bot使用
参考:https://www.yuque.com/vipersec/blog/ov21zg
FOFA API:https://fofa.so/static_pages/api_help
填写为你的VPS的互联网IP/域名
VIPER已占用端口:
渗透服务为metasploit-framework定制化魔改而来,通常每周与官方同步一次
修改主要集中于msfrpc服务,session控制,msfconsole,并增加了多个定制化模块
源代码:https://github.com/FunnyWolf/vipermsf
开发语言:Ruby,C
后台服务主体是Django框架,apscheduler作为后台进程
使用redis及msfrpc restapi与渗透服务通讯.并自定义实现一个模块运行流水线
源代码:https://github.com/FunnyWolf/viperpython
开发语言:Python,C
前端基于UMI3构建,技术栈为Ant Design React,React hooks
源代码:https://github.com/FunnyWolf/viperjs
开发语言:Javascript
参考官方文档:https://www.yuque.com/vipersec/code/nqmgvy
对于内置的模块,我觉的官方介绍的十分详细,如果师傅们在使用某个模块时,提前应看看此模块的说明,避免出错。对于Viper的基本流程使用,我会在第四个模块:Red Team Traceback-红队手法追溯中做比较详细的分析。
模块参考文档:https://www.yuque.com/vipersec/module
假设我们在获取一个 Win10 出网双网卡机器的Session 之后,我们在内网就已经有了立足点,可以进行后续信息收集/横向移动等操作了。
点击对应监听的生成载荷,浏览器会自动下载一个免杀的exe或elf
免杀载荷可能由于杀毒软件厂商添加 md5 标签而失效
将生成的exe上传到要控制主机中,然后执行
Session 是一种增强版的 Shell,后续 Session 统称为权限,此时控制台已经获取了一个 Session
控制台中显示权限及主机的重要信息,从左到右分别介绍各个图标的含义.
平台会根据当前目标是否有 session 权限来自动过滤适用的模块
心跳时间超过 1 分钟后图标会变成红色,此时 VIPER 后台认为该 session 很可能已经失效,但是对于tcp类型的 payload,在长时间不操作时可能处于休眠状态导致心跳超过 1 分钟,对 session 重新操作即可唤醒 session
此 ip 地址一般为企业出口路由器的公网 IP,此时鼠标移动到该标签上方会显示 session 完整网络连接信息及 GeoIP(地理位置信息)
arch 表示 session 进程的 arch,并不表示操作系统的 arch,操作系统的 arch 可以在主机信息里面查看
其中白色的表示该 session 是普通用户权限,金色表示 session 是管理员权限(已过 uac),便于直观判断
内网可以理解为在 NAT 后面的网络
正方形图标表示主机的图标标签,可以通过点击图标自行修改,鼠标移动到图标上时会显示主机的备注信息
点击权限中的任意标签会弹出针对对权限的所有可用操作
阿里云等国内云厂商有流量监控设备,请使用带加密的监听(reverse_https),由于 vps 带宽原因,执行 payload 后请稍等一段时间,请勿删除对应监听
最低分辨率支持 1366x768,如果界面错乱请尝试清空浏览器缓存.
在获取一个 Session 之后,我们在内网就已经有了一个立足点,可以进行后续信息收集/横向移动等操作了.
还可以将常用的模块加星,模块会在下次打开时置顶
shell + 命令 执行系统命令,如:shell whoami
主机信息会展示可能和渗透相关的进程信息,比如 lsass 进程,杀毒软件进程等
请加入微信内部群(人数已满请在公众号后台点击联系方式加我VX后拉你进群)共同吹水玩耍交流,并且随时反馈Bug